기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
여러 AWS 계정에서 공유 Amazon Machine Image 사용 모니터링
작성자: Naveen Suthar(AWS) 및 Sandeep Gawande(AWS)
환경: PoC 또는 파일럿 | 기술: 관리 및 거버넌스, DevOps서버리스, 운영 | |
AWS 서비스: Amazon DynamoDB , AWS Lambda, Amazon EventBridge |
요약
Amazon Machine Images(AMIs)는 Amazon Web Services() AWS환경에서 Amazon Elastic Compute Cloud(AmazonEC2) 인스턴스를 생성하는 데 사용됩니다. 이 패턴AMIs의 생성자 AWS 계정이라고 하는 별도의 중앙 집중식 계정에서 를 생성할 수 있습니다. 그런 다음 동일한 AWS 리전에 있는 여러 AWS 계정 AMI 간에 를 공유할 수 있습니다. 이를 이 패턴의 소비자 계정이라고 합니다. 단일 계정AMIs에서 를 관리하면 확장성을 제공하고 거버넌스를 간소화할 수 있습니다. 소비자 계정에서 Amazon EC2 Auto Scaling 시작 템플릿 및 Amazon Elastic Kubernetes Service(AmazonEKS) 노드 그룹 AMI에서 공유된 를 참조할 수 있습니다.
공유AMI가 더 이상 사용되지 않거나, 등록 취소되거나, 공유되지 않은 경우 소비자 계정AMI의 를 참조하는 AWS 서비스는 이 를 사용하여 새 인스턴스AMI를 시작할 수 없습니다. 동일한 인스턴스의 모든 Auto Scaling 이벤트 또는 재시작이 실패합니다. 이로 인해 프로덕션 환경에서 애플리케이션 가동 중지나 성능 저하와 같은 문제가 발생할 수 있습니다. 여러 AWS 계정에서 AMI 공유 및 사용 이벤트가 발생하는 경우 이 활동을 모니터링하기 어려울 수 있습니다.
이 패턴은 동일한 리전의 계정 간에 공유 AMI 사용량 및 상태를 모니터링하는 데 도움이 됩니다. Amazon , Amazon DynamoDB EventBridge, AWS Lambda 및 Amazon Simple Email Service(Amazon )와 같은 서버리스 AWS 서비스를 사용합니다SES. HashiCorp Terraform을 사용하여 인프라를 코드(IaC )로 프로비저닝합니다. 이 솔루션은 소비자 계정의 서비스가 등록 취소되거나 공유되지 않은 를 참조할 때 알림을 제공합니다AMI.
사전 조건 및 제한 사항
사전 조건
제한 사항
이 패턴은 계정 ID를 사용하여 특정 계정과 공유된 AMIs 를 모니터링합니다. 이 패턴은 조직 ID를 사용하여 조직에 공유된 AMIs 를 모니터링하지 않습니다.
AMIs 는 동일한 AWS 리전 내에 있는 계정에만 공유할 수 있습니다. 이 패턴은 단일 대상 리전 AMIs 내에서 모니터링합니다. 여러 리전AMIs에서 의 사용을 모니터링하려면 각 리전에 이 솔루션을 배포합니다.
이 패턴은 이 솔루션이 배포되기 전에 공유된 AMIs를 모니터링하지 않습니다. 이전에 공유된 를 모니터링하려면 를 공유 해제AMI한 다음 소비자 계정과 다시 공유할 AMIs수 있습니다.
제품 버전
Terraform 버전 1.2.0 이상
Terraform AWS Provider 버전 4.20 이상
아키텍처
대상 기술 스택
Terraform을 통해 IaC로 프로비저닝되는 리소스는 다음과 같습니다.
Amazon DynamoDB 테이블
Amazon EventBridge 규칙
AWS 자격 증명 및 액세스 관리(IAM) 역할
AWS Lambda 함수
Amazon SES
대상 아키텍처
이 다이어그램은 다음 워크플로를 보여줍니다.
생성자 계정AMI의 는 동일한 AWS 리전의 소비자 계정과 공유됩니다.
이 공유되면 생성자 계정의 Amazon EventBridge 규칙AMI이
ModifyImageAttribute
이벤트를 캡처하고 생성자 계정에서 Lambda 함수를 시작합니다.Lambda 함수는 생성자 계정AMI의 DynamoDB 테이블에 와 관련된 데이터를 저장합니다.
소비자 계정의 AWS 서비스가 공유 를 사용하여 Amazon EC2 인스턴스를 AMI 시작하거나 공유가 시작 템플릿과 연결된 경우 소비자 계정의 EventBridge 규칙AMI은 공유 의 사용을 캡처합니다AMI.
EventBridge 규칙은 소비자 계정에서 Lambda 함수를 시작합니다. Lambda 함수는 다음 작업을 수행합니다.
Lambda 함수는 소비자 계정의 DynamoDB 테이블에서 AMI관련 데이터를 업데이트합니다.
Lambda 함수는 생성자 계정의 IAM 역할을 맡아 생성자 계정의 DynamoDB 테이블을 업데이트합니다.
Mapping
테이블에서 인스턴스 ID 또는 시작 템플릿 ID를 해당 AMI ID에 매핑하는 항목을 생성합니다.
생성자 계정에서 중앙에서 관리AMI되는 는 더 이상 사용되지 않거나 등록되지 않거나 공유되지 않습니다.
생성자 계정의 EventBridge 규칙은
remove
작업으로ModifyImageAttribute
또는DeregisterImage
이벤트를 캡처하고 Lambda 함수를 시작합니다.Lambda 함수는 DynamoDB 테이블을 확인하여 AMI가 소비자 계정에서 사용되는지 확인합니다. AMI
Mapping
테이블에 와 IDs 연결된 인스턴스 IDs 또는 시작 템플릿이 없는 경우 프로세스가 완료됩니다.인스턴스 IDs 또는 시작 템플릿IDs이
Mapping
테이블AMI의 와 연결된 경우 Lambda 함수는 AmazonSES을 사용하여 구성된 구독자에게 이메일 알림을 보냅니다.
도구
AWS 서비스
Amazon DynamoDB는 빠르고 예측 가능하며 확장 가능한 성능을 제공하는 완전 관리형 데이터베이스 없음SQL 서비스입니다.
Amazon EventBridge은 애플리케이션을 다양한 소스의 실시간 데이터와 연결하는 데 도움이 되는 서버리스 이벤트 버스 서비스입니다. 예를 들어 AWS Lambda 함수, API 대상HTTP을 사용하는 호출 엔드포인트 또는 다른 AWS 계정의 이벤트 버스 등이 있습니다.
AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
Amazon Simple Email Service(Amazon SES)를 사용하면 자체 이메일 주소와 도메인을 사용하여 이메일을 보내고 받을 수 있습니다.
기타 도구
HashiCorp Terraform
은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 오픈 소스 인프라(IaC) 도구입니다. Python
은 범용 컴퓨터 프로그래밍 언어입니다.
코드 리포지토리
이 패턴의 코드는 GitHub cross-account-ami-monitoring-terraform-samples
모범 사례
AWS Lambda 함수 작업 모범 사례 를 따릅니다.
빌드 모범 사례를 AMIs따릅니다.
IAM 역할을 생성할 때 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여합니다. 자세한 내용은 IAM 설명서의 최소 권한 부여 및 보안 모범 사례를 참조하세요.
AWS Lambda 함수에 대한 모니터링 및 알림을 설정합니다. 자세한 내용은 Lambda 함수 모니터링 및 문제 해결을 참조하세요.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
이름이 AWS CLI 지정된 프로파일을 생성합니다. | 생성자 계정과 각 소비자 계정에 대해 이름이 프로파일인 AWS 명령줄 인터페이스(AWS CLI)를 생성합니다. 지침은 AWS 시작하기 리소스 센터AWS의 설정을 CLI | DevOps 엔지니어 |
리포지토리를 복제합니다. | 다음 명령을 입력합니다. 이렇게 하면 를 사용하여 의 cross-account-ami-monitoring-terraform-samples
| DevOps 엔지니어 |
provider.tf 파일을 업데이트합니다. |
공급자 구성에 대한 자세한 내용은 Terraform 설명서의 다중 공급자 구성 | DevOps 엔지니어 |
terraform.tfvars 파일을 업데이트합니다. |
| DevOps 엔지니어 |
main.tf 파일을 업데이트합니다. | 이 솔루션을 두 개 이상의 소비자 계정에 배포하는 경우에만 이 단계를 완료하세요. 이 솔루션을 한 소비자 계정에만 배포하는 경우 이 파일을 수정할 필요가 없습니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
솔루션을 배포합니다. | Terraform 에 다음 명령을 CLI입력하여 생성자 및 소비자 계정에 AWS 리소스를 배포합니다.
| DevOps 엔지니어 |
이메일 주소 ID를 확인합니다. | Terraform 계획을 배포했을 때 Terraform은 Amazon 의 각 소비자 계정에 대한 이메일 주소 자격 증명을 생성했습니다SES. 해당 이메일 주소로 알림을 보내려면 먼저 이메일 주소를 확인해야 합니다. 지침은 Amazon SES 설명서의 이메일 주소 자격 증명 확인을 참조하세요. | 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
생성자 계정에서 배포를 검증하세요. |
| DevOps 엔지니어 |
소비자 계정에서 배포를 검증하세요. |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
생성자 계정AMI에서 를 생성합니다. |
| DevOps 엔지니어 |
소비자 계정AMI에서 를 사용합니다. | 소비자 계정에서 공유 를 사용하여 EC2 인스턴스를 AMI 생성하거나 템플릿을 시작합니다. 지침은 사용자 지정( re:Post Knowledge Center)에서 EC2 인스턴스를 시작하는 방법 AMI | DevOps 엔지니어 |
모니터링 및 경고를 검증합니다. |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
리소스를 삭제합니다. |
| DevOps 엔지니어 |
문제 해결
문제 | Solution |
---|---|
이메일 알림을 받지 못했습니다. | Amazon SES 이메일이 전송되지 않은 여러 가지 이유가 있을 수 있습니다. 다음을 확인하세요.
|
관련 리소스
AWS 설명서
Python을 사용한 Lambda 함수 구축(Lambda 설명서)
(Amazon EC2 설명서) 생성 AMI
특정 AWS 계정AMI과 공유(Amazon EC2 설명서)
(Amazon EC2 설명서) 등록 취소 AMI
Terraform 설명서