기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
코드 리포지토리를 사용하여 AWS Service Catalog에서 Terraform 제품을 프로비저닝합니다.
작성자: Dr. Rahul Sharad Gaikwad(AWS) 및 Tamilselvan P(AWS)
환경: PoC 또는 파일럿 | 기술: 인프라, DevOps | 워크로드: 기타 모든 워크로드 |
AWS 서비스: AWS 서비스 카탈로그, 아마존 EC2 |
요약
AWS Service Catalog는 HashiCorp Terraform
이 패턴은 Terraform 코드를 사용하여 AWS 리소스를 배포하는 데 도움이 됩니다. GitHub 리포지토리의 Terraform 코드는 Service Catalog를 통해 액세스할 수 있습니다. 이 접근 방식을 사용하면 제품을 기존 Terraform 워크플로와 통합할 수 있습니다. 관리자는 Terraform을 사용하여 Service Catalog 포트폴리오를 생성하고 AWS Launch Wizard 제품을 포트폴리오에 추가할 수 있습니다.
이 솔루션의 이점은 다음과 같습니다.
Service Catalog의 롤백 기능으로 인해 배포 중에 문제가 발생하는 경우 제품을 이전 버전으로 되돌릴 수 있습니다.
제품 버전 간의 차이점을 쉽게 식별할 수 있습니다. 이렇게 하면 배포 중에 문제를 해결하는 데 도움이 됩니다.
서비스 카탈로그에서 GitHub GitLab, 또는 CodeCommit AWS와 같은 리포지토리 연결을 구성할 수 있습니다. 리포지토리를 통해 직접 제품을 변경할 수 있습니다.
AWS Service Catalog의 전반적인 이점에 대한 자세한 내용은 서비스 카탈로그란 무엇입니까? 를 참조하십시오.
사전 조건 및 제한 사항
사전 조건
활성 상태의 계정
A GitHub BitBucket, 또는 ZIP 형식의 Terraform 구성 파일이 들어 있는 기타 리포지토리.
Python 버전 3.9가 설치되었습니다
. AWS SAM CLI에는 이 버전의 Python이 필요합니다. AWS Lambda 함수를 작성하고 실행할 수 있는 권한과 Service Catalog 제품 및 포트폴리오를 액세스하고 관리할 수 있는 권한.
아키텍처
대상 기술 스택
AWS Service Catalog
Lambda
대상 아키텍처
![코드 리포지토리에서 Service Catalog의 Terraform 제품을 프로비저닝하는 아키텍처 다이어그램](images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)
이 다이어그램은 다음 워크플로를 보여줍니다.
Terraform 구성이 준비되면 개발자는 모든 테라폼 코드가 포함된.zip 파일을 만듭니다. 개발자는.zip 파일을 Service Catalog에 연결된 코드 저장소에 업로드합니다.
관리자가 Terraform 제품을 Service Catalog의 포트폴리오에 연결합니다. 또한 관리자는 최종 사용자가 제품을 프로비저닝할 수 있도록 하는 시작 제약 조건을 생성합니다.
Service Catalog에서 최종 사용자는 Terraform 구성을 사용하여 AWS 리소스를 시작합니다. 배포할 제품 버전을 선택할 수 있습니다.
도구
AWS 서비스 및 도구
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
AWS Service Catalog를 사용하면 AWS에 승인된 IT 서비스의 카탈로그를 중앙에서 관리할 수 있습니다. 최종 사용자는 조직에서 규정한 제약에 따라, 필요에 따라 승인된 IT 서비스만 신속하게 배포할 수 있습니다.
기타 서비스
코드 리포지토리
Service Catalog를 통해 배포할 수 있는 샘플 Terraform 구성이 필요한 경우 Terraform을 사용한 Amazon GitHub Macie 조직 설정
모범 사례
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
(선택 사항) Docker를 설치합니다. | 개발 환경에서 AWS Lambda 함수를 실행하려면 Docker를 설치하십시오. 자세한 내용은 도커 설명서의 도커 엔진 설치 | DevOps 엔지니어 |
테라폼용 AWS Service Catalog 엔진을 설치합니다. |
| DevOps 엔지니어, AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
GitHub 리포지토리에 대한 연결을 생성합니다. |
| 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Service Catalog 제품을 생성합니다. |
| 관리자 |
포트폴리오를 생성합니다. |
| 관리자 |
Terraform 제품을 포트폴리오에 추가합니다. |
| 관리자 |
액세스 정책을 생성합니다. |
| 관리자 |
사용자 지정 신뢰 정책을 생성합니다. |
| 관리자 |
Service Catalog 제품에 시작 제약 조건을 추가합니다. |
| 관리자 |
제품에 대한 액세스 권한을 부여합니다. |
| 관리자 |
제품을 실행합니다. |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
배포를 검증합니다. | Service Catalog 프로비저닝 워크플로를 위한 AWS Step Functions 상태 머신은 두 개 있습니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
프로비저닝된 제품을 삭제합니다. |
| DevOps 엔지니어 |
테라폼용 AWS Service Catalog 엔진을 제거합니다. |
| 관리자 |
관련 리소스
설명서
Terraform 설명서
추가 정보
액세스 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }
신뢰 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }