使用 AWS CodePipeline 自动部署项目到 EC2

AWS CodePipeline 是一项 AWS 服务,用于自动化和协调构建、测试和部署代码更改。它提供了一个持续交付和持续集成的解决方案,可帮助团队更快、更可靠地交付应用程序。有助于提高交付速度、减少错误,同时保持一致性和可靠性。本文以持续部署 Apache 项目代码到 EC2 为例,介绍了使用 CodePipeline 的基本步骤。
1. 创建 CodeCommit 代码仓库,并推送本地数据到远程仓库
在 CodeCommit 中创建代码仓库 aws-codepipeline-demo。

然后使用如下命令,将代码仓库克隆到本地。关于下载代码仓库时用到的凭证,可以参考链接给出的步骤进行配置。
我们以在目标 EC2 服务器部署和启动 httpd 服务为例,进入下载的仓库 aws-codepipeline-demo,创建如下目录结构以及内容。其中,appspec.yml 定义了 CodeDeploy 服务使用的配置,scripts 文件夹的脚本为 CodeDeploy 使用到的脚本。

然后使用下述命令将内容推送到代码仓库:
push 代码成功后,从 CodeCommit 控制台可以看到已经上传的代码。

2. 创建 EC2 实例,用于部署仓库代码
首先创建一个实例角色,允许在实例上安装和管理 CodeDeploy Agent。选择 Trusted entity type 为 Amazon Web Services service,Use case 选用 EC2,然后下一步进行策略配置;为了方便测试,选用托管的策略 AmazonEC2RoleforAWSCodeDeploy
和 AmazonSSMManagedInstanceCore
,为角色起名为 CodeDeployRoleForEC2。


角色创建成功后,开始创建用于部署项目代码的 EC2 实例。创建 EC2 实例时,为了测试方便,将实例启动在公有子网中,并为实例自动分配公有 IP;安全组选择放行本地 ip 的所有流量,最后为实例配置角色 CodeDeployRoleForEC2。成功启动后的实例(Name=CodePipelineToEC2Demo)的信息如下:

3. 在 CodeDeploy 中创建应用程序
在 CodeDeploy 中,应用程序包含了要部署的软件应用程序的资源。通过 CodePipeline 可将应用程序代码自动部署到 Amazon EC2 实例。接下来在 CodeDeploy 中创建相关资源。
创建 CodeDeploy 服务角色
与为 EC2 配置角色时创建角色步骤相同,这里需要创建可信实体为 CodeDeploy 的角色,同时将AWSCodeDeployRole
托管策略附加到角色,这里创建的角色名称为 CodeDeployRole。

在 CodeDeploy 中创建应用程序
创建名为 DeplytoEC2-Demo 的应用。Compute Platform 选择 EC2/On-premises。

在 CodeDeploy 中创建部署组
创建好应用后,在此应用中创建部署组。部署组定义了与部署相关的设置,比如部署到哪些实例以及部署的快慢。如下图所示,创建名为 DeplytoEC2-Demo-Group 的部署组,服务角色选择创建好的 CodeDeployRole,部署类型选用 In-place,环境配置选用之前创建好的 EC2 实例,注意选中实例的 Name=CodePipelineToEC2Demo 标签。Agent configuration 选择 Now and schedule updates,部署配置选择 CodeDeployDefault.OneAtaTime,不选择启用负载均衡配置。



4. 在 CodePipeline 中创建 Pipeline
现在开始创建并运行 Pipeline。在此步骤中,创建一个自动将 CodeCommit 存储库中代码推送到目标服务器的 Pipeline。按照如下步骤进行创建。
定义 Pipeline 名称为 CodeDeployToEc2Pipeline,Pipeline 类型选择 V2,服务角色为允许新建角色。

下一步在 Source Stage 中选择 Source provider 为 Amazon CodeCommit,仓库名称选择之前创建好的 aws-codepipeline-demo,分支选择main
主分支。Change detection 选用推荐默认的配置。

跳过 build stage,进入步骤 deploy stage,Deploy provider 选择 Amazon CodeDeploy,Application name 选择之前创建好的 DeploytoEC2-Demo,部署组选择 DeploytoEC2-Demo-Group。然后下一步检查所有配置,确认没有问题后创建 Pipeline。

创建完成后,Pipeline 进入运行状态。

部署完成后,可以访问实例 ip 即可检查部署情况。

5. 修改仓库代码并提交代码,检验 Pipeline
在命令行执行如下操作,然后观察自动部署情况。从下图可以看到提交代码后,会触发自动部署 Pipeline,部署完成后,访问实例 ip,即可看到页面发生变化。


以上就是使用 AWS CodePipeline 创建自动部署项目到 EC2 的基本流程。
祝愿世界和平,Peace and Love。

评论