本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中添加跨区域操作 CodePipeline
AWS CodePipeline 包括许多操作,可帮助您为自动发布流程配置构建、测试和部署资源。您可以向管道中添加与您的管道不同的 AWS 区域中的操作。如果 AWS 服务 是操作的提供者,并且此操作类型/提供者类型与您的管道位于不同的 AWS 区域,则这是跨区域操作。
注意
支持跨区域操作,并且只能在支持跨 AWS 区域的 CodePipeline 区域中创建。有关支持的 AWS 区域列表 CodePipeline,请参阅中的配额 AWS CodePipeline。
您可以使用控制台 AWS CLI、或在管道中 CloudFormation 添加跨区域操作。
注意
中的某些操作类型 CodePipeline 可能仅在某些 AWS 地区可用。另请注意,有些 AWS 区域可能有操作类型可用,但该操作类型的特定 AWS 提供者不可用。
当您创建或编辑管道时,管道区域中必须有构件存储桶,然后每个您计划执行操作的区域必须有一个构件存储桶。有关 ArtifactStores 参数的更多信息,请参阅 CodePipeline 管道结构参考。
注意
CodePipeline 在执行跨区域操作时,处理将工件从一个 AWS 区域复制到其他区域的情况。
如果您使用控制台创建管道或跨区域操作,则默认对象存储桶由 CodePipeline 在您有操作的区域中进行配置。当您使用 AWS CLI CloudFormation、或 SDK 创建管道或跨区域操作时,您需要为每个有操作的区域提供构件存储桶。
注意
您必须在跨区域操作所在的 AWS 区域以及与您的管道相同的账户中创建构件存储桶和加密密钥。
无法创建以下操作类型的跨区域操作:
-
源操作
-
第三方操作
-
自定义操作
注意
CodePipeline在中使用跨区域 Lambda 调用操作时,使用PutJobSuccessResultPutJobFailureResult和执行 lambda 的状态应发送到 AWS 存在 Lambda 函数的区域,而不是发送到存在的区域。 CodePipeline
当管道将跨区域操作作为阶段的一部分时,仅 CodePipeline 将跨区域操作的输入项目从管道区域复制到操作的区域。
注意
管道区域和维护您的 CloudWatch 事件变更检测资源的区域保持不变。托管管道的区域不会改变。
管理管道中的跨区域操作(控制台)
您可以使用 CodePipeline 控制台向现有管道添加跨区域操作。要使用“创建管道”向导创建具有跨区域操作的新管道,请参阅创建自定义管道(控制台)。
在控制台中,您可以通过选择操作提供方和区域字段,在管道阶段创建跨区域操作,该字段列出您在该区域中为该提供方创建的资源。添加跨区域操作时, CodePipeline 在操作的区域中使用单独的构件存储桶。有关跨区域构件存储桶的更多信息,请参阅CodePipeline 管道结构参考。
向管道阶段添加跨区域操作(控制台)
使用控制台向管道添加跨区域操作。
注意
如果在保存更改时管道正在运行,则执行将无法执行。
添加跨区域操作
-
登录主机,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home
。 -
选择您的管道,然后选择 Edit (编辑)。
-
如果要添加新阶段,请在图表底部选择 + Add stage (+ 添加阶段);如果要向现有阶段添加操作,请选择 Edit stage (编辑阶段)。
-
在 Edit: <Stage> (编辑: <Stage>) 上,选择 + Add action group (+ 添加操作组) 以添加序列操作。或者,选择 + Add action (+ 添加操作) 以添加并行操作。
-
在 Edit action (编辑操作) 页面上:
-
在操作名称中,输入跨区域操作的名称。
-
在 Action provider (操作提供方) 中,选择操作提供方。
-
在 “区域” 中,选择您已创建或计划为操作创建资源的 AWS 区域。选择区域后,将列出该区域的可用资源以供选择。Re g ion 字段指定为此操作类型和提供者类型创建 AWS 资源的位置。此字段仅在操作提供方是 AWS 服务的情况下对操作显示。区域字段默认为与您的管道相同的 AWS 区域 。
-
在 Input artifacts (输入构件) 中,选择上一阶段的相应输入。例如,如果前一个阶段是源阶段,请选择SourceArtifact。
-
完成您正在配置的操作提供方的所有必填字段。
-
在 Output artifacts (输出构件) 中,选择要输出到下一阶段的适当输出。例如,如果下一阶段是部署阶段,请选择BuildArtifact。
-
选择保存。
-
-
在 Edit: <Stage> (编辑: <Stage>) 中,选择 Done (完成)。
-
选择保存。
编辑管道阶段的跨区域操作(控制台)
使用控制台编辑管道中的现有跨区域操作。
注意
如果在保存更改时管道正在运行,则执行将无法执行。
编辑跨区域操作
-
在 https://console.aws.amazon.com/codesuite/codepipeline/home.
登录控制台。 -
选择您的管道,然后选择 Edit (编辑)。
-
选择编辑阶段。
-
在 Edit: <Stage> (编辑: <Stage>) 上,选择图标以编辑现有操作。
-
在 Edit action (编辑操作) 页面上,根据需要更改字段。
-
在 Edit: <Stage> (编辑: <Stage>) 中,选择 Done (完成)。
-
选择保存。
删除管道阶段的跨区域操作(控制台)
使用控制台删除管道中的现有跨区域操作。
注意
如果在保存更改时管道正在运行,则执行将无法执行。
删除跨区域操作
-
登录主机,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home
。 -
选择您的管道,然后选择 Edit (编辑)。
-
选择编辑阶段。
-
在 Edit: <Stage> (编辑: <Stage>) 上,选择图标以删除现有操作。
-
在 Edit: <Stage> (编辑: <Stage>) 中,选择 Done (完成)。
-
选择保存。
在管道中添加跨区域操作 (CLI)
您可以使用 AWS CLI 向现有管道添加跨区域操作。
要使用在管道阶段创建跨区域操作 AWS CLI,请添加配置操作和可选region字段。您还必须已在操作的区域中创建一个构件存储桶。您可以使用 artifactStores 参数来包含每个区域的构件存储桶的列表,而不是提供单区域管道的 artifactStore 参数。
注意
在本演练及其示例中,RegionA是创建管道的区域。它可以访问用于存储管道项目的 RegionA Amazon S3 存储桶和使用的服务角色 CodePipeline。 RegionB是创建所使用的 CodeDeploy 应用程序、部署组和服务角色 CodeDeploy 的区域。
先决条件
您必须已经完成以下操作:
-
一条管道进来
RegionA。 -
里面有一个 Amazon S3 工件存储桶
RegionB。 -
中用于您的操作的资源,例如用于跨区域部署操作的 CodeDeploy 应用程序和部署组。
RegionB
在管道中添加跨区域操作 (CLI)
使用 AWS CLI 向管道添加跨区域操作。
添加跨区域操作
-
对于中的管道
RegionA,请运行get-pipeline命令将管道结构复制到 JSON 文件中。例如,对于名为MyFirstPipeline的管道,运行以下命令:aws codepipeline get-pipeline --nameMyFirstPipeline>pipeline.json该命令不会返回任何结果,但您创建的文件将出现在您运行命令所在的目录中。
-
添加
region字段以添加一个包含您的跨区域操作的新阶段,其中包含您的操作的区域和资源。以下 JSON 示例在新区域中添加了一个带有跨区域部署操作的 Deploy 阶段 CodeDeploy,其中提供者位于新区域us-east-1。{ "name": "Deploy", "actions": [ { "inputArtifacts": [ { "name": "SourceArtifact" } ], "name": "Deploy", "region": "RegionB", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "name", "DeploymentGroupName": "name" }, "runOrder": 1 } -
在管道结构中,删除
artifactStore字段并为新的跨区域操作添加artifactStores映射。映射必须包括您在其中执行操作的每个 AWS 区域的条目。对于映射中的每个条目,资源必须位于相应的 AWS 区域中。在下面的示例中,ID-A是的加密密钥 IDRegionA,ID-B是的加密密钥 IDRegionB。"artifactStores":{ "RegionA":{ "encryptionKey":{ "id":"ID-A", "type":"KMS" }, "location":"Location1", "type":"S3" }, "RegionB":{ "encryptionKey":{ "id":"ID-B", "type":"KMS" }, "location":"Location2", "type":"S3" } }下面的 JSON 示例将 us-west-2 存储桶显示为
my-storage-bucket并添加名为my-storage-bucket-us-east-1的新 us-east-1 存储桶。"artifactStores": { "us-west-2": { "type": "S3", "location": "my-storage-bucket" }, "us-east-1": { "type": "S3", "location": "my-storage-bucket-us-east-1" } }, -
如果您要使用通过 get-pipeline 命令检索到的管道结构,请删除 JSON 文件中的
metadata行。否则,update-pipeline 命令无法使用它。删除"metadata": { }行以及"created"、"pipelineARN"和"updated"字段。例如,从结构中删除以下各行:
"metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }保存该文件。
-
要应用更改,请运行 update-pipeline 命令,指定管道 JSON 文件:
重要
务必在文件名前包含
file://。此命令中需要该项。aws codepipeline update-pipeline --cli-input-json file://pipeline.json该命令会返回编辑后的管道的整个结构。输出类似于以下内容。
{ "pipeline": { "version": 4, "roleArn": "ARN", "stages": [ { "name": "Source", "actions": [ { "inputArtifacts": [], "name": "Source", "actionTypeId": { "category": "Source", "owner": "AWS", "version": "1", "provider": "CodeCommit" }, "outputArtifacts": [ { "name": "SourceArtifact" } ], "configuration": { "PollForSourceChanges": "false", "BranchName": "main", "RepositoryName": "MyTestRepo" }, "runOrder": 1 } ] }, { "name": "Deploy", "actions": [ { "inputArtifacts": [ { "name": "SourceArtifact" } ], "name": "Deploy", "region": "us-east-1", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "name", "DeploymentGroupName": "name" }, "runOrder": 1 } ] } ], "name": "AnyCompanyPipeline", "artifactStores": { "us-west-2": { "type": "S3", "location": "my-storage-bucket" }, "us-east-1": { "type": "S3", "location": "my-storage-bucket-us-east-1" } } } }注意
update-pipeline 命令会停止管道。如果在运行 update-pipeline 命令时正在通过管道运行修订,则该运行会被停止。您必须手动启动管道,通过升级后的管道运行此修订。使用
start-pipeline-execution命令手动启动您的管道。 -
更新您的管道后,跨区域操作将显示在控制台中。
在管道中添加跨区域操作 (CloudFormation)
您可以使用 CloudFormation 向现有管道添加跨区域操作。
使用添加跨区域操作 CloudFormation
-
将
Region参数添加到模板中的ActionDeclaration资源,如以下示例所示:ActionDeclaration: Type: Object Properties: ActionTypeId: Type: ActionTypeId Required: true Configuration: Type: Map InputArtifacts: Type: Array ItemType: Type: InputArtifact Name: Type: String Required: true OutputArtifacts: Type: Array ItemType: Type: OutputArtifact RoleArn: Type: String RunOrder: Type: IntegerRegion:Type: String -
在
Mappings下,为映射键RegionA和RegionB的值的名为SecondRegionMap的映射添加区域映射,如此示例所示。在Pipeline资源下的artifactStore字段下,为您的新跨区域操作添加artifactStores映射,如下所示:Mappings: SecondRegionMap:RegionA: SecondRegion: "RegionB"RegionB: SecondRegion: "RegionA" ... Properties: ArtifactStores: - Region:RegionBArtifactStore: Type: "S3" Location: test-cross-region-artifact-store-bucket-RegionB- Region:RegionAArtifactStore: Type: "S3" Location: test-cross-region-artifact-store-bucket-RegionA以下 YAML 示例将
RegionA存储桶显示为us-west-2并添加了新的RegionB存储桶:eu-central-1Mappings: SecondRegionMap: us-west-2: SecondRegion: "eu-central-1" eu-central-1: SecondRegion: "us-west-2" ... Properties: ArtifactStores: - Region: eu-central-1 ArtifactStore: Type: "S3" Location: test-cross-region-artifact-store-bucket-eu-central-1 - Region: us-west-2 ArtifactStore: Type: "S3" Location: test-cross-region-artifact-store-bucket-us-west-2 -
将更新后的模板保存到本地计算机,然后打开 CloudFormation 控制台。
-
选择堆栈,然后选择为当前堆栈创建更改集。
-
上传模板,然后查看 CloudFormation中列出的更改。这些是要对堆栈进行的更改。您应在列表中看到新资源。
-
选择执行。