•  AWS의 IAM, Lambda, CloudWatch 를 활용하여 EC2 인스턴스 자동 시작/중지 기능을 추가할 수 있습니다.
  • 위의 설정을 완료한 후 원하는 EC2 인스턴스의 tag 에 아래와 같이 추가하면 CloudWatch에서 설정한 시간에 인스턴스가 자동 시작/중지됩니다.
  • Name='Ec2AutoStart', Value='True'
  • Name='Ec2AutoStop', Value='True'
  • 아래와 같은 순서로 진행합니다.
  1. IAM 정책 생성
  2. IAM 역할 생성
  3. Lambda 함수 생성
  4. CloudWatch 이벤트 규칙 생성
  5. EC2 인스턴스에 태그 추가
  6. 결과 확인

 


1. IAM 정책 생성

  • JSON 코드
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "ec2:DescribeInstances",
                "ec2:DescribeTags",
                "logs:CreateLogGroup",
                "logs:PutLogEvents",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}

 

  • 새로 생성한 정책이 허용된 서비스와 엑세스 레벨이 아래와 같이 되어있는지 확인합니다.

 

 


2. IAM 역할 생성

  • 아래와 같이 역할을 생성합니다.

 


3. Lambda 함수 생성

  • 함수 생성 시 '기본 실행 역할 변경' > '기존 역할 사용' 선택 후 2번에서 생성하였던 IAM 역할을 선택합니다.

 

  • 함수 생성을 완료하면 아래의 내용을 코드 소스에 추가해줍니다. 'Deploy' 버튼을 눌러야 코드 소스가 배포됩니다.
import boto3

def lambda_handler(event, context):

    awsregion = boto3.session.Session().region_name
    print('RegionName', awsregion)
    ec2 = boto3.resource('ec2', region_name=awsregion)

    # all stopped EC2 instances.
    filters = [{
            'Name': 'tag:Ec2AutoStart',
            'Values': ['True']
        },
        {
            'Name': 'instance-state-name', 
            'Values': ['stopped']
        }
    ]

    # filter the instances
    instances = ec2.instances.filter(Filters=filters)
    print('instances :',instances)
    
    # locate all stopped instances
    RunningInstances = [instance.id for instance in instances]

    # print StoppedInstances 
    if len(RunningInstances) > 0:
        # perform the startup
        AutoStarting = ec2.instances.filter(InstanceIds=RunningInstances).start()
        print(AutoStarting)
    else:
        print("Nothing to see here")

 

  • '구성' > '일반 구성' 에서 제한 시간을 30초로 늘려줍니다.

 

  • 테스트 이벤트를 생성하고 작성한 함수가 정상적으로 동작하는지 확인합니다.

 

  • 위와 똑같은 방법으로 Stop 함수도 생성해줍니다.
import boto3

def lambda_handler(event, context):

    awsregion = boto3.session.Session().region_name
    print('RegionName', awsregion)
    ec2 = boto3.resource('ec2', region_name=awsregion)

    # All running EC2 instances.
    filters = [{
            'Name': 'tag:Ec2AutoStop',
            'Values': ['True']
        },
        {
            'Name': 'instance-state-name', 
            'Values': ['running']
        }
    ]

    # Filter the instances which are stopped
    instances = ec2.instances.filter(Filters=filters)
    print('instances :',instances)

    # Get all id of running EC2 Instances
    RunningInstances = [instance.id for instance in instances]

    # Print the instances for logging purposes
    # Print RunningInstances 
    if len(RunningInstances) > 0:
        # Perform Shutdown EC2 Instances
        shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
        print(shuttingDown)
    else:
        print("Nothing to see here")

 


4. CloudWatch 이벤트 규칙 생성

  • 아래와 같이 이벤트 규칙을 생성합니다.
  • 아래의 예제는 월~금 7시 50분에 EC2가 기동됩니다(한국시간 기준).
  • 참고) cron 표현식을 생성해주는 사이트 http://www.cronmaker.com/?1

 

  • 위와 같은 방법으로 Stop 이벤트 규칙도 생성해줍니다.
  • 아래 예제는 월~금 19시에 EC2가 중지됩니다(한국시간 기준).

 

  • 정상적으로 생성을 완료하였다면 아래와 같이 Lambda 함수 화면에서 CloudWatch Event 가 추가되어 있습니다.

 


5. EC2 인스턴스에 태그 추가

 

  • 아래와 같이 원하는 인스턴스에 태그를 붙여줍니다.

 


6. 결과 확인

  • CloudWatch의 로그 그룹을 확인하고 정상적으로 로그가 출력되었는지, 해당 시간에 EC2 인스턴스가 정상적으로 기동/중지되었는지 확인합니다.

 

 

※ 아래는 'AWSome Day 온라인 컨퍼런스(2022-06-09)' 강의를 수강하고 정리한 내용입니다.

 

사물 인터넷 IoT
 사물 관리의 당면 과제
1. 플랫폼
 - 완전한 IoT 솔루션 개발 및 배치가 어렵다.
  - 일관되지 않거나 간헐적으로 끊기는 네트워크 연결
  - 디바이스가 원격에 있어 물리적으로 액세스할 수 없음
  - 생산 단계의 대규모 디바이스 플릿
2. 긴 대기시간
 - 대량 데이터의 실시간 분석이 어렵다.

 AWS IoT Greengrass
- 데이터를 멀리 떨어진 클라우드로 보낼 필요가 없다.
- 데이터가 로컬에 저장되므로 시간을 절약하며 작업이 가능하다.
- 필요한 데이터만 클라우드로 전송 → 비용 절감

 기계 학습
- 인공 지능(AI)
   ㄴ기계 학습(ML):기계로 데이터의 패턴을 검색하여 논리 모델을 자동으로 빌드하는 AI 하위 집합
      ㄴ딥 러닝

 Amazon SageMaker
예) 미국 풋볼
→ 선수 움직임, 공의 움직임. Amazon SageMaker을 기반으로 구축된 ML모델이 실시간 예측 수행

 Amazon Rekognition
객체 및 장면 탐지. 부적절한 사진 검출.
얼굴 분석. 여러 차원에서 얼굴 특성 분석

 블록체인
데이터 분산 처리.
신뢰할 수 있는 중앙 기관이 없어도 여러 당사자가 트랜젝션을 실행할 수 있는 어플리케이션을 구축할 수 있다.
특징
- 분산 저장방식
- 중앙 관리자의 불필요성

 Amazon Managed Blockchain
인기 있는 오픈 소스 프레임워크를 사용하여 확장 가능한 블록체인 네트워크를 손쉽게 생성하고 관리
할 수 있는 완전관리형 서비스
기능
완전관리형, 오픈 소스 다양성, 분산형, 신뢰성 및 확장성, 저렴한 비용, 통합

 AWS Ground Station
자체 지상국 인프라 구축이나 관리를 걱정할 필요 없이 인공위성 통신을 제어하고 데이터를 처리하며 작업을 확장할 수 있는 완전관리형 서비스

 AWS Wavelength
AWS 컴퓨팅 및 스토리지 서비스에 5G 네트워크의 높은 대역폭과 매우 짧은 지연을 결합하여 개발자가 완전히 새로운 종류의 애플리케이션을 혁신하고 제작할 수 있다.
모바일 엣지 컴퓨팅 : 전송 시작이 비약적으로 단축됨

※ 아래는 'AWSome Day 온라인 컨퍼런스(2022-06-09)' 강의를 수강하고 정리한 내용입니다.

 


1. 네트워크

● Amazon Virtual Private Cloud(Amazon VPC)
- VPC : 논리적으로 분리되어있는 가상 네트워크
- 프라이빗 서브넷 : 기본적으로 생성하면 외부와 통신할 수 없음.
- 퍼블릭 서브넷 되려면
 1) 인터넷 게이트웨이라고 불리는 서비스를 생성해서 VPC에 연결
 2) 라우팅 테이블에서 해당 항목에 대한 트래픽 경로가 지정되어야 함
 3) 외부에서 접근할 수 있는 퍼블릭 IP주소를 가지고 있어야 함
- VPC의 계층화된 네트워크 방어
 1) VPC 라우팅 테이블
 2) 서브넷 ACL : inbound/outbound
 3) EC2/탄력젹 네트워크 인터페이스 보안 그룹 : inbound/outbound
  인바운드, 아웃바운드 트래픽을 제어하는 가상 방화벽
 4) 서드 파티 호스팅 기반 보호
  사용자가 직접 설치하는 보안솔루션 혹은 서비스

● Elastic Load Balancing(ELB)
- 들어오는 어플리케이션 트래픽을 EC2 인스턴스, 컨테이너, IP 주소 등과 같은 여러 대상에게 자동으로 분산시킨다.
- 어플리케이션 내결함성에 필요한 고가용성, 강력한 보안 등을 지니고 있다.

● Amazon Route 53
- 가용성과 확장성이 뛰어난 클라우드 DNS(Domain Name System) 서비스
1) 도메인 이름 등록
2) 인터넷을 통해 웹 서버 같은 리소스로 자동화된 요청을 보내고 접근 및 사용이 가능한지 확인
 리소스를 사용할 수 없을 때 다른 곳으로 보냄
3) 다양한 라우팅 옵션 제공 (지역 기반 라우팅, ...)

● 네트워킹 전체 요약
DNs를 통해 어플리케이션에 접근하면 Route 53이 IP
전달받은 ip 정보로 트래픽 요청
AWS 클라우드의 vpc
트래픽은
ELB는
오토 스케일링 그룹

 


2. 보안

● 공동 책임 모델
- 고객, AWS 둘의 공동 책임
- 고객 : AWS에서 제공한 보안 그룹을 직접 구성할 책임
- AWS : AWS 기초 서비스, AWS 글로벌 인프라
1) 클라우드의 보안 : AWS의 책임. 모든 서비스를 실행하는 인프라를 보호할 책임이 있다.
 AWS 서비스를 실행하하는 SW, 네트워킹으로 구성된다.
2) 클라우드에서의 보안: 고객이 책임지는 보안 책임 영역
 예 : 데이터의 서버측 암호화 여부, 운체 보안 패치 실행 여부

● IAM(AWS Identity and Access Management)
- AWS 리소스에 대한 액세스를 안전하게 제어
- 사용자, 그룹 또는 역활에 세분화된 권한 할당
  사용자를 생성하거나 사용자에게 개별 보안 자격 증명을 할당하거나 등
 사용자에게 액세스 권한을 부여할 수 있다
- AWS 계정에 대한 임시 액세스 공유
- 추가 비용 없이 제공하는 기능

● IAM 구성 요소
1) 사용자 : 사용자를 통해 인증. AWS와 상호 작용하는 사람 또는 어플리케이션
    Access Key ID, Secret Access Key
2) 그룹 : 동일한 권한을 가진 사용자 모음
3) 정책 : JSON 형태로 기술된 정책을 사용자, 그룹, 역할에 연결하게 된다.
4) 역할 : 사용자와 비슷하지만, AWS리소스에 액세스 권한을 위임할 수 있다.
 장기 자격 증명이 없다.

● IAM 사용자
- IAM 사용자는 별도의 AWS 계정이 아닌 계정 내 사용자
- 각 사용자는 자체 자격 증명 보유
- IAM 사용자는 자체 권한을 기준으로 특정 AWS 작업을 수행할 권한 보유
- 프로그래밍 방식 엑세스를 위해 Access Key ID, Secret Access Key를 사용한다.
- 계정은 프로그래밍 엑세스 방식으로 하지 않도록 한다(보안 문제, 계정은 슈퍼 유저 혹은 루트 사용자 권한을 갖고 있다).

● Amazon S3 액세스 제어 : 일반
IAM 정책 유형
S3 버킷 정책 :
- 리소스 자체에서 권한을 부여해 접근 부여
예제) # aws s3 ls s3://홈피주소
콘솔에 입력하여 해당 명령어가 수행되는지 확인. 권한이 없다면 조회되지 않음.

● AWS CloudTrail
- AWS 계정의 사용자 활동 및 API 사용 추적
- 지속적으로 사용자 활동을 모니터링하고 API 호출을 지록
- 규정 준수 감사, 보안 분석, 문제 해결에 유용
- 로그 파일은 Amazon S3 버킷으로 전송됨 

● AWS Trusted Advisor 
- 비용 절감, 성능 개선, 보안 강화에 도움이 되는 지침을 제공하는 서비스
- 모범 사례 5가지 확인 가능 (비용 최적화, 성능, 보안, 내결함성 기능, 서비스 한도)
1) 비용 최적화 : 비용 최적화에서 사용되지 않은 유휴 리소스 제거, 예약 용량을 약정하여 AWS에서 비용을 절약할 수 있는 방법 등을 알아볼 수 있다.
2) 성능 : 서비스 한도를 점검하고 프로비저닝된 처리량을 활용하는지 확인하고 초과 사용되는 인스턴스를 모니터링해 성능을 개선할 수 있다.
3) 보안 : 결함을 없애고, 다양한 AWS 보안 기능을 사용하고, 권한을 점검해 서비스에 대한 보안을 향상할 수 있다.
4) 내결함성 기능 : 자동조정, 상태확인, 복수 가용 영역, 백업 기능을 사용하여 AWS 애플리케이션의 가용성과 중복성을 높이는 데 활용될 수 있다.
5) 서비스 한도 : 서비스 한도의 80%가 넘는 서비스 사용량이 있는지 점검한다. 값은 스냅샷을 기반으로 하므로 현재 사용량과 다를 수 있다. 한도 및 사용량에 변경사항이 반영되는 데 최대 24시간이 걸릴 수 있다.

※ 아래는 'AWSome Day 온라인 컨퍼런스(2022-06-09)' 강의를 수강하고 정리한 내용입니다.

 

● 스토리지 옵션
- Amazon S3
- Amazon S3 Glacier
- Amazon EFS : NAS 처럼 여러 사람이 동시에 쓰기 작업을 할 수 있는 공유 스토리지. Amazon EC2 인스턴스용 확장 가능 네트워크 파일 스토리지.
- AWS Storage Gateway
- Amazon EBS(Elastic Block Store) : EC2에서 사용하도록 설계됨.

1. Amazon S3 (Simple Storage Service)
- 객체 수준 스토리지
- 특징1 : 높은 가용성과 내구성을 지닌 스토리지. 백업과 아카이브 용도로도 사용 가능
- 특징2 : 높은 수평확장성(유연성). 원하는 만큼 데이터 저장 가능
→ 손쉽게 다수의 동시 트렌젝션 가능.
→ 금융 거래 분석 등 워크로드를 지원하는 빅데이터 분석
- 이벤트 알림 기능 : 특정 버킷으로 객체가 업로드되는 등 특정 이벤트가 발생할 때 자동 알림 설정이 가능하다.
→ 람다 스크립트같은 다른 스크립트를 트리거하는 데 사용 가능.
- 정적 웹 컨텐츠 혹은 미디어를 저장하고 배포할 수 있다.(정적 웹 사이트 호스팅)
- 데이터 레이크, 빅 데이터 분석에 많이 사용됨
- AWL Lake Formation
- 클라우드 네이티브 어플리케이션에 대한 스토리지로 사용이 된다.
- 용량에 상관없이 데이터를 업로드하고 어디서든 엑세스하여 어플리케이션을 더 빠르게 배포하고 더 많은 사용자가 액세스하도록 구성할 수 있다.

 S3가 데이터를 저장하는 방식
- 데이터를 버킷이라는 단위로 데이터를 저장하고 관리한다.
→ 버킷 : 파일 저장과 함께 사용하는 다른 접근 방식. 계층적 x. 객체 스토리지.
   > 폴더 대신 여러 개의 객체를 저장할 수 있도록 버킷이라는 단위를 사용한다고 보면 된다.
-  Key, Value로 구성되어있어 신속하게 저장된 객체를 검색하여 사용 가능
- 데이터 검색 시 사용할 수 있는 고유한 객체값 부여
- Key, Value 로 굉장히 신속하게 저장한 객체를 저장해서 사용할 수 있다.
- 한번에 업로드할 수 있는 객체 크기는 5TB. 객체 수는 제한 없다.(수평확장성)
- 생성한 버킷, 객체에 대한 모든 액세스를 직접 제어할 수 있다.
→ 버킷을 검색할 수 있는 사용자를 제어할 수 있는 정책 생성 가능
- AWS 리전 선택 가능
예) 사운드클라우드, Sony, DADC 등이 S3 사용중.

2. Amazon S3 Glacier
- S3에서 선택할 수 있는 다양한 저장 옵션 중 하나. 
  저렴한 비용으로 데이터 아카이브용 스토리지 서비스를 사용할 수 있다.
- 키워드 : '아카이브'.
- 1GB당 5원 정도의 비용으로 데이터 저장.
- 저장된 아카이브 데이터에 직접 강력한 분석을 실행할 수 있다.
- Glacier보다 더 저렴한 거 : S3 Deep Archive
- 장기 데이터 스토리지
- 아카이브 및 백업
- 비용이 매우 저렴한 스토리지

3. Amazon EBS(Elastic Block Store)
- EBS 유형 2가지 : 트랜잭션 워크로드를 위한 SSD, 처리량 워크로드를 위한 HDD
- 인스턴스용 영구 블록 스토리지
- 복제를 통해 보호
- 상이한 드라이브 유형
- 몇 분 만에 확장 또는 축소
- 프로비저닝한 만큼만 요금 지불
- 스냅샷 기능 → S3에 저장됨
    → 하나 가용영역에 문제 발생해도 다른 영역에 저장된 스냅샷 사용하면 된다
- 암호화 사용 가능(추가 비용x)
 암호화는 EC2에서 발생. 전송중, 저장 시 EBS 볼륨 암호화와 함께 암호화된다.

 목적별 데이터베이스 : 약 15가지 종류가 있다..

 DIY와 AWS 데이터베이스 서비스 비교
DB를 사용하는 2가지 방법
1) Amazon EC2의 데이터베이스
- 운영체제 액세스
- 특정 애플리케이션의 기능 필요
- AWS에서 지원하지 않는 상용 DB SW를 직접 구축 가능
2) AWS 데이터베이스 서비스
- AWS 관리형 데이터베이스 사용 옵션
- 손쉬운 설정, 관리, 유지
- 즉각적인 고가용성 구현
- 성능에 초점
- 관리형 인프라
- DB 이중화를 빠르고 손쉽게 할 수 있다.
- 성능 조정, 스키마 최적화같은 고차원적인 DB 작업에 집중 가능
- 인스턴스 유형 규모를 확장하거나 축소하면서 DB 관리가 가능하다.

 AWS의 DB 서비스
1) Amazon RDS
- 확장 가능한 용량을 제공하는 관계형 데이터베이스
- Amazon Aurora, PostgreSQL, MYSQL, ..
- 기존 DB를 RDS로 손쉽에 마이그레이션, 복제 가능.
- DB 중단 필요 없이 DB 컴퓨팅 및 스토리지 리소스를 확장할 수 있다.
- 안정성 높은 인프라에서 실행됨. DB 이중화 손쉽게 가능.

 Amaxon Aurora
- 아마존에서 자체적으로 만든 것.
- 클라우드용으로 빌드된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스
- 성능 : 표준 MySQL DB보다 5배쯤 빠름. 표준 PostgerSQL보다 3배쯤 빠름.
- 내결함성을 갖춘 자가 복구 ... 최대 64TB..

 Amazon DynamoDB
- noSQL DB
- 어떤 규모에서든 빠르고 유연성이 뛰어난 비관계형 데이터베이스 서비스
- 완전관리 방식의 비관계형 DB 서비스
- 목표 처리량을 설정하면 나머지는 알아서 해줌.
- Fine Grained Access Control...
- 완전 관리형
- 빠르고 일관된 성능
- 세분화된 액세스 제어
- 유연성 AWS SDK를 사용해서 JSON문서를...

 정리)
S3 : 인터텟용 객체 스토리지
EBS
EFS : 파일 스토리지
DB : Amazon RDS, DynamoDB, ...

+ Recent posts