实战AWS CodeDeploy实现自动化应用程序部署到EC2实例组

一 概览

通过实验室模板配置的两个 Amazon Elastic Compute Cloud (Amazon EC2) 部署示例服务应用程序。使用 AWS CodeDeploy 将软件推送到 Amazon EC2 实例队列,并自动部署、注册和启动软件。

二 目标

  • 使用 CodeDeploy 对 EC2 服务器队列进行系统部署。
  • 验证 CodeDeploy 代理是否已安装并在 Windows服务器上运行。
  • 创建 CodeDeploy 应用程序和部署组
  • 查看并准备一个部署程序包以供 CodeDeploy 安装。
  • 监控 CodeDeploy 中的部署状态和部署目标。

三 架构图

四 实战

4.1 查看服务

4.1.1 查看运行实例

HeartBeat-Instance用作 CodeDeploy 代理的部署目标。

4.1.2 查看 CODEDEPLOY 代理是否正在运行

在windows powershell cli运行:`

Plaintext 复制代码
powershell.exe -Command Get-Service -Name codedeployagent

4.1.3 查看 CODEDEPLOY 服务角色的权限

4.1.4 创建 CodeDeploy 应用程序和部署组

4.1.5 创建部署组

4.2 查看要部署的应用程序捆绑包

CodeDeploy 要求部署应用程序。我们为您提供了用于此实验室的示例应用程序。对于此任务,您将使用 AwS cloudy 下载并准备代码捆绑包,用于分配到您在本实验前面部分中启动的 Windows EC2 实例。

您的示例应用程序是什么?示例应用程序是一个名为 Heartbeat 的 Windows 应用程序服务。它会定期将心跳信号消息写入日志文件,还会在其从停止状态转换到运行状态并再次回到停止状态时写入有关其运行状态的详细信息。在部署过程中, CodeDeploy 代理使用 appspec.yml 文件中的映射和挂钩,以确定要使用修订版中的哪些脚本和文件部署到 EC2 实例。

4.2.1 连接到开发环境(AWS CLOUD9 IDE)

eu-west-1.console.aws.amazon.com/cloud9/ide/...

4.2.2 查看 APPSPEC.YML 文件

appspecyml 文件概述了 .zip 归档中包含的每个源文件,并指定了目标 EC2 实例上应存储文件的目标位置。此实施仅使用两个生命周期挂钩(ApplicationStop 和 Afterinstall),但如果使用案例需要,您可以使用更多挂钩。对于本实验, PowerShell 脚本(也包含在.zip 文件存档中)用于停止并取消注册 Windows 服务(如果已安装)。复制所有文件后,它将注册并启动服务,然后将 wintail 帮助程序移动到适当位置以帮助查看日志文件。

YAML 复制代码
version: 0.0
os: windows
files:
  - source: Heartbeat.dll
    destination: c:\HeartbeatService
  - source: HeartbeatService.exe
    destination: c:\HeartbeatService
  - source: HeartbeatService.exe.config
    destination: c:\HeartbeatService
  - source: log4net.dll
    destination: c:\HeartbeatService
  - source: Logger.dll
    destination: c:\HeartbeatService
  - source: wintail.exe
    destination: c:\temp

hooks:
  ApplicationStop:
    - location: uninstall.ps1
      timeout: 30
  AfterInstall:
    - location: install.ps1
      timeout: 30
    - location: copywintail.ps1
      timeout: 30

4.3 部署应用程序捆绑包

CodeDeploy 要求将部署构件存储在 Amazon S3 存储桶中。在此任务中,您将使用 AWS命令行界面(AWSCL) 创建存储桶。

4.3.1 Cli创建存储桶

Plaintext 复制代码
bucketName=heartbeat-codedeploy-artifacts-[your-initials]-[your-postal-code]

注意 :存储桶名称不能 包含大写字母。

4.3.2 将应用程序部署到 CODEDEPLOY 目标

部署命令

Shell 复制代码
# 为了捆绑文件、将修订版推送到您在上一步中创建的S3 存储桶并使用 CodeDeploy 注册信息,请运行以下命令:
aws deploy push --application-name HeartBeatProduction-App --source HeartBeat-App --s3-location s3://$bucketName/HeartBeat-App.zip
# 要将您先前创建的 Amazon S3 存储桶中的应用程序修订版部署到目标(Amazon EC2) 实例,请运行以下命令:
aws deploy create-deployment --application-name HeartBeatProduction-App --deployment-group-name HeartBeatProduction-App-Group --deployment-config-name CodeDeployDefault.AllAtOnce --description "Initial Deployment" --s3-location bucket=$bucketName,key=HeartBeat-App.zip,bundleType=zip

4.3.3 监控您的部署状态

  • 查看事件

4.3.4 查看部署目标

Plaintext 复制代码
Service "AWSHeartbeat*"
Shell 复制代码
Content C:\Logs\HeartBeatService.log -last 10

4.4 使用codeDeploy重新部署应用程序

Plaintext 复制代码
cd ~/environment/Updated-HeartBeat-App
echo $bucketName
aws deploy push --application-name HeartBeatProduction-App --source HeartBeat-App --s3-location s3://$bucketName/HeartBeat-App.zip

aws deploy create-deployment --application-name HeartBeatProduction-App --deployment-group-name HeartBeatProduction-App-Group --deployment-config-name CodeDeployDefault.AllAtOnce --description "Updated Deployment" --s3-location bucket=$bucketName,key=HeartBeat-App.zip,bundleType=zip

4.4.1 查看部署任务

五 总结

AWS CodeDeploy是一项强大的服务,可实现自动化将应用程序部署到EC2实例组。通过创建EC2实例组、配置应用程序、创建应用程序部署、配置部署设置、创建部署组和触发应用程序部署等步骤,我们可以轻松地管理应用程序的部署过程。AWS CodeDeploy提供了可靠性和灵活性,能够自动将代码包下载到每个实例,并执行部署操作。在部署过程中,我们可以监控每个实例的状态和日志信息,及时发现和解决问题。借助AWS CodeDeploy,我们可以减少人工操作和减少人为错误的风险,从而实现高效、一致和可重复的应用程序部署。

相关推荐
AWS官方合作商9 小时前
Amazon Lex:AI对话引擎重构企业服务新范式
人工智能·ai·机器人·aws
Anna_Tong17 小时前
阿里云 ACS:高效、弹性、低成本的容器计算解决方案
人工智能·阿里云·容器·kubernetes·serverless·云计算·devops
佛州小李哥17 小时前
亚马逊文生图AI模型深度体验+评测(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
ITPUB-微风21 小时前
网易严选DevOps实践:从传统到云原生的演进
运维·云原生·devops
{⌐■_■}1 天前
【gitlab】认识 持续集成与部署
ci/cd·log4j·gitlab
Karoku0661 天前
【CI/CD】Jenkinsfile管理+参数化构建+邮件通知以及Jenkins + SonarQube 代码审查
运维·ci/cd·容器·kubernetes·jenkins·rancher
Incredibuild2 天前
深入了解 DevOps 基础架构:可追溯性的关键作用
ci/cd·devops
炸鸡物料库2 天前
Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警
运维·云原生·kubernetes·飞书·prometheus·devops
ITPUB-微风2 天前
云原生DevOps:Zadig架构设计与企业实践分析
运维·云原生·devops
Karoku0662 天前
【CI/CD】持续集成及 Jenkins
运维·ci/cd·docker·云原生·容器·kubernetes·jenkins