本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 CodePipeline 管道使用參數覆寫函數
在 CodePipeline 階段中,您可以指定 AWS CloudFormation 動作的參數覆寫。參數覆寫可讓您指定範本參數值,以覆寫範本組態檔案中的值。 AWS CloudFormation 提供函數,協助您指定動態值 (管道執行前未知的值)。
Fn::GetArtifactAtt
Fn::GetArtifactAtt
函數會從輸入成品擷取屬性值,例如存放成品的 S3 儲存貯體名稱。使用此函數指定成品的屬性,例如其檔案名稱或儲存 Amazon S3 貯體名稱。
當您執行管道時, 會 CodePipeline 複製並將檔案寫入管道的成品存放區 (S3 儲存貯體)。 會在成品存放區中 CodePipeline 產生檔案名稱。在您執行管道前,這些檔案名稱為未知。
例如,在管道中,您可能有一個來源階段,其中會將 AWS Lambda 函數原始程式碼 CodePipeline 複製到成品存放區。在下一個階段中,您有一個 AWS CloudFormation 範本可建立 Lambda 函數,但 AWS CloudFormation 需要檔案名稱才能建立函數。您必須使用 Fn::GetArtifactAtt
函數傳遞正確的 S3 儲存貯體和檔案名稱。
語法
使用下列語法來擷取成品的屬性值。
{ "Fn::GetArtifactAtt" : [ "
artifactName
", "attributeName
" ] }
artifactName
-
輸入成品的名稱。您必須為關聯動作將此成品宣告為輸入。
attributeName
-
您希望擷取其值的成品屬性名稱。如需每一個成品屬性的詳細資訊,請參閱以下的「屬性」一節。
範例
下列參數覆寫透過擷取 S3 儲存貯體名稱和 BucketName
成品的檔案名稱,指定 ObjectKey
和 LambdaFunctionSource
參數。此範例假設已 CodePipeline 複製 Lambda 函數原始程式碼,並將其儲存為成品,例如,作為來源階段的一部分。
{ "BucketName" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "BucketName"]}, "ObjectKey" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "ObjectKey"]} }
Attributes
您可以擷取成品的下列屬性。
BucketName
-
存放成品的 S3 儲存貯體名稱。
ObjectKey
-
包含由 產生成品的
.zip
檔案名稱 CodePipeline,例如1ABCyZZ.zip
。 URL
-
成品URL的 Amazon Simple Storage Service (Amazon S3),例如
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 範本程式碼片段
下列 AWS CloudFormation 範本程式碼片段來自 CodePipeline 管道,示範如何傳遞堆疊輸出。這些程式碼片段顯示管道定義的兩個階段。第一個階段會建立堆疊並將其輸出儲存在 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'
另請參閱
以下相關資源可協助您使用這些參數。
-
如需 中 CloudFormation 動作參數的詳細資訊 CodePipeline,請參閱AWS CodePipeline 《 使用者指南》中的AWS CloudFormation 部署動作組態參考。
-
如需動作提供者的範例範本值 (例如
Owner
欄位或configuration
欄位),請參閱 AWS CodePipeline User Guide (《 使用者指南》) 中的 Action structure reference (動作結構參考)。 -
若要下載 YAML或 JSON 格式的範例管道堆疊範本,請參閱 AWS CodePipeline 使用者指南中的教學:使用 建立管道 AWS CloudFormation。