将参数覆盖函数用于 CodePipeline 管道 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将参数覆盖函数用于 CodePipeline 管道

在 CodePipeline 阶段,您可以为 Amazon CloudFormation 操作指定参数覆盖。通过使用参数覆盖,您可以指定覆盖模板配置文件中的值的模板参数值。Amazon CloudFormation 提供了一些函数以帮助您指定动态值(在管道运行之前未知的值)。

Fn::GetArtifactAtt

Fn::GetArtifactAtt 函数将从输入构件 (例如,存储了构件的 S3 存储桶名称) 检索属性的值。使用此函数可指定构件的属性,例如,构件的文件名或 Amazon S3 桶名称。

在运行管道时,CodePipeline 复制文件并将其写入到管道的构件存储(S3 桶)中。CodePipeline 在构件存储中生成文件名。在您运行管道之前,这些文件名是未知的。

例如,在管道中,您可能具有一个源阶段,CodePipeline 在该阶段将 Amazon Lambda 函数源代码复制到构件存储中。在下一个阶段,您使用一个 Amazon CloudFormation 模板以创建 Lambda 函数,但 Amazon CloudFormation 需要使用文件名以创建该函数。您必须使用 Fn::GetArtifactAtt 函数以传递准确的 S3 存储桶和文件名。

语法

使用以下语法可检索构件的属性值。

{ "Fn::GetArtifactAtt" : [ "artifactName", "attributeName" ] }
artifactName

输入构件的名称。您必须声明此构件作为相关操作的输入。

attributeName

要检索其值的构件属性的名称。有关每个构件属性的详细信息,请参阅以下“属性”部分。

示例

以下参数覆盖通过检索 LambdaFunctionSource 构件的 S3 桶名称和文件名来指定 BucketNameObjectKey 参数。该示例假定 CodePipeline 复制了 Lambda 函数源代码并将其保存为构件,例如,作为源阶段的一部分。

{ "BucketName" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "BucketName"]}, "ObjectKey" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "ObjectKey"]} }

Attributes

您可以检索构件的以下属性。

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 文件必须包含在构件中。

使用此函数可从 Amazon CloudFormation 堆栈中检索输出值并将这些值用作另一个操作的输入。例如,如果为 Amazon 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"]} }

Amazon CloudFormation 模板代码段

CodePipeline 管道中的以下 Amazon CloudFormation 模板代码段将演示如何传递堆栈输出。这些代码段说明了管道定义的两个阶段。第一个阶段将创建一个堆栈并将其输出保存在 StackAOutput 构件的 TestOutput.json 文件中。这些值由 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 中 Amazon CloudFormation 操作参数的更多信息,请参阅《Amazon CodePipeline 用户指南》中的 Amazon CloudFormation 操作配置引用。

  • 有关操作提供方的示例模板值,例如 Owner 字段或 configuration 字段的值,请参阅《Amazon CodePipeline 用户指南》中的操作结构参考

  • 要下载 YAML 或 JSON 格式的示例管道堆栈模板,请参阅《Amazon CodePipeline 用户指南》中使用 Amazon CloudFormation 创建管道下的教程。

  • 有关示例模板配置文件,请参阅 Amazon CloudFormation 构件