CloudFormation IaC 파일용 파라미터 필터 - AWS Proton

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CloudFormation IaC 파일용 파라미터 필터

AWS CloudFormation IaC 파일의 AWS Proton 매개변수를 참조할 때 필터라는 Jinja 수정자를 사용하여 렌더링된 템플릿에 삽입되기 전에 매개변수 값을 검증, 필터링 및 형식 지정할 수 있습니다. 구성 요소 생성 및 첨부는 개발자가 수행하므로 서비스 인스턴스 템플릿에서 구성 요소 출력을 사용하는 관리자는 구성 요소 출력 파라미터의 존재 여부와 유효성을 확인하고자 할 수 있으므로 필터 검증은 구성 요소 출력 파라미터를 참조할 때 특히 유용합니다. 하지만 Jinja IaC 파일에서는 필터를 사용할 수 있습니다.

다음 섹션에서는 사용 가능한 매개 변수 필터를 설명 및 정의하고 예제를 제공합니다. AWS Proton 이러한 필터의 대부분을 정의합니다. default은 Jinja 내장 필터입니다.

Amazon ECS 작업의 환경 속성 형식 지정

선언

dict → proton_cfn_ecs_task_definition_formatted_env_vars (raw: boolean = True) → YAML list of dicts

설명

이 필터는 Amazon Elastic Container Service(Amazon ECS) 태스크 정의 ContainerDefinition섹션의 환경 속성에 사용될 출력 목록의 형식을 지정합니다.

rawFalse로 설정하여 파라미터 값의 유효성도 확인합니다. 이 경우 값은 정규 표현식 ^[a-zA-Z0-9_-]*$과 일치해야 합니다. 값이 이 검증에 실패하면 템플릿 렌더링이 실패합니다.

다음과 같은 사용자 지정 구성 요소 템플릿 사용:

Resources: # ... Outputs: Output1: Description: "Example component output 1" Value: hello Output2: Description: "Example component output 2" Value: world

그리고 다음 서비스 템플릿:

Resources: TaskDefinition: Type: AWS::ECS::TaskDefinition Properties: # ... ContainerDefinitions: - Name: MyServiceName # ... Environment: {{ service_instance.components.default.outputs | proton_cfn_ecs_task_definition_formatted_env_vars }}

렌더링된 서비스 템플릿은 다음과 같습니다.

Resources: TaskDefinition: Type: AWS::ECS::TaskDefinition Properties: # ... ContainerDefinitions: - Name: MyServiceName # ... Environment: - Name: Output1 Value: hello - Name: Output2 Value: world

Lambda 함수의 환경 속성 형식 지정

선언

dict → proton_cfn_lambda_function_formatted_env_vars (raw: boolean = True) → YAML dict

설명

이 필터는 AWS Lambda 함수 정의 Properties 섹션의 Environment 속성에 사용할 출력 목록의 형식을 지정합니다.

rawFalse로 설정하여 파라미터 값의 유효성도 확인합니다. 이 경우 값은 정규 표현식 ^[a-zA-Z0-9_-]*$과 일치해야 합니다. 값이 이 검증에 실패하면 템플릿 렌더링이 실패합니다.

다음과 같은 사용자 지정 구성 요소 템플릿 사용:

Resources: # ... Outputs: Output1: Description: "Example component output 1" Value: hello Output2: Description: "Example component output 2" Value: world

그리고 다음 서비스 템플릿:

Resources: Lambda: Type: AWS::Lambda::Function Properties: Environment: Variables: {{ service_instance.components.default.outputs | proton_cfn_lambda_function_formatted_env_vars }}

렌더링된 서비스 템플릿은 다음과 같습니다.

Resources: Lambda: Type: AWS::Lambda::Function Properties: Environment: Variables: Output1: hello Output2: world

IAM 정책 ARN을 추출하여 IAM 역할에 포함시킵니다.

선언

dict → proton_cfn_iam_policy_arns → YAML list

설명

이 필터는 AWS Identity and Access Management (IAM) 역할 정의 Properties 섹션의 ManagedPolicyArns 속성에 사용할 출력 목록의 형식을 지정합니다. 필터는 정규 표현식 ^arn:[a-zA-Z-]+:iam::\d{12}:policy/을 사용하여 출력 파라미터 목록에서 유효한 IAM 정책 ARN을 추출합니다. 이 필터를 사용하여 출력 파라미터 값의 정책을 서비스 템플릿의 IAM 역할 정의에 추가할 수 있습니다.

다음과 같은 사용자 지정 구성 요소 템플릿 사용:

Resources: # ... ExamplePolicy1: Type: AWS::IAM::ManagedPolicy Properties: # ... ExamplePolicy2: Type: AWS::IAM::ManagedPolicy Properties: # ... # ... Outputs: Output1: Description: "Example component output 1" Value: hello Output2: Description: "Example component output 2" Value: world PolicyArn1: Description: "ARN of policy 1" Value: !Ref ExamplePolicy1 PolicyArn2: Description: "ARN of policy 2" Value: !Ref ExamplePolicy2

그리고 다음 서비스 템플릿:

Resources: # ... 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: # ...

렌더링된 서비스 템플릿은 다음과 같습니다.

Resources: # ... TaskRole: Type: AWS::IAM::Role Properties: # ... ManagedPolicyArns: - !Ref BaseTaskRoleManagedPolicy - arn:aws:iam::123456789012:policy/cfn-generated-policy-name-1 - arn:aws:iam::123456789012:policy/cfn-generated-policy-name-2 # Basic permissions for the task BaseTaskRoleManagedPolicy: Type: AWS::IAM::ManagedPolicy Properties: # ...

속성 값 삭제

선언

string → proton_cfn_sanitize → string

설명

범용 필터입니다. 이를 사용하여 파라미터 값의 안전성을 검증할 수 있습니다. 필터는 값이 정규 표현식 ^[a-zA-Z0-9_-]*$과 일치하는지 또는 유효한 Amazon 리소스 이름(ARN) 인지 확인합니다. 값이 이 검증에 실패하면 템플릿 렌더링이 실패합니다.

다음과 같은 사용자 지정 구성 요소 템플릿 사용:

Resources: # ... Outputs: Output1: Description: "Example of valid output" Value: "This-is_valid_37" Output2: Description: "Example incorrect output" Value: "this::is::incorrect" SomeArn: Description: "Example ARN" Value: arn:aws:some-service::123456789012:some-resource/resource-name
  • 서비스 템플릿의 다음 참조:

    # ... {{ service_instance.components.default.outputs.Output1 | proton_cfn_sanitize }}

    다음과 같이 렌더링됩니다.

    # ... This-is_valid_37
  • 서비스 템플릿의 다음 참조:

    # ... {{ service_instance.components.default.outputs.Output2 | proton_cfn_sanitize }}

    다음과 같은 렌더링 오류가 발생한 결과:

    Illegal character(s) detected in "this::is::incorrect". Must match regex ^[a-zA-Z0-9_-]*$ or be a valid ARN
  • 서비스 템플릿의 다음 참조:

    # ... {{ service_instance.components.default.outputs.SomeArn | proton_cfn_sanitize }}

    다음과 같이 렌더링됩니다.

    # ... arn:aws:some-service::123456789012:some-resource/resource-name

존재하지 않는 참조에 대한 기본값 제공

설명

default 필터는 네임스페이스 참조가 없는 경우 기본값을 제공합니다. 이를 사용하여 참조하는 파라미터가 누락된 경우에도 오류 없이 렌더링할 수 있는 강력한 템플릿을 작성할 수 있습니다.

서비스 템플릿의 다음 참조를 사용하면 서비스 인스턴스에 직접 정의된 (기본) 구성 요소가 첨부되어 있지 않거나 연결된 구성 요소에 이름이 지정된 test 출력이 없는 경우 템플릿 렌더링이 실패합니다.

# ... {{ service_instance.components.default.outputs.test }}

이 문제를 방지하려면 default 필터를 추가합니다.

# ... {{ service_instance.components.default.outputs.test | default("[optional-value]") }}