在中添加跨区域操作 CodePipeline - AWS CodePipeline

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在中添加跨区域操作 CodePipeline

AWS CodePipeline 包括许多操作,可帮助您为自动发布流程配置构建、测试和部署资源。您可以向管道中添加与您的管道不同的 AWS 区域中的操作。如果 AWS 服务 是操作的提供者,并且此操作类型/提供者类型与您的管道位于不同的 AWS 区域,则这是跨区域操作。

注意

支持跨区域操作,并且只能在支持跨 AWS 区域的 CodePipeline 区域中创建。有关支持的 AWS 区域列表 CodePipeline,请参阅中的配额 AWS CodePipeline

您可以使用控制台 AWS CLI、或在管道中 AWS CloudFormation 添加跨区域操作。

注意

中的某些操作类型 CodePipeline 可能仅在某些 AWS 地区可用。另请注意,有些 AWS 区域可能有操作类型可用,但该操作类型的特定 AWS 提供者不可用。

当您创建或编辑管道时,管道区域中必须有构件存储桶,然后每个您计划执行操作的区域必须有一个构件存储桶。有关 ArtifactStores 参数的更多信息,请参阅 CodePipeline 管道结构参考

注意

CodePipeline 在执行跨区域操作时,处理将工件从一个 AWS 区域复制到其他区域的情况。

如果您使用控制台创建管道或跨区域操作,则默认对象存储桶由 CodePipeline 在您有操作的区域中进行配置。当您使用 AWS CLI AWS CloudFormation、或 SDK 创建管道或跨区域操作时,您需要为每个有操作的区域提供构件存储桶。

注意

您必须在跨区域操作所在的 AWS 区域以及与您的管道相同的账户中创建构件存储桶和加密密钥。

无法创建以下操作类型的跨区域操作:

  • 源操作

  • 第三方操作

  • 自定义操作

注意

CodePipeline在中使用跨区域 Lambda 调用操作时,使用PutJobSuccessResultPutJobFailureResult和执行 lambda 的状态应发送到 AWS 存在 Lambda 函数的区域,而不是发送到存在的区域。 CodePipeline

当管道将跨区域操作作为阶段的一部分时,仅 CodePipeline 将跨区域操作的输入项目从管道区域复制到操作的区域。

注意

管道区域和维护您的 CloudWatch 事件变更检测资源的区域保持不变。托管管道的区域不会改变。

管理管道中的跨区域操作(控制台)

您可以使用 CodePipeline 控制台向现有管道添加跨区域操作。要使用“创建管道”向导创建具有跨区域操作的新管道,请参阅创建自定义管道(控制台)

在控制台中,您可以通过选择操作提供方和区域字段,在管道阶段创建跨区域操作,该字段列出您在该区域中为该提供方创建的资源。添加跨区域操作时,将在操作的区域中 CodePipeline使用单独的构件存储桶。有关跨区域构件存储桶的更多信息,请参阅CodePipeline 管道结构参考

向管道阶段添加跨区域操作(控制台)

使用控制台向管道添加跨区域操作。

注意

如果在保存更改时管道正在运行,则执行将无法执行。

添加跨区域操作
  1. http://console.aws.amazon.com/codesuite/codepipeline/home 登录控制台。

  2. 选择您的管道,然后选择 Edit (编辑)

  3. 如果要添加新阶段,请在图表底部选择 + Add stage (+ 添加阶段);如果要向现有阶段添加操作,请选择 Edit stage (编辑阶段)

  4. Edit: <Stage> (编辑: <Stage>) 上,选择 + Add action group (+ 添加操作组) 以添加序列操作。或者,选择 + Add action (+ 添加操作) 以添加并行操作。

  5. Edit action (编辑操作) 页面上:

    1. 操作名称中,输入跨区域操作的名称。

    2. Action provider (操作提供方) 中,选择操作提供方。

    3. 在 “区域” 中,选择您已创建或计划为操作创建资源的 AWS 区域。选择区域后,将列出该区域的可用资源以供选择。Re g ion 字段指定为此操作类型和提供者类型创建 AWS 资源的位置。此字段仅在操作提供方是 AWS 服务的情况下对操作显示。区域字段默认为与您的管道相同的 AWS 区域 。

    4. Input artifacts (输入构件) 中,选择上一阶段的相应输入。例如,如果前一个阶段是源阶段,请选择SourceArtifact

    5. 完成您正在配置的操作提供方的所有必填字段。

    6. Output artifacts (输出构件) 中,选择要输出到下一阶段的适当输出。例如,如果下一阶段是部署阶段,请选择BuildArtifact

    7. 选择保存

  6. Edit: <Stage> (编辑: <Stage>) 中,选择 Done (完成)

  7. 选择保存

编辑管道阶段的跨区域操作(控制台)

使用控制台编辑管道中的现有跨区域操作。

注意

如果在保存更改时管道正在运行,则执行将无法执行。

编辑跨区域操作
  1. https://console.aws.amazon.com/codesuite/codepipeline/home. 登录控制台。

  2. 选择您的管道,然后选择 Edit (编辑)

  3. 选择编辑阶段

  4. Edit: <Stage> (编辑: <Stage>) 上,选择图标以编辑现有操作。

  5. Edit action (编辑操作) 页面上,根据需要更改字段。

  6. Edit: <Stage> (编辑: <Stage>) 中,选择 Done (完成)

  7. 选择保存

删除管道阶段的跨区域操作(控制台)

使用控制台删除管道中的现有跨区域操作。

注意

如果在保存更改时管道正在运行,则执行将无法执行。

删除跨区域操作
  1. http://console.aws.amazon.com/codesuite/codepipeline/home 登录控制台。

  2. 选择您的管道,然后选择 Edit (编辑)

  3. 选择编辑阶段

  4. Edit: <Stage> (编辑: <Stage>) 上,选择图标以删除现有操作。

  5. Edit: <Stage> (编辑: <Stage>) 中,选择 Done (完成)

  6. 选择保存

在管道中添加跨区域操作 (CLI)

您可以使用 AWS CLI 向现有管道添加跨区域操作。

要使用在管道阶段创建跨区域操作 AWS CLI,请添加配置操作和可选region字段。您还必须已在操作的区域中创建一个构件存储桶。您可以使用 artifactStores 参数来包含每个区域的构件存储桶的列表,而不是提供单区域管道的 artifactStore 参数。

注意

在本演练及其示例中,RegionA 是创建管道的区域。它可以访问用于存储管道工件的 RegionA Amazon S3 存储桶以及使用的服务角色。 CodePipelineRegionB 是创建所使用的 CodeDeploy 应用程序、部署组和服务角色 CodeDeploy 的区域。

先决条件

您必须已经完成以下操作:

  • RegionA 中创建管道。

  • RegionB 中的 Amazon S3 构件桶。

  • 区域 b 中用于您的操作的资源,例如用于跨区域部署操作的 CodeDeploy 应用程序和部署组。

在管道中添加跨区域操作 (CLI)

使用 AWS CLI 向管道添加跨区域操作。

添加跨区域操作
  1. 对于 RegionA 中的管道,运行 get-pipeline 命令以将管道结构复制到 JSON 文件中。例如,对于名为 MyFirstPipeline 的管道,运行以下命令:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    该命令不会返回任何结果,但您创建的文件将出现在您运行命令所在的目录中。

  2. 添加 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 }
  3. 在管道结构中,删除 artifactStore 字段并为新的跨区域操作添加 artifactStores 映射。映射必须包括您在其中执行操作的每个 AWS 区域的条目。对于映射中的每个条目,资源必须位于相应的 AWS 区域中。在以下示例中,ID-ARegionA 的加密密钥 ID,ID-BRegionB 的加密密钥 ID。

    "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" } },
  4. 如果您要使用通过 get-pipeline 命令检索到的管道结构,请删除 JSON 文件中的 metadata 行。否则,update-pipeline 命令无法使用它。删除 "metadata": { } 行以及 "created""pipelineARN""updated" 字段。

    例如,从结构中删除以下各行:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    保存该文件。

  5. 要应用更改,请运行 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 命令手动启动您的管道。

  6. 更新您的管道后,跨区域操作将显示在控制台中。

    包含跨区域操作的管道的概要视图。

在管道中添加跨区域操作 (AWS CloudFormation)

您可以使用 AWS CloudFormation 向现有管道添加跨区域操作。

使用添加跨区域操作 AWS CloudFormation
  1. 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: Integer Region: Type: String
  2. Mappings 下,为映射键 RegionARegionB 的值的名为 SecondRegionMap 的映射添加区域映射,如此示例所示。在 Pipeline 资源下的 artifactStore 字段下,为您的新跨区域操作添加 artifactStores 映射,如下所示:

    Mappings: SecondRegionMap: RegionA: SecondRegion: "RegionB" RegionB: SecondRegion: "RegionA" ... Properties: ArtifactStores: - Region: RegionB ArtifactStore: Type: "S3" Location: test-cross-region-artifact-store-bucket-RegionB - Region: RegionA ArtifactStore: Type: "S3" Location: test-cross-region-artifact-store-bucket-RegionA

    以下 YAML 示例将 RegionA 存储桶显示为 us-west-2 并添加新的 RegionB 存储桶 eu-central-1

    Mappings: 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
  3. 将更新后的模板保存到本地计算机,然后打开 AWS CloudFormation 控制台。

  4. 选择堆栈,然后选择为当前堆栈创建更改集

  5. 上传模板,然后查看 AWS CloudFormation中列出的更改。这些是要对堆栈进行的更改。您应在列表中看到新资源。

  6. 选择执行