CodePipeline 스테이지에서 AWS CloudFormation 작업에 대한 파라미터 재정의를 지정할 수 있습니다. 파라미터 재정의를 사용하면 템플릿 구성 파일에서 값을 재정의하는 템플릿 파라미터 값을 지정할 수 있습니다. AWS CloudFormation은 동적 값(파이프라인이 실행될 때까지 알 수 없는 값)을 지정하는 데 도움이 되는 함수를 제공합니다.
Fn::GetArtifactAtt
Fn::GetArtifactAtt
함수는 아티팩트가 저장되는 S3 버킷 이름과 같은 입력 아티팩트에서 속성의 값을 가져옵니다. 이 함수를 사용하여 파일 이름 또는 Amazon S3 버킷 이름과 같은 아티팩트의 속성을 지정합니다.
파이프라인을 실행하면 CodePipeline에서 파일을 복사하여 파이프라인의 아티팩트 스토어(S3 버킷)에 기록합니다. CodePipeline은 아티팩트 스토어에 파일 이름을 생성합니다. 파이프라인을 실행하기 전에는 이러한 파일 이름을 알 수 없습니다.
예를 들어, 파이프라인에는 CodePipeline에서 AWS Lambda 함수 소스 코드를 아티팩트 스토어에 복사하는 소스 스테이지가 있을 수 있습니다. 다음 스테이지에는 Lambda 함수를 생성하는 AWS CloudFormation 템플릿이 있지만, AWS CloudFormation에서 함수를 생성하려면 파일 이름이 필요합니다. Fn::GetArtifactAtt
함수를 사용하여 정확한 S3 버킷 및 파일 이름을 전달해야 합니다.
구문
다음 구문을 사용하여 아티팩트의 속성 값을 가져옵니다.
{ "Fn::GetArtifactAtt" : [ "artifactName
", "attributeName
" ] }
artifactName
-
입력 아티팩트의 이름입니다. 연결된 작업에 대한 입력으로 이 아티팩트를 선언해야 합니다.
attributeName
-
값을 가져올 아티팩트 속성의 이름입니다. 각 아티팩트 속성에 대한 세부 정보는 다음 속성 단원을 참조하십시오.
예제
다음 파라미터 재정의는 BucketName
아티팩트의 S3 버킷 이름과 파일 이름을 가져와서 ObjectKey
및 LambdaFunctionSource
파라미터를 지정합니다. 이 예제에서는 CodePipeline에서 Lambda 함수 소스 코드를 복사하여 아티팩트로(예: 소스 단계의 부분으로) 저장했다고 가정합니다.
{
"BucketName" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "BucketName"]},
"ObjectKey" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "ObjectKey"]}
}
속성
아티팩트의 다음과 같은 속성을 가져올 수 있습니다.
BucketName
-
아티팩트가 저장되는 S3 버킷의 이름입니다.
ObjectKey
-
CodePipeline에서 생성된 아티팩트가 포함되어 있는
.zip
파일의 이름입니다(예:1ABCyZZ.zip
). URL
-
아티팩트의 Amazon Simple Storage Service(Amazon S3)URL입니다(예:
https://s3.us-west-2.amazonaws.com/artifactstorebucket-yivczw8jma0c/test/TemplateSo/1ABCyZZ.zip
).
Fn::GetParam
Fn::GetParam
함수는 JSON 형식 파일의 키-값 페어에서 값을 반환합니다. JSON 파일은 아티팩트에 포함되어야 합니다.
이 함수를 사용하여 AWS CloudFormation 스택에서 출력 값을 가져오고 이 값을 다른 작업에 대한 입력으로 사용합니다. 예를 들어, AWS CloudFormation 작업에 대한 출력 파일 이름을 지정할 경우 CodePipeline에서 출력을 JSON 파일에 저장한 다음 출력 아티팩트의 .zip
파일에 추가합니다. Fn::GetParam
함수를 사용하여 출력 값을 가져오고 이 값을 다른 작업에 대한 입력으로 사용합니다.
구문
다음 구문을 사용하여 키-값 페어에서 값을 가져옵니다.
{ "Fn::GetParam" : [ "artifactName
", "JSONFileName
", "keyName
" ] }
artifactName
-
연결된 작업에 대한 입력 아티팩트로 포함되어야 하는 아티팩트의 이름입니다.
JSONFileName
-
아티팩트에 포함되는 JSON 파일의 이름입니다.
keyName
-
값을 가져올 키의 이름입니다.
예시
다음 예제에서는 파라미터 재정의에서 Fn::GetParam
함수를 사용하는 방법을 보여 줍니다.
구문
다음 파라미터 재정의는 WebSiteURL
아티팩트에 있는 URL
파일에서 stack-output.json
키의 값을 가져와 WebStackOutput
파라미터를 지정합니다.
{
"WebSiteURL" : { "Fn::GetParam" : ["WebStackOutput", "stack-output.json", "URL"]}
}
AWS CloudFormation 템플릿 코드 조각
CodePipeline 파이프라인의 다음 AWS CloudFormation 템플릿 코드 조각은 스택 출력을 전달하는 방법을 보여줍니다. 이 코드 조각은 파이프라인 정의의 2단계를 보여 줍니다. 첫 번째 단계는 스택을 생성하고 해당 출력을 TestOutput.json
아티팩트의 StackAOutput
파일에 저장합니다. 이러한 값은 OutputFileName
및 OutputArtifacts
속성에서 지정됩니다.
단계에서 사용할 소스 입력 아티팩트의 이름은 TemplateSource
입니다. 스택 템플릿의 파일 이름은 teststackA.yaml
이며 구성 파일의 파일 이름은 test-configuration.json
입니다. 두 단계 모두에서 이러한 값은 다음과 같이 TemplateConfiguration
및 TemplatePath
속성에 지정됩니다.
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackA.yaml
예 스택 A 생성 스테이지
- Name: CreateTestStackA
Actions:
- Name: CloudFormationCreate
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
OutputFileName: TestOutput.json
RoleArn: !GetAtt [CFNRole, Arn]
StackName: StackA
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackA.yaml
InputArtifacts:
- Name: TemplateSource
OutputArtifacts:
- Name: StackAOutput
RunOrder: '1'
후속 단계에서 스택 B는 스택 A의 출력을 사용합니다. 예제에서는 ParameterOverrides
속성에서 Fn::GetParam
함수를 사용하여 StackBInputParam
파라미터를 지정합니다. 결과 값은 StackAOutputName
키와 연결된 값입니다.
예 스택 B 생성 스테이지
- Name: CreateTestStackB
Actions:
- Name: CloudFormationCreate
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
RoleArn: !GetAtt [CFNRole, Arn]
StackName: StackB
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackB.yaml
ParameterOverrides: |
{
"StackBInputParam" : { "Fn::GetParam" : ["StackAOutput", "TestOutput.json", "StackAOutputName"]}
}
InputArtifacts:
- Name: TemplateSource
- Name: StackAOutput
RunOrder: '1'
다음 사항도 참조하세요.
이러한 파라미터를 이용할 때 참조할 수 있는 관련 리소스는 다음과 같습니다.
-
CodePipeline의 CloudFormation 작업 파라미터에 대한 자세한 내용은 AWS CodePipeline 사용 설명서의 AWS CloudFormation deploy action configuration reference를 참조하세요.
-
Owner
필드 또는configuration
필드와 같은 작업 공급자별 예제 템플릿 값은 AWS CodePipeline 사용 설명서의 Action structure reference에서 확인하세요. -
YAML 또는 JSON 형식의 예제 파이프라인 스택 템플릿을 다운로드하려면 AWS CodePipeline 사용 설명서의 Tutorial: Create a pipeline with AWS CloudFormation을 참조하세요.