기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Terraform IaC 파일
에서 코드형 Terraform 인프라 (IaC) 를 사용하는 방법을 알아보십시오. AWS ProtonTerraform은
AWS Proton Terraform IaC를 위한 자체 관리형 프로비저닝을 지원합니다.
Terraform IAC 템플릿 번들 파일에서 자체 관리형 프로비저닝이 작동하는 방식:
-
Terraform 템플릿 번들로 환경을 만들 때 콘솔 또는 입력 매개 변수를 사용하여 파일을 컴파일합니다. AWS Proton
.tf
spec file
-
컴파일된 IaC 파일을 AWS Proton에 등록한 리포지토리에 병합하기 위해 풀 리퀘스트를 생성합니다.
-
요청이 승인되면 사용자가 제공한 프로비저닝 AWS Proton 상태를 기다립니다.
-
요청이 거부되면 환경 생성이 취소됩니다.
-
풀 리퀘스트 제한 시간이 초과되면 환경 생성이 완료되지 않습니다.
AWS Proton Terraform IaC 고려 사항 포함:
-
AWS Proton 테라폼 프로비저닝을 관리하지 않습니다.
-
에 프로비저닝 리포지토리를 등록해야 합니다. AWS Proton AWS Proton 이 리포지토리에서 풀 리퀘스트를 합니다.
-
프로비저닝 리포지토리에 AWS Proton 연결하려면 CodeStar 연결을 만들어야 합니다.
-
AWS Proton 컴파일된 IaC 파일에서 프로비전하려면 AWS Proton pull 요청에 응답해야 합니다. AWS Proton 환경 및 서비스 생성 및 업데이트 작업 후 pull 요청을 생성합니다. 자세한 내용은 AWS Proton 환경 및 AWS Proton 서비스 섹션을 참조하세요.
-
AWS Proton 컴파일된 IaC 파일에서 파이프라인을 프로비전하려면 CI/CD 파이프라인 리포지토리를 만들어야 합니다.
-
풀 리퀘스트 기반 프로비저닝 자동화에는 프로비저닝된 리소스 상태 변경을 알리는 AWS Proton 단계가 포함되어야 합니다. AWS Proton API를 사용할 수 있습니다. AWS Proton NotifyResourceDeploymentStatusChange
-
IaC 파일에서 만든 서비스, 파이프라인 및 구성 요소를 Terraform CloudFormation IaC 파일로 만든 환경에 배포할 수 없습니다.
-
Terraform IaC 파일에서 만든 서비스, 파이프라인 및 구성 요소를 IaC 파일로 만든 환경에 배포할 수 없습니다. CloudFormation
Terraform IaC 파일을 AWS Proton준비할 때는 다음 예와 같이 입력 변수에 네임스페이스를 연결합니다. 자세한 내용은 파라미터를 참조하세요.
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } // This tells terraform to store the state file in s3 at the location // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate backend "s3" { bucket = "terraform-state-bucket" key = "tf-os-sample/terraform.tfstate" region = "us-east-1" } } // Configure the AWS Provider provider "aws" { region = "us-east-1" default_tags { tags = var.proton_tags } } resource "aws_ssm_parameter" "my_ssm_parameter" { name = "my_ssm_parameter" type = "String" // Use the Proton environment.inputs. namespace value = var.environment.inputs.ssm_parameter_value }
컴파일된 코드형 인프라
환경 또는 서비스를 생성할 때 인프라를 콘솔 또는 입력이 포함된 코드 파일로 AWS Proton 컴파일합니다. spec file
다음 예시와 같이 입력에 대한 proton.
및 resource-type
.variables.tfproton.auto.tfvars.json
파일을 생성하여 Terraform에서 사용할 수 있습니다. 이러한 파일은 환경 또는 서비스 인스턴스 이름과 일치하는 폴더의 지정된 리포지토리에 있습니다.
이 예제에서는 변수 정의 및 변수 값에 태그를 AWS Proton 포함하는 방법과 이러한 AWS Proton 태그를 프로비저닝된 리소스에 전파하는 방법을 보여줍니다. 자세한 설명은 프로비저닝된 리소스에 태그 전파 섹션을 참조하세요.
dev/environment.tf:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } // This tells terraform to store the state file in s3 at the location // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate backend "s3" { bucket = "terraform-state-bucket" key = "tf-os-sample/terraform.tfstate" region = "us-east-1" } } // Configure the AWS Provider provider "aws" { region = "us-east-1" default_tags { tags = var.proton_tags } } resource "aws_ssm_parameter" "my_ssm_parameter" { name = "my_ssm_parameter" type = "String" // Use the Proton environment.inputs. namespace value = var.environment.inputs.ssm_parameter_value }
dev/proton.environment.variables.tf:
variable "environment" { type = object({ inputs = map(string) name = string }) } variable "proton_tags" { type = map(string) default = null }
dev/proton.auto.tfvars.json:
{
"environment": {
"name": "dev",
"inputs": {
"ssm_parameter_value": "MyNewParamValue"
}
}
"proton_tags" : {
"proton:account" : "123456789012",
"proton:template" : "arn:aws:proton:us-east-1:123456789012:environment-template/fargate-env",
"proton:environment" : "arn:aws:proton:us-east-1:123456789012:environment/dev"
}
}
리포지토리 경로
AWS Proton 환경 또는 서비스 생성 작업의 콘솔 또는 사양 입력을 사용하여 컴파일된 IaC 파일을 찾을 저장소와 경로를 찾습니다. 입력 값은 네임스페이스 입력 파라미터에 전달됩니다.
AWS Proton 두 개의 리포지토리 경로 레이아웃을 지원합니다. 다음 예제에서는 두 환경의 네임스페이스 리소스 파라미터로 경로의 이름을 지정합니다. 각 환경에는 두 서비스의 서비스 인스턴스가 있으며, 이 중 하나의 서비스 인스턴스에는 구성 요소가 직접 정의되어 있습니다.
리소스 유형 | 이름 파라미터 | = | 리소스 이름 |
---|---|---|---|
환경 | environment.name |
= | "env-prod" |
환경 | environment.name |
"env-staged" |
|
Service | service.name |
"service-one" |
|
서비스 인스턴스 | service_instance.name |
"instance-one-prod" |
|
서비스 인스턴스 | service_instance.name |
"instance-one-staged" |
|
Service | service.name |
"service-two" |
|
서비스 인스턴스 | service_instance.name |
"instance-two-prod" |
|
구성 요소 | service_instance.components.default.name |
"component-prod" |
|
서비스 인스턴스 | service_instance.name |
"instance-two-staged" |
|
구성 요소 | service_instance.components.default.name |
"component-staged" |