기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
컴포넌트 CloudFormation IaC 파일 파라미터 세부 정보 및 예제
구성 요소 인프라의 매개 변수를 코드 (IaC) 파일로 정의하고 참조할 수 있습니다. AWS Proton매개 변수, 매개 변수 유형, 매개 변수 네임스페이스 및 IaC 파일에서 매개 변수를 사용하는 방법에 대한 자세한 설명은 을 참조하십시오AWS Proton parameters. 구성 요소에 대한 자세한 내용은 단원을 참조하세요AWS Proton 구성 요소.
컴포넌트 출력 파라미터 정의
컴포넌트 IaC 파일에서 출력 파라미터를 정의할 수 있습니다. 그런 다음 서비스 IaC 파일에서 이러한 출력을 참조할 수 있습니다.
참고
구성 요소 IaC 파일의 입력을 정의할 수 없습니다. 연결된 구성 요소는 연결된 서비스 인스턴스에서 입력을 받을 수 있습니다. 분리된 구성 요소에는 입력이 없습니다.
컴포넌트 IaC 파일의 파라미터 값 읽기
구성 요소 IaC 파일의 구성 요소 및 기타 리소스와 관련된 매개 변수를 읽을 수 있습니다. 매개 변수 네임스페이스에서 매개 변수 이름을 참조하여AWS Proton 매개 변수 값을 읽습니다.
-
입력 매개변수 — 참조를 통해 첨부된 서비스 인스턴스 입력 값을
service_instance.inputs.
읽습니다.input-name
-
리소스 매개 변수 —
component.name
,service.name
service_instance.name
, 및 같은 이름을 참조하여AWS Proton 리소스 매개 변수를environment.name
읽습니다. -
출력 매개변수 — 참조를 통해 환경 출력을
environment.outputs.
읽습니다.output-name
매개변수가 있는 예제 구성 요소 및 서비스 IaC 파일
다음 예에서는 Amazon Storage Simple Storage Service (Amazon S3) 버킷과 관련 액세스 정책을 프로비저닝하고 두 리소스의 Amazon 리소스 이름 (ARN) 을 구성 요소 출력으로 노출하는 구성 요소를 보여줍니다. 서비스 IaC 템플릿은 구성 요소 출력을 Amazon Elastic Container Service (Amazon ECS) 작업의 컨테이너 환경 변수로 추가하여 컨테이너에서 실행 중인 코드에서 출력을 사용할 수 있도록 하고 작업의 역할에 버킷 액세스 정책을 추가합니다. 버킷 이름은 환경, 서비스, 서비스 인스턴스 및 구성 요소의 이름을 기반으로 합니다. 즉, 버킷은 특정 서비스 인스턴스를 확장하는 구성 요소 템플릿의 특정 인스턴스와 연결됩니다. 개발자는 이 구성 요소 템플릿을 기반으로 여러 사용자 지정 구성 요소를 생성하여 다양한 서비스 인스턴스 및 기능적 요구 사항에 맞게 Amazon S3 버킷을 프로비저닝할 수 있습니다.
이 예제는 Jinja{{ ... }}
구문을 사용하여 서비스 IaC 파일의 구성 요소 및 기타 리소스 매개 변수를 참조하는 방법을 보여줍니다. 구성 요소가 서비스 인스턴스에 연결된 경우에만 명령문을 사용하여{% if ... %}
명령문 블록을 추가할 수 있습니다. proton_cfn_*
키워드는 출력 매개변수 값을 삭제하고 형식을 지정하는 데 사용할 수 있는 필터입니다. 필터에 대한 자세한 내용은 CloudFormation IaC 파일용 파라미터 필터 단원을 참조하십시오.
관리자는 서비스 IaC 템플릿 파일을 작성합니다.
예 컴포넌트를 사용한 서비스 CloudFormation IaC 파일
# service/instance_infrastructure/cloudformation.yaml
Resources:
TaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
TaskRoleArn: !Ref TaskRole
ContainerDefinitions:
- Name: '{{service_instance.name}}'
# ...
{% if service_instance.components.default.outputs | length > 0 %}
Environment:
{{ service_instance.components.default.outputs |
proton_cfn_ecs_task_definition_formatted_env_vars }}
{% endif %}
# ...
TaskRole:
Type: AWS::IAM::Role
Properties:
# ...
ManagedPolicyArns:
- !Ref BaseTaskRoleManagedPolicy
{{ service_instance.components.default.outputs
| proton_cfn_iam_policy_arns }}
# Basic permissions for the task
BaseTaskRoleManagedPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
# ...
개발자는 구성 요소 IaC 템플릿 파일을 작성합니다.
예 컴포넌트 CloudFormation IaC 파일
# cloudformation.yaml
# A component that defines an S3 bucket and a policy for accessing the bucket.
Resources:
S3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName: '{{environment.name}}-{{service.name}}-{{service_instance.name}}-{{component.name}}'
S3BucketAccessPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- 's3:Get*'
- 's3:List*'
- 's3:PutObject'
Resource: !GetAtt S3Bucket.Arn
Outputs:
BucketName:
Description: "Bucket to access"
Value: !GetAtt S3Bucket.Arn
BucketAccessPolicyArn:
Value: !Ref S3BucketAccessPolicy
서비스 인스턴스의AWS CloudFormation 템플릿을AWS Proton 렌더링하고 모든 파라미터를 실제 값으로 바꿀 때 템플릿은 다음 파일과 같을 수 있습니다.
예 서비스 인스턴스 CloudFormation 렌더링 IaC 파일
Resources:
TaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
TaskRoleArn: !Ref TaskRole
ContainerDefinitions:
- Name: '{{service_instance.name}}'
# ...
Environment:
- Name: BucketName
Value: arn:aws:s3:us-east-1:123456789012:environment_name
-service_name
-service_instance_name
-component_name
- Name: BucketAccessPolicyArn
Value: arn:aws:iam::123456789012:policy/cfn-generated-policy-name
# ...
TaskRole:
Type: AWS::IAM::Role
Properties:
# ...
ManagedPolicyArns:
- !Ref BaseTaskRoleManagedPolicy
- arn:aws:iam::123456789012:policy/cfn-generated-policy-name
# Basic permissions for the task
BaseTaskRoleManagedPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
# ...