기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
구성 요소 CloudFormation IAC 파일 매개 변수 세부 정보 및 예
구성요소 코드형 인프라(IaC) 파일에서 파라미터를 정의하고 참조할 수 있습니다. 파라미터, 파라미터 유형, AWS Proton 파라미터 네임스페이스, IaC 파일의 파라미터 사용 방법에 대한 자세한 설명은 을 참조하십시오. AWS Proton 파라미터 구성 요소에 대한 자세한 내용은 AWS Proton 구성 요소를 참조하세요.
구성 요소 출력 파라미터를 정의합니다.
구성 요소 IaC 파일에서 출력 파라미터를 정의할 수 있습니다. 다른 리소스의 서비스 IaC 파일에서 이러한 출력을 참조할 수 있습니다.
참고
구성 요소 IaC 파일의 입력은 정의할 수 없습니다. 연결된 구성 요소는 연결된 서비스 인스턴스에서 입력을 가져올 수 있습니다. 분리된 구성 요소에는 입력이 없습니다.
구성 요소 IaC 파일에서 파라미터 값 읽기
구성 요소와 관련된 파라미터 및 구성 요소 IaC 파일에서 다른 리소스를 읽을 수 있습니다. 파라미터 네임스페이스에서 파라미터 이름을 참조하여 파라미터 값을 읽습니다. AWS Proton
-
입력 파라미터 -
service_instance.inputs.
를 참조하여 첨부된 서비스 인스턴스 입력 값을 읽습니다.input-name
-
리소스 파라미터 -
component.name
,,,service.name
등의 이름을 참조하여 AWS Proton 리소스 파라미터를 읽습니다.service_instance.name
environment.name
-
출력 파라미터 -
environment.outputs.
참조를 통해 환경 출력을 읽습니다.output-name
파라미터가 포함된 구성 요소 및 서비스 IaC 파일 예시
다음 예에서는 Amazon Simple Storage Service(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 렌더링하고 모든 매개변수를 실제 값으로 바꾸는 경우 템플릿은 다음 파일과 같을 수 있습니다.
예 서비스 인스턴스가 IaC 파일을 CloudFormation 렌더링했습니다.
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:
# ...