기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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
섹션의 환경 속성에 사용될 출력 목록의 형식을 지정합니다.
raw
을 False
로 설정하여 파라미터 값의 유효성도 확인합니다. 이 경우 값은 정규 표현식 ^[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 속성에 사용할 출력 목록의 형식을 지정합니다.
raw
을 False
로 설정하여 파라미터 값의 유효성도 확인합니다. 이 경우 값은 정규 표현식 ^[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]
") }}