CloudFormation 매크로 개요
매크로를 사용한 템플릿 처리에 대한 두 가지 주요 단계가 있습니다. 매크로 자체의 생성과 매크로 사용을 통한 템플릿의 처리 수행입니다.
매크로 정의를 생성하려면 다음을 생성해야 합니다.
-
템플릿 처리를 수행하는 Lambda 함수. 이 Lambda 함수는 코드 조각 또는 전체 템플릿 및 정의하는 추가 파라미터를 수락합니다. 응답으로 처리된 템플릿 코드 조각 또는 전체 템플릿을 반환합니다.
-
AWS::CloudFormation::Macro 유형의 리소스로, 이를 통해 사용자는 CloudFormation 템플릿 내부에서 Lambda 함수를 직접적으로 호출할 수 있습니다. 이 리소스는 Lambda 함수의 ARN을 지정하여 이 매크로를 호출하고, 추가 선택적 속성을 지정하여 디버깅을 지원합니다. 계정 내에서 이 리소스를 생성하려면
AWS::CloudFormation::Macro
리소스를 포함하는 템플릿을 작성한 다음 템플릿에서 자체 관리 권한이 있는 스택 또는 스택 세트를 생성합니다. AWS CloudFormation StackSets는 현재 매크로를 참조하는 템플릿에서 서비스 관리형 권한으로 스택 세트를 생성하거나 업데이트하는 것을 지원하지 않습니다.
매크로를 사용하려면 템플릿에서 매크로를 참조합니다.
-
템플릿의 섹션 또는 일부를 처리하려면 변환하려는 템플릿과 관련된 위치에 있는
Fn::Transform
함수의 매크로를 참조합니다.Fn::Transform
사용 시 필요한 지정된 파라미터를 전달할 수 있습니다. -
전체 템플릿을 처리하려면 템플릿의 Transform 섹션에 있는 매크로를 참조합니다.
그런 다음 변경 세트를 생성하고 실행하십시오. (매크로 처리 시 알지 못할 수도 있는 여러 리소스가 추가될 수 있습니다. 매크로가 수행하는 모든 변경을 인식하려면 변경 세트를 사용합니다.) CloudFormation은 추가로 지정된 파라미터와 함께 지정된 템플릿 콘텐츠를 매크로 리소스에 지정된 Lambda 함수에 전달합니다. Lambda 함수는 처리된 템플릿 콘텐츠를 반환하며, 이는 코드 조각 또는 전체 템플릿입니다.
템플릿의 모든 매크로가 직접적으로 호출된 이후 CloudFormation에서 처리된 템플릿 콘텐츠를 포함하는 변경 세트를 생성합니다. 변경 세트를 검토한 후 실행하여 해당 변경 내용을 적용합니다.
스택을 직접 생성하는 방법
매크로를 참조하는 템플릿을 사용하여 스택을 생성하거나 업데이트하려면 일반적으로 변경 세트를 생성하고 나서 실행하십시오. 변경 세트는 처리된 템플릿에 기초하여 CloudFormation에서 수행할 작업을 설명합니다. 매크로 처리 시 알지 못할 수도 있는 여러 리소스가 추가될 수 있습니다. 매크로가 수행하는 모든 변경을 항상 파악하려면 변경 세트를 사용합니다. 변경 세트를 검토한 후 실행하여 변경을 적용할 수 있습니다.
매크로는 IAM 리소스를 템플릿에 추가할 수 있습니다. 이러한 리소스의 경우 CloudFormation에서는 해당 기능을 승인해야 합니다. 템플릿을 처리하기 전에는 CloudFormation에서 추가되는 리소스를 알 수 없으므로 참조되는 매크로가 IAM 리소스를 포함하는지 여부에 따라 변경 세트를 생성할 때 IAM 기능을 승인해야 할 수도 있습니다. 즉, 변경 세트를 실행할 경우 CloudFormation은 IAM 리소스 생성 시 필요한 기능을 갖추게 됩니다.
변경 세트에 제시된 변경을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택을 생성하거나 업데이트하려면 CreateStack
또는 UpdateStack
요청 중 CAPABILITY_AUTO_EXPAND
기능을 지정합니다. 매크로가 수행하는 처리를 알고 있을 경우에만 매크로를 포함하는 스택 템플릿에서 직접 스택을 생성해야 합니다. 스택 세트 매크로에는 변경 세트를 사용할 수 없습니다. 스택 세트를 직접 업데이트해야 합니다.
자세한 내용은 AWS CloudFormation API 참조의 CreateStack 또는 UpdateStack 섹션을 참조하세요.
중요
스택 세트 템플릿에서 하나 이상의 매크로를 참조하는 경우 먼저 변경 세트의 결과 변경 사항을 먼저 검토하지 않고 처리된 템플릿에서 직접 스택 세트를 생성해야 합니다. 매크로 처리 시 알지 못할 수도 있는 여러 리소스가 추가될 수 있습니다. 매크로를 직접 참조하는 템플릿에서 스택 세트를 생성 또는 업데이트하기 전에 매크로가 수행하는 처리 작업을 알고 있어야 합니다.
매크로를 참조하는 템플릿에서 스택 시작에 필요한 단계 수를 줄이려면 package
및 deploy
AWS CLI 명령을 사용합니다. 자세한 내용은 AWS CLI를 사용하여 S3 버킷에 로컬 아티팩트 업로드 및 변환이 포함된 스택 생성 단원을 참조하세요.
고려 사항
매크로를 사용하는 경우 다음 고려 사항 및 제한 사항에 유의하세요.
-
매크로는 Lambda 사용이 가능한 AWS 리전에서만 지원됩니다. Lambda를 사용할 수 있는 리전 목록을 알아보려면 AWS Lambda 엔드포인트 및 할당량을 참조하세요.
-
처리된 템플릿 조각은 유효한 JSON이어야 합니다.
-
모든 처리된 템플릿 조각은 스택 생성, 스택 업데이트, 스택 세트 생성 또는 스택 세트 업데이트 작업에 대한 검증 확인을 전달해야 합니다.
-
CloudFormation은 매크로를 먼저 확인하고 템플릿을 처리합니다. 결과 템플릿은 유효한 JSON 또는 이어야 하며 템플릿 크기 제한을 초과해서는 안 됩니다.
-
CloudFormation이 템플릿에서 요소를 처리하는 순서가 있기 때문에 매크로는 CloudFormation에 반환하는 처리된 템플릿 콘텐츠에 모듈을 포함할 수 없습니다. 자세한 내용은 매크로 평가 순서 단원을 참조하십시오.
-
업데이트 롤백 기능을 사용하면 CloudFormation은 원본 템플릿의 사본을 사용합니다. 포함된 코드 조각이 변경된 경우에도 원본 템플릿으로 롤백됩니다.
-
매크로는 재귀적으로 처리되지 않기 때문에 매크로 내에 매크로를 포함시키면 작동하지 않습니다.
-
현재 매크로에서
Fn::ImportValue
내장 함수를 지원하지 않습니다. -
템플릿에 포함된 내장 함수는 모든 매크로 이후 평가됩니다. 따라서 매크로가 반환하는 처리된 템플릿 콘텐츠에는 내장 함수에 대한 호출이 포함될 수 있고, 이는 평소와 같이 평가됩니다.
-
StackSets는 현재 CloudFormation 매크로를 참조하는 템플릿에서 서비스 관리형 권한으로 스택 세트를 생성하거나 업데이트하는 것을 지원하지 않습니다.
매크로 계정 범위 및 권한
리소스로 생성된 계정에서만 매크로를 사용할 수 있습니다. 매크로의 이름은 해당 계정 내에서 고유해야 합니다. 하지만 기본 Lambda 함수에서 교차 계정 액세스를 활성화하고 여러 계정에서 해당 함수를 참조하는 매크로 정의를 생성함으로써 여러 계정에서 동일한 기능을 사용할 수 있도록 할 수 있습니다. 아래 예제에서는 3개의 계정에 동일한 Lambda 함수를 가리키는 매크로 정의가 포함되어 있습니다.
매크로 정의를 생성하려면 사용자에게 지정된 계정 내에서 스택 또는 스택 세트를 생성할 수 있는 권한이 있어야 합니다.
CloudFormation에서 템플릿에 포함된 매크로를 실행하려면 사용자가 기본 Lambda 함수에 대해 Invoke
권한을 보유해야 합니다. 잠재적인 권한 상승을 방지하도록 CloudFormation에서는 매크로 실행 도중 사용자를 가장합니다.
자세한 내용은 AWS Lambda 개발자 안내서의 AWS Lambda에서 권한 관리 및 서비스 승인 참조의 Actions, resources, and condition keys for AWS Lambda를 참조하세요.