在不支持 AWS 的 AWS 区域创建管道 CodePipeline - AWS Prescriptive Guidance

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

在不支持 AWS 的 AWS 区域创建管道 CodePipeline

由 Anand Krishna Varanasi (AWS) 编写

代码存储库:invisible-codepipeline-unsupported-regions

环境:PoC 或试点

技术:基础设施; DevOps

AWS 服务:AWS CodeBuild;AWS CodeCommit;AWS CodeDeploy;AWS CodePipeline

Summary

AWS CodePipeline 是一项持续交付 (CD) 编排服务,是亚马逊网络服务 (AWS) 的一组 DevOps 工具的一部分。它与各种来源(例如版本控制系统和存储解决方案)、AWS 和 AWS Partners 提供的持续集成 (CI) 产品和服务以及开源产品集成,为应用程序和基础设施的快速部署提供 end-to-end 工作流程服务。

但是, CodePipeline 并非所有 AWS 区域都支持,因此拥有一个连接 AWS CI/CD 服务的隐形协调器很有用。此模式描述了如何使用 AWS、AWS 和 AWS 等 AWS CI/CD 服务在尚 CodePipeline 不支持的 AW CodeCommit S CodeBuild 区域中实施 end-to-end 工作流程管道。 CodeDeploy

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account。

  • AWS Cloud Development Kit (AWS CDK) CLI 版本 2.28 或更高版本

架构

目标技术堆栈

下图显示了在不支持的 CodePipeline区域(例如非洲(开普敦)区域)中创建的管道。开发者将 CodeDeploy 配置文件(也称为部署生命周期挂钩脚本)推送到托管的 Git 存储库 CodeCommit。(请参阅此模式提供的GitHub 存储库。) Amazon EventBridge 规则会自动启动。 CodeBuild

CodeDeploy 配置文件 CodeCommit 作为管道源阶段的一部分从中提取并传输到 CodeBuild。 

在下一阶段, CodeBuild 执行以下任务: 

  1. 下载应用程序源代码 TAR 文件。您可以使用参数存储(AWS Systems Manager 的一项功能)来配置此文件的名称。

  2. 下载 CodeDeploy 配置文件。

  3. 创建应用程序源代码和特定于应用程序类型的 CodeDeploy 配置文件的组合存档。

  4. 使用组合 CodeDeploy 存档启动部署到亚马逊弹性计算云 (Amazon EC2) 实例。

在不受支持的 AWS 区域 中创建管道

工具

Amazon Web Services

  • AWS CodeBuild 是一项完全托管的构建服务,可帮助您编译源代码、运行单元测试和生成可随时部署的项目。

  • AWS CodeCommit 是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。

  • AWS CodeDeploy 可自动部署到亚马逊 EC2 或本地实例、AWS Lambda 函数或亚马逊弹性容器服务 (Amazon ECS) Container Service 服务。

  • AWS CodePipeline 可帮助您快速建模和配置软件发布的不同阶段,并自动执行持续发布软件变更所需的步骤。

  • AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义并预置 Amazon Web Services Cloud 基础设施。

代码

此模式的代码可在 “ GitHub CodePipeline 不支持的区域” 存储库中找到。

操作说明

任务描述所需技能

安装 AWS CDK CLI。

有关说明,请参阅 AWS CDK 文档

AWS DevOps

安装 Git 客户端。

要创建提交,您可以使用安装在本地计算机上的 Git 客户端,然后将提交推送到 CodeCommit 存储库。要使用 Git 客户端 CodeCommit 进行设置,请参阅CodeCommit 文档

AWS DevOps

安装 npm。

安装 npm 包管理器。有关更多信息,请参阅 npm 文档

AWS DevOps
任务描述所需技能

克隆代码存储库。

运行以下命令,将 “ GitHub CodePipeline 不支持的区域” 存储库克隆到您的本地计算机。

git clone https://github.com/aws-samples/invisible-codepipeline-unsupported-regions
DevOps 工程师

在 cdk.json 中设置参数。

打开 cdk.json文件并为以下参数赋值:

"pipeline_account":"XXXXXXXXXXXX", "pipeline_region":"us-west-2", "repo_name": "app-dev-repo", "ec2_tag_key": "test-vm", "configName" : "cbdeployconfig", "deploymentGroupName": "cbdeploygroup", "applicationName" : "cbdeployapplication", "projectName" : "CodeBuildProject"

其中:

  • pipeline_account 是将在其中构建管道的 Amazon Web Services account。

  • pipeline_region 是将在其中构建管道的 AWS 区域。

  • repo_name是 CodeCommit 存储库的名称。

  • ec2_tag_key 是您要将代码部署到 EC2 实例上的标签。

  • configName是 CodeDeploy 配置文件的名称。

  • deploymentGroupName是 CodeDeploy 部署组的名称。

  • applicationName是 CodeDeploy 应用程序名称。

  • projectName是 CodeBuild 项目名称。

AWS DevOps

设置 AWS CDK 构造库。

在克隆的 GitHub 存储库中,使用以下命令安装 AWS CDK 构造库、构建您的应用程序并进行合成以生成应用程序的 AWS CloudFormation 模板。

npm i aws-cdk-lib npm run build cdk synth
AWS DevOps

部署示例 AWS CDK 应用程序

在不支持的区域(例如 af-south-1)中运行以下命令来部署代码。

cdk deploy
AWS DevOps
任务描述所需技能

为应用程序设置 CI/CD。

克隆您在cdk.json文件中指定的 CodeCommit 存储库(默认为该存储库app-dev-repo),为应用程序设置 CI/CD 管道。

git clone https://git-codecommit.us-west-2.amazonaws.com/v1/repos/app-dev-repo

其中,存储库名称和区域取决于您在 cdk.json 文件中提供的值。

AWS DevOps
任务描述所需技能

根据部署说明测试管道。

“ GitHub CodePipeline 不支持的区域” 存储库的CodeDeploy_Files文件夹包含指示部署应用程序 CodeDeploy 的示例文件。该appspec.yml文件是一个 CodeDeploy 配置文件,其中包含用于控制应用程序部署流程的挂钩。您可以使用示例文件 index.htmlstart_server.shstop_server.shinstall_dependencies.sh 来更新托管在 Apache 上的网站。这些都是示例,您可以使用 GitHub 存储库中的代码来部署任何类型的应用程序。当文件被推送到 CodeCommit 存储库时,会自动启动不可见的管道。有关部署结果,请在 CodeBuild 和 CodeDeploy 控制台中查看各个阶段的结果。

AWS DevOps

相关资源