CodePipeline 파이프라인에서 파라미터 재정의 함수 사용 - AWS CloudFormation

CodePipeline 파이프라인에서 파라미터 재정의 함수 사용

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 버킷 이름과 파일 이름을 가져와서 ObjectKeyLambdaFunctionSource 파라미터를 지정합니다. 이 예제에서는 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 파일에 저장합니다. 이러한 값은 OutputFileNameOutputArtifacts 속성에서 지정됩니다.

단계에서 사용할 소스 입력 아티팩트의 이름은 TemplateSource입니다. 스택 템플릿의 파일 이름은 teststackA.yaml이며 구성 파일의 파일 이름은 test-configuration.json입니다. 두 단계 모두에서 이러한 값은 다음과 같이 TemplateConfigurationTemplatePath 속성에 지정됩니다.

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의 AWS CloudFormation 작업 파라미터에 대한 자세한 내용을 알아보려면 AWS CodePipeline 사용 설명서AWS CloudFormation 작업 구성 참조를 참조하세요.

  • Owner 필드 또는 configuration 필드와 같은 작업 공급자별 예제 템플릿 값은 AWS CodePipeline 사용 설명서의 Action structure reference에서 확인하세요.

  • YAML 또는 JSON 형식의 예제 파이프라인 스택 템플릿을 다운로드하려면 AWS CodePipeline 사용 설명서AWS CloudFormation이 포함된 파이프라인 생성에서 자습서를 참조하세요.

  • 템플릿 예제 구성 파일은 AWS CloudFormation 아티팩트를 참조하세요.