AWS CloudFormation 매크로를 사용하여 템플릿에 사용자 지정 처리 수행 - AWS CloudFormation

AWS CloudFormation 매크로를 사용하여 템플릿에 사용자 지정 처리 수행

매크로를 통해 찾기 및 바꾸기 작업 같은 간단한 작업부터 전체 템플릿 변형과 같은 작업까지 템플릿에 대한 사용자 지정 처리를 수행할 수 있습니다.

가능성의 폭에 대한 아이디어를 얻으려면 AWS::IncludeAWS::Serverless 변형을 고려하십시오. AWS CloudFormation에 의해 호스팅되는 매크로입니다.

  • AWS::Include 변환 사용을 통해 보일러플레이트 템플릿 코드 조각을 템플릿에 삽입할 수 있습니다.

  • AWS::Serverless 변환에서는 AWS Serverless Application Model(AWS SAM) 구문에서 작성된 전체 템플릿을 가져온 다음 이를 변형 후 규정 준수 AWS CloudFormation 템플릿으로 확장합니다. (서버리스 애플리케이션 및 AWS SAM에 대한 자세한 내용을 알아보려면 AWS Lambda 개발자 안내서 Lambda 기반 애플리케이션 배포를 참조하세요.)

AWS CloudFormation 매크로의 작동 방식

매크로를 사용한 템플릿 처리에 대한 두 가지 주요 단계가 있습니다. 매크로 자체의 생성과 매크로 사용을 통한 템플릿의 처리 수행입니다.

매크로 정의를 생성하려면 다음을 생성해야 합니다.

  • 템플릿 처리를 수행하는 AWS Lambda 함수. 이 Lambda 함수는 코드 조각 또는 전체 템플릿 및 정의하는 추가 파라미터를 수락합니다. 응답으로 처리된 템플릿 코드 조각 또는 전체 템플릿을 반환합니다.

  • AWS::CloudFormation::Macro 유형의 리소스로, 이를 통해 사용자는 AWS CloudFormation 템플릿 내부에서 Lambda 함수를 호출할 수 있습니다. 이 리소스는 Lambda 함수의 ARN을 지정하여 이 매크로를 호출하고, 추가 선택적 속성을 지정하여 디버깅을 지원합니다. 계정 내에서 이 리소스를 생성하려면 AWS::CloudFormation::Macro 리소스를 포함시키는 템플릿을 작성한 다음 템플릿에서 자체 관리 권한이 있는 스택 또는 스택 세트를 생성합니다. AWS CloudFormation StackSets는 현재 매크로를 참조하는 템플릿에서 서비스 관리형 권한으로 스택 세트를 생성하거나 업데이트하는 것을 지원하지 않습니다.

매크로를 사용하려면 템플릿에서 매크로를 참조합니다.

  • 템플릿의 섹션 또는 코드 조각을 처리하려면 변환하려는 템플릿과 관련된 위치에 있는 Fn::Transform 함수의 매크로를 참조합니다. Fn::Transform 사용 시 필요한 지정된 파라미터를 전달할 수 있습니다.

  • 전체 템플릿을 처리하려면 템플릿의 변환 섹션에 있는 매크로를 참조합니다.

그런 다음 변경 세트를 생성하고 실행하십시오. (매크로 처리 시 알지 못할 수도 있는 여러 리소스가 추가될 수 있습니다. 매크로가 수행하는 모든 변경을 인식하려면 변경 세트를 사용합니다.) AWS CloudFormation은 추가로 지정된 파라미터와 함께 지정된 템플릿 콘텐츠를 매크로 리소스에 지정된 Lambda 함수로 전달합니다. Lambda 함수는 처리된 템플릿 콘텐츠를 반환하며, 이는 코드 조각 또는 전체 템플릿입니다.

템플릿의 모든 매크로가 호출된 이후 AWS CloudFormation에서 처리된 템플릿 콘텐츠를 포함시키는 변경 세트를 생성합니다. 변경 세트를 검토한 후 실행하여 해당 변경 내용을 적용합니다.

중요

스택 세트 템플릿에서 하나 이상의 매크로를 참조하는 경우 먼저 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택 세트를 생성해야 합니다. 스택 세트를 직접 생성하거나 업데이트하려면 CreateStackSet 또는 UpdateStackSet 작업을 사용하고 CAPABILITY_AUTO_EXPAND 기능을 지정해야 합니다. 매크로를 직접 참조하는 템플릿에서 스택 세트를 생성 또는 업데이트하기 전에 매크로가 수행하는 처리 작업을 알고 있어야 합니다.

Fn::Transform 내장 함수 또는 템플릿의 Transform 섹션을 사용하여 템플릿 콘텐츠 및 관련 파라미터를 매크로의 기본 Lambda 함수를 전달합니다. 여기서 처리된 템플릿 콘텐츠가 반환됩니다.
참고

변경 세트에 제시된 변경을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택을 생성하거나 업데이트하는 것이 편할 경우 CreateStack 또는 UpdateStack 요청 중 CAPABILITY_AUTO_EXPAND 기능을 지정하여 그렇게 할 수 있습니다. 매크로가 수행하는 처리를 알고 있을 경우에만 매크로를 참조하는 템플릿에서 직접 스택을 생성해야 합니다.

자세한 내용을 알아보려면 AWS CloudFormation API 참조CreateStack 또는 UpdateStack을 참조하세요.

AWS CloudFormation 매크로 정의 생성

매크로 정의를 생성할 때 매크로 정의에서 지정된 계정의 기본 Lambda 함수를 사용할 수 있도록 하여 AWS CloudFormation에서 이를 호출하고 템플릿을 처리할 수 있습니다.

AWS CloudFormation 매크로 함수 인터페이스

매크로의 경우 AWS CloudFormation에서 다음 이벤트 매핑과 함께 기본 Lambda 함수를 호출합니다. AWS CloudFormation에서 JSON 형식으로 요청을 전송하고, 함수 응답 또한 JSON 형식일 것으로 예측합니다.

{ "region" : "us-east-1", "accountId" : "$ACCOUNT_ID", "fragment" : { ... }, "transformId" : "$TRANSFORM_ID", "params" : { ... }, "requestId" : "$REQUEST_ID", "templateParameterValues" : { ... } }
  • region

    매크로가 상주하는 리전입니다.

  • accountId

    매크로가 Lambda 함수를 호출하는 계정의 계정 ID입니다.

  • fragment

    사용자 지정 처리 사용이 가능한 템플릿 콘텐츠로 JSON 형식입니다.

    • Transform 템플릿 섹션에 포함된 매크로의 경우 Transform 섹션을 제외한 전체 템플릿입니다.

    • Fn::Transform 내장 함수 호출에 포함된 매크로의 경우 템플릿 내에 있는 내장 함수의 위치를 기반으로 한 모든 형제(및 하위) 노드가 포함됩니다. 단, Fn::Transform 함수는 예외입니다. 자세한 내용은 AWS CloudFormation 매크로 범위 단원을 참조하십시오.

  • transformId

    이 함수를 호출하는 매크로의 이름입니다.

  • params

    Fn::Transform 함수 호출의 경우 함수에 대한 지정된 모든 파라미터입니다. AWS CloudFormation에서는 함수로 전달하기 전에 이러한 파라미터를 평가하지 않습니다.

    Transform 템플릿 섹션에 포함된 매크로의 경우 이 섹션은 비어 있습니다.

  • requestId

    이 함수를 호출하는 요청의 ID입니다.

  • templateParameterValues

    템플릿의 파라미터 섹션에 지정된 파라미터입니다. AWS CloudFormation에서는 함수로 전달하기 전에 이러한 파라미터를 평가합니다.

AWS CloudFormation에서는 기본 함수가 다음 JSON 형식의 응답을 반환할 것으로 예측합니다.

{ "requestId" : "$REQUEST_ID", "status" : "$STATUS", "fragment" : { ... } "errorMessage": "optional error message for failures" }
  • requestId

    이 함수를 호출하는 요청의 ID입니다. 함수 호출 시 AWS CloudFormation에서 제공하는 요청 ID와 일치해야 합니다.

  • 상태

    요청의 상태입니다(대/소문자를 구분하지 않음). AWS CloudFormation로 설정되어야 합니다. success에서 다른 모든 응답을 failure로 처리합니다.

  • fragment

    형제를 포함하여 처리된 템플릿에 포함시킬 AWS CloudFormation에 대한 처리된 템플릿 콘텐츠입니다. AWS CloudFormation에서는 Lambda 함수로 전달된 템플릿 콘텐츠를 Lambda 응답에서 수신한 템플릿 조각으로 대체합니다.

    처리된 템플릿 콘텐츠는 유효한 JSON이어야 하고, 처리된 템플릿에 포함된 사항은 유효한 템플릿이 되어야 합니다.

    함수가 AWS CloudFormation에서 전달하는 템플릿 콘텐츠를 실제로 변경하지 않지만 이러한 콘텐츠를 처리된 템플릿에 포함시켜야 하는 경우 함수가 해당 템플릿 콘텐츠를 AWS CloudFormation으로 반환해야 합니다.

  • errorMessage

    변환이 실패한 이유를 설명하는 오류 메시지입니다. CloudFormation은 스택에 대한 Stack details(스택 세부 정보) 페이지의 Events(이벤트) 창에 이 오류 메시지를 표시합니다.

    예를 들어, ‘Error creating change set: Transform account number::macro name failed with: error message string(변경 세트 생성 오류: error message string으로 인해 AWS 계정 account number::macro name 변환 실패)’이 표시됩니다.

매크로 생성 시 고려 사항에 대한 자세한 내용은 AWS CloudFormation 매크로 정의 생성 시 고려 사항 단원을 참조하십시오.

AWS CloudFormation 매크로 계정 범위 및 권한

리소스로 생성된 계정에서만 매크로를 사용할 수 있습니다. 매크로의 이름은 해당 계정 내에서 고유해야 합니다. 하지만 기본 Lambda 함수에서 교차 계정 액세스를 활성화하고 여러 계정에서 해당 함수를 참조하는 매크로 정의를 생성함으로써 여러 계정에서 동일한 기능을 사용할 수 있도록 할 수 있습니다. 아래 예제에서는 3개의 계정에 동일한 Lambda 함수를 가리키는 매크로 정의가 포함되어 있습니다.

Lambda 함수에서 크로스 계정 액세스를 허용함으로써 AWS에서 사용자가 해당 함수를 참조하는 여러 계정에서 매크로를 생성할 수 있도록 합니다.

자세한 내용을 알아보려면 AWS Lambda 개발자 안내서AWS Lambda 리소스에 대한 액세스 권한 관리 개요를 참조하세요.

매크로 정의를 생성하려면 사용자에게 지정된 계정 내에서 스택 또는 스택 세트를 생성할 수 있는 권한이 있어야 합니다.

AWS CloudFormation에서 템플릿에 포함된 매크로를 실행하려면 사용자가 기본 Lambda 함수에 대해 Invoke 권한을 보유해야 합니다. 잠재적인 권한 상승을 방지하도록 AWS CloudFormation에서는 매크로 실행 도중 사용자를 가장합니다. 자세한 내용을 알아보려면 AWS Lambda 개발자 안내서Lambda 권한 모델IAM 사용 설명서AWS Lambda에 사용되는 작업 및 조건 컨텍스트 키를 참조하세요.

AWS::Serverless 변환AWS::Include 변환 변형은 AWS CloudFormation에서 호스팅하는 매크로입니다. 이를 사용하는 데 필요한 특별한 권한은 없으며, AWS CloudFormation의 모든 계정 내에서 사용할 수 있습니다.

AWS CloudFormation 매크로 디버깅

디버깅을 돕기 위해 매크로에 대한 AWS::CloudFormation::Macro 리소스 유형 생성 시 LogGroupNameLogRoleArn 속성을 지정할 수 있습니다. 이러한 속성을 통해 매크로의 기본 AWS Lambda 함수 호출 시 AWS CloudFormation에서 오류 로깅 정보를 전송하는 CloudWatch 로그 그룹을 지정할 수 있으며, 로그 항목을 로그로 전송할 때 AWS CloudFormation에서 수임해야 하는 역할을 지정할 수 있습니다.

결제

매크로가 실행 중일 때 Lambda 함수의 소유자에게 해당 함수의 실행과 관련한 요금이 청구됩니다.

AWS::Serverless 변환AWS::Include 변환 변형은 AWS CloudFormation에서 호스팅하는 매크로입니다. 사용에 대해 부과되는 요금은 없습니다.

AWS CloudFormation 매크로 정의 생성 시 고려 사항

매크로 정의 생성 시 다음 사항을 염두에 두십시오.

  • 매크로는 AWS Lambda 사용이 가능한 AWS 리전에서만 지원됩니다. Lambda를 사용할 수 있는 리전 목록을 알아보려면 AWS Lambda 엔드포인트 및 할당량을 참조하세요.

  • 처리된 템플릿 조각은 유효한 JSON이어야 합니다.

  • 모든 처리된 템플릿 조각은 스택 생성, 스택 업데이트, 스택 세트 생성 또는 스택 세트 업데이트 작업에 대한 검증 확인을 전달해야 합니다.

  • AWS CloudFormation은 매크로를 먼저 확인하고 템플릿을 처리합니다. 결과 템플릿은 유효한 JSON 또는 이어야 하며 템플릿 크기 제한을 초과해서는 안 됩니다.

  • CloudFormation이 템플릿에서 요소를 처리하는 순서가 있기 때문에 매크로는 CloudFormation에 반환하는 처리된 템플릿 콘텐츠에 모듈을 포함할 수 없습니다. 모듈에 대한 자세한 내용을 알아보려면 CloudFormation CLI User Guide(CloudFormation CLI 사용 설명서)의 Developing modules(모듈 개발)를 참조하세요.

  • 업데이트 롤백 기능을 사용하면 AWS CloudFormation은 원본 템플릿의 사본을 사용합니다. 포함된 코드 조각이 변경된 경우에도 원본 템플릿으로 롤백됩니다.

  • 매크로 내에 매크로를 포함시키는 것은 매크로를 반복적으로 처리하지 않으므로 작동하지 않습니다.

  • 현재 매크로에서 Fn::ImportValue 내장 함수를 지원하지 않습니다.

  • 템플릿에 포함된 내장 함수는 모든 매크로 이후 평가됩니다. 따라서 매크로가 반환하는 처리된 템플릿 콘텐츠에는 내장 함수에 대한 호출이 포함될 수 있고, 이는 평소와 같이 평가됩니다.

  • StackSets는 현재 AWS CloudFormation 매크로를 참조하는 템플릿에서 서비스 관리형 권한으로 스택 세트를 생성하거나 업데이트하는 것을 지원하지 않습니다.

  • 스택 세트 템플릿에서 하나 이상의 매크로를 참조하는 경우 먼저 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택 세트를 생성하거나 업데이트해야 합니다. 스택 세트를 직접 생성하거나 업데이트하려면 CreateStackSet 또는 UpdateStackSet 작업을 사용하고 CAPABILITY_AUTO_EXPAND 기능을 지정합니다. 매크로 처리 시 알지 못할 수도 있는 여러 리소스가 추가될 수 있습니다. 매크로를 직접 참조하는 템플릿에서 스택 세트를 생성 또는 업데이트하기 전에 매크로가 수행하는 처리 작업을 알고 있어야 합니다.

  • 변경 세트는 현재 중첩 스택을 지원하지 않습니다. 매크로를 참조하고 중첩 스택을 포함하는 템플릿을 사용하여 스택을 생성 또는 업데이트하고자 하는 경우 스택을 직접 생성 또는 업데이트해야 합니다. 이를 수행하려면 CreateStack 또는 UpdateStack 작업을 사용하고 CAPABILITY_AUTO_EXPAND 기능을 지정합니다.

AWS CloudFormation 매크로 정의를 생성하려면:
  1. AWS CloudFormation 템플릿을 처리하는 AWS Lambda 함수를 빌드합니다.

    빌드한 Lambda 함수는 템플릿 콘텐츠의 처리를 수행합니다. 함수가 템플릿의 일부분부터 전체 템플릿까지 처리할 수 있습니다. 함수에서 준수해야 하는 이벤트 매핑에 대한 자세한 내용은 AWS CloudFormation 매크로 함수 인터페이스 단원을 참조하십시오. 매크로 생성 시 고려 사항에 대한 자세한 내용은 AWS CloudFormation 매크로 정의 생성 시 고려 사항 단원을 참조하십시오.

  2. AWS::CloudFormation::Macro 리소스 유형을 포함하는 템플릿을 생성합니다.

    • NameFunctionName 속성을 지정해야 합니다. FunctionName 속성은 AWS CloudFormation에서 매크로 실행 시 호출할 Lambda 함수의 ARN을 지정합니다.

    • 디버깅을 돕기 위해 LogGroupNameLogRoleArn 속성을 지정할 수도 있습니다.

  3. 원하는 계정의 매크로를 포함하는 템플릿에서 스택을 생성하거나 관리자 계정의 매크로를 참조하는 템플릿에서 자체 관리형 권한을 사용하여 스택 세트를 생성한 다음 원하는 대상 계정에 스택 인스턴스를 생성합니다.

    AWS CloudFormation에서 매크로 정의가 포함된 스택을 생성한 이후 매크로는 해당 계정 내에서 사용 가능합니다.

템플릿에서 AWS CloudFormation 매크로 사용

AWS CloudFormation에서 매크로 정의가 포함된 스택을 생성한 이후 매크로는 해당 계정 내에서 사용 가능합니다. 처리하고자 하는 템플릿 콘텐츠와 관련이 있는 적절한 위치에서 템플릿을 참조하여 매크로를 사용합니다.

AWS CloudFormation 매크로 평가 순서

AWS::Include 변환AWS::Serverless 변환 등과 같이 AWS CloudFormation에서 호스팅되는 변형을 포함하여 해당 템플릿의 여러 매크로를 참조할 수 있습니다.

매크로는 템플릿에서의 위치를 기준으로 가장 깊이 중첩된 외부부터 가장 일반적인 순서로 평가됩니다. 템플릿의 동일한 위치에 있는 매크로는 나열된 순서를 기준으로 순차적으로 평가됩니다.

AWS::IncludeAWS::Transform과 같은 변형은 작업 순서 및 범위 측면에서 다른 매크로와 동일하게 취급됩니다.

예를 들어 아래의 템플릿 샘플에서 AWS CloudFormation은 템플릿에서 가장 깊이 중첩된 매크로인 PolicyAdder 매크로를 먼저 평가합니다. 그런 다음 AWS CloudFormation은 MyMacro를 평가한 후 Transform 섹션의 AWS::Serverless 앞에 나열된 AWS::Serverless를 평가합니다.

AWSTemplateFormatVersion: 2010-09-09 Transform: [MyMacro, AWS::Serverless] Resources: WaitCondition: Type: AWS::CloudFormation::WaitCondition MyBucket: Type: 'AWS::S3::Bucket' Properties: BucketName: MyBucket Tags: [{"key":"value"}] 'Fn::Transform': - Name: PolicyAdder CorsConfiguration:[] MyEc2Instance: Type: 'AWS::EC2::Instance' Properties: ImageID: "ami-123"

AWS CloudFormation 매크로 범위

템플릿의 Transform 섹션에서 참조되는 매크로는 해당 템플릿의 전체 콘텐츠를 처리할 수 있습니다.

Fn::Transform 함수에서 참조되는 매크로는 템플릿의 Fn::Transform 함수에 대한 형제 요소(하위 요소 포함)의 콘텐츠를 처리할 수 있습니다.

예를 들어 아래 템플릿 샘플에서 AWS::IncludeFn::Transform 함수의 위치를 기준으로 MyBucket 속성을 모두 처리할 수 있습니다. MyMacroTransform 섹션에 포함되어 있으므로 전체 템플릿의 콘텐츠를 처리할 수 있습니다.

// Start of processable content for MyMacro AWSTemplateFormatVersion: 2010-09-09 Transform: [MyMacro] Resources: WaitCondition: Type: AWS::CloudFormation::WaitCondition MyBucket: Type: 'AWS::S3::Bucket' //Start of processable content for AWS::Include Properties: BucketName: MyBucket Tags: [{"key":"value"}] 'Fn::Transform': - Name: 'AWS::Include' Parameters: Location: s3://DOC-EXAMPLE-BUCKET/MyFileName.yaml CorsConfiguration:[] //End of processable content for AWS::Include MyEc2Instance: Type: 'AWS::EC2::Instance' Properties: ImageID: "ami-123" // End of processable content for MyMacro

변경 세트 및 AWS CloudFormation 매크로

매크로를 참조하는 템플릿을 사용하여 스택을 생성하거나 업데이트하려면 일반적으로 변경 세트를 생성하고 나서 실행하십시오. 변경 세트는 처리된 템플릿에 기초하여 CloudFormation에서 수행할 작업을 설명합니다. 매크로 처리 시 알지 못할 수도 있는 여러 리소스가 추가될 수 있습니다. 매크로가 수행하는 모든 변경을 항상 파악하려면 변경 세트를 사용합니다. 변경 세트를 검토한 후 실행하여 변경을 적용할 수 있습니다.

매크로는 IAM 리소스를 템플릿에 추가할 수 있습니다. 이러한 리소스의 경우 AWS CloudFormation에서는 해당 기능을 승인해야 합니다. 템플릿을 처리하기 전에는 AWS CloudFormation에서 추가되는 리소스를 알 수 없으므로 참조되는 매크로가 IAM 리소스를 포함하는지 여부에 따라 변경 세트를 생성할 때 IAM 기능을 승인해야 할 수도 있습니다. 즉, 변경 세트를 실행할 경우 AWS CloudFormation은 IAM 리소스 생성 시 필요한 기능을 갖추게 됩니다.

중요

스택 세트 템플릿에서 하나 이상의 매크로를 참조하는 경우 먼저 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택 세트를 생성해야 합니다. 스택 세트를 직접 생성하거나 업데이트하려면 CreateStackSet 또는 UpdateStackSet 작업을 사용하고 CAPABILITY_AUTO_EXPAND 기능을 지정해야 합니다. 매크로를 직접 참조하는 템플릿에서 스택 세트를 생성 또는 업데이트하기 전에 매크로가 수행하는 처리 작업을 알고 있어야 합니다.

참고

변경 세트에 제시된 변경을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택을 생성하거나 업데이트하는 것이 편할 경우 CreateStack 또는 UpdateStack 요청 중 CAPABILITY_AUTO_EXPAND 기능을 지정하여 그렇게 할 수 있습니다. 매크로가 수행하는 처리를 알고 있을 경우에만 매크로를 포함하는 스택 템플릿에서 직접 스택을 생성해야 합니다. 스택 세트 매크로에는 변경 세트를 사용할 수 없습니다. 스택 세트를 직접 업데이트해야 합니다.

자세한 내용은 AWS CloudFormation API 참조CreateStack 또는 UpdateStack 섹션을 참조하세요.

AWS CLI를 사용하는 경우 packagedeploy 명령을 사용하여 매크로를 참조하는 템플릿에서 스택 시작에 필요한 단계 수를 줄일 수 있습니다. 자세한 내용을 알아보려면 AWS Lambda 개발자 안내서Lambda 기반 애플리케이션 배포를 참조하세요.

템플릿 스테이지와 CloudFormation 매크로

템플릿의 단계는 템플릿이 사용자가 제출한 원본 템플릿인지 아니면 AWS CloudFormation에서 매크로를 처리한 템플릿인지를 나타냅니다.

  • Original: 사용자가 스택 또는 스택 세트를 생성하거나 업데이트하기 위해 최초로 제출한 템플릿입니다.

  • Processed: AWS CloudFormation에서 참조된 매크로 처리 이후 스택 또는 스택 생성을 생성하거나 업데이트할 때 사용하는 템플릿입니다. 원본 템플릿이 YAML 형식인 경우에도 처리된 템플릿은 JSON 형식입니다.

스택 문제 해결 시 처리된 템플릿을 사용합니다. 템플릿이 매크로를 참조하지 않는 경우 원본 템플릿과 처리된 템플릿이 동일합니다.

AWS CloudFormation 콘솔 또는 AWS CLI를 사용하여 스택 템플릿의 스테이지를 볼 수 있습니다.

참고

CreateStack, UpdateStack 또는 ValidateTemplate으로 직접 전달될 경우 처리되는 스택 템플릿의 최대 크기는 51,200바이트이고, Amazon S3 템플릿 URL을 사용하여 S3 객체로 처리될 경우에는 1MB입니다. 그러나 처리 중 CloudFormation은 템플릿에 포함된 매크로를 연속적으로 처리할 때 템플릿의 임시 상태를 업데이트합니다. 이 때문에 처리 중 템플릿의 크기가 전체 처리된 템플릿의 허용 크기를 일시적으로 초과할 수 있습니다. CloudFormation은 이러한 프로세스 내 템플릿에 대한 일부 버퍼를 허용합니다. 그러나 처리되는 스택 템플릿의 최대 허용 크기를 고려하여 템플릿과 매크로를 설계해야 합니다.

템플릿을 처리할 때 CloudFormation이 Transformation data limit exceeded 오류를 반환할 경우, CloudFormation이 처리 중 허용하는 최대 템플릿 크기를 초과한 것입니다.

이 문제를 해결하려면 다음과 같이 해 보십시오.

  • 템플릿을 여러 개의 템플릿으로 재구성하여 처리 과정의 템플릿에 대한 최대 크기를 넘지 않도록 하십시오. 예제:

  • 특정 매크로가 반환하는 템플릿 조각의 크기를 줄입니다. CloudFormation은 매크로가 반환한 조각의 내용을 변경하지 않습니다.

템플릿에서 AWS CloudFormation 매크로를 사용하려면
참고

AWS CloudFormation에서 템플릿에 참조된 매크로를 실행하려면 사용자가 기본 Lambda 함수에 대해 Invoke 권한을 보유해야 합니다. 자세한 내용을 알아보려면 AWS Lambda 개발자 안내서AWS Lambda 리소스에 대한 액세스 권한 관리 개요를 참조하세요.

  1. 참조를 템플릿의 매크로에 포함시킵니다.

    • 템플릿 조각을 처리하려면 처리하고자 하는 템플릿 콘텐츠과 관련이 있는 위치에 있는 Fn::Transform 함수의 매크로를 참조합니다.

    • 전체 템플릿을 처리하려면 템플릿의 변환 섹션에 있는 매크로를 참조합니다.

  2. 템플릿을 사용하여 변경 세트를 생성합니다.

    중요

    스택 세트 템플릿에서 하나 이상의 매크로를 참조하는 경우 먼저 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택 세트를 생성해야 합니다. 스택 세트를 직접 생성하거나 업데이트하려면 CreateStackSet 또는 UpdateStackSet 작업을 사용하고 CAPABILITY_AUTO_EXPAND 기능을 지정해야 합니다. 매크로를 직접 참조하는 템플릿에서 스택 세트를 생성 또는 업데이트하기 전에 매크로가 수행하는 처리 작업을 알고 있어야 합니다.

  3. 변경 세트를 검토 후 실행합니다.

    중요

    스택 세트 템플릿에서 하나 이상의 매크로를 참조하는 경우 먼저 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택 세트를 생성해야 합니다. 스택 세트를 직접 생성하거나 업데이트하려면 CreateStackSet 또는 UpdateStackSet 작업을 사용하고 CAPABILITY_AUTO_EXPAND 기능을 지정해야 합니다. 매크로를 직접 참조하는 템플릿에서 스택 세트를 생성 또는 업데이트하기 전에 매크로가 수행하는 처리 작업을 알고 있어야 합니다.

매크로 예제

이 설명서에 있는 매크로 예제: 매크로 생성 및 사용 연습에 추가로 GitHub 리포지토리에서 소스 코드 및 템플릿을 포함한 예제 매크로를 확인할 수 있습니다. 이러한 예제는 교육용으로 있는 그대로 제공됩니다.

다음 사항도 참조하십시오.

AWS::CloudFormation::Macro

변환

Fn::Transform

AWS::Serverless 변환

AWS::Include 변환