AWS CodeDeploy
User Guide (API Version 2014-10-06)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

教程:使用 AWS CodeDeploy 将应用程序部署到本地实例(Windows Server、Ubuntu Server 或 Red Hat Enterprise Linux)

本教程引导您完成将示例应用程序修订部署到运行 Windows Server、Ubuntu Server 或 Red Hat Enterprise Linux (RHEL) 的单个本地实例(即非 Amazon EC2 实例的物理设备)的过程,帮助您获得使用 AWS CodeDeploy 的经验。有关本地实例以及如何将它们与 AWS CodeDeploy 一起使用的信息,请参阅Working with On-Premises Instances

不是您要找的内容?

本教程建立在在 AWS CodeDeploy 中尝试示例就地部署中介绍的概念的基础之上。如果您尚未完成就地部署的 Sample deployment wizard,可能需要先完成它。

先决条件

在开始此教程之前,您必须完成AWS CodeDeploy 入门中的先决条件,包括配置 IAM 用户、安装或升级 AWS CLI 以及创建服务角色。您无需按照先决条件中的所述创建 IAM 实例配置文件。本地实例不使用 IAM 实例配置文件。

您将配置作为本地实例的物理设备必须运行AWS CodeDeploy 代理支持的操作系统 中列出的操作系统之一。

步骤 1:配置本地实例

您必须先配置本地实例,然后才能在其中进行部署。按照Working with On-Premises Instances中的说明操作,然后返回此页。

步骤 2:创建示例应用程序修订

在这一步中,您将创建要部署到本地实例的示例应用程序修订。

由于很难了解您的本地实例上已经安装了哪些软件和功能或者您的组织策略允许安装哪些软件和功能,因此,我们这里提供的示例应用程序修订仅仅使用批处理脚本(对于 Windows Server)或 shell 脚本(对于 Ubuntu Server 和 RHEL),将文本文件写入到您本地实例上的某个位置。对于多个 AWS CodeDeploy 部署生命周期事件,每个事件写入一个文件,包括 InstallAfterInstallApplicationStartValidateService。在 BeforeInstall 部署生命周期事件中,将运行一个脚本来删除此示例在先前部署中写入的旧文件,并在您的本地实例上创建一个位置用于写入新文件。

注意

如果出现以下任何情况,此示例应用程序修订可能无法部署:

  • 在本地实例上启动 AWS CodeDeploy 代理的用户账户无权执行脚本。

  • 用户账户无权在脚本中列出的位置创建或删除文件夹。

  • 用户账户无权在脚本中列出的位置创建文本文件。

注意

如果您配置了 Windows Server 实例并希望部署其他示例,则可能需要使用 教程:使用 部署“Hello, World!”应用程序 AWS CodeDeploy (Windows Server)教程的 步骤 2:将您的源内容配置为部署到 Windows Server Amazon EC2 实例中的示例。

如果您配置了 RHEL 实例并希望部署其他示例,则可能需要使用 教程:将 WordPress 部署到 Amazon EC2 实例(Amazon Linux 或 Red Hat Enterprise Linux 和 Linux, OS X, or Unix)教程的步骤 2:配置要部署到 Amazon Linux 或 Red Hat Enterprise Linux Amazon EC2 实例的源内容中的示例。

目前,Ubuntu Server 没有替代示例。

  1. 在您的开发计算机上,创建名为 CodeDeployDemo-OnPrem 的子目录 (子文件夹) 来存储示例应用程序修订的文件,然后切换到该子文件夹。对于此示例,我们假定您使用 c:\temp 文件夹作为 Windows Server 的根文件夹,或者使用 /tmp 文件夹作为 Ubuntu Server 和 RHEL 的根文件夹。如果您使用其他文件夹,请务必在整个教程中使用该文件夹取代我们提供的文件夹:

    对于 Windows:

    mkdir c:\temp\CodeDeployDemo-OnPrem cd c:\temp\CodeDeployDemo-OnPrem

    对于 Linux, OS X, or Unix:

    mkdir /tmp/CodeDeployDemo-OnPrem cd /tmp/CodeDeployDemo-OnPrem
  2. CodeDeployDemo-OnPrem 子文件夹的根中,使用文本编辑器创建两个分别名为 appspec.ymlinstall.txt 的文件:

    appspec.yml (对于 Windows Server):

    version: 0.0 os: windows files: - source: .\install.txt destination: c:\temp\CodeDeployExample hooks: BeforeInstall: - location: .\scripts\before-install.bat timeout: 900 AfterInstall: - location: .\scripts\after-install.bat timeout: 900 ApplicationStart: - location: .\scripts\application-start.bat timeout: 900 ValidateService: - location: .\scripts\validate-service.bat timeout: 900

    appspec.yml (对于 Ubuntu Server 和 RHEL):

    version: 0.0 os: linux files: - source: ./install.txt destination: /tmp/CodeDeployExample hooks: BeforeInstall: - location: ./scripts/before-install.sh timeout: 900 AfterInstall: - location: ./scripts/after-install.sh timeout: 900 ApplicationStart: - location: ./scripts/application-start.sh timeout: 900 ValidateService: - location: ./scripts/validate-service.sh timeout: 900

    有关 AppSpec 文件的更多信息,请参阅将应用程序规范文件添加到 AWS CodeDeploy 的修订AWS CodeDeploy AppSpec File参考

    install.txt

    The Install deployment lifecycle event successfully completed.
  3. CodeDeployDemo-OnPrem 子文件夹的根下,创建 scripts 子文件夹,然后切换到该子文件夹:

    对于 Windows:

    mkdir c:\temp\CodeDeployDemo-OnPrem\scripts cd c:\temp\CodeDeployDemo-OnPrem\scripts

    对于 Linux, OS X, or Unix:

    mkdir -p /tmp/CodeDeployDemo-OnPrem/scripts cd /tmp/CodeDeployDemo-OnPrem/scripts
  4. scripts 子文件夹的根中,使用文本编辑器为 Windows Server 创建四个分别名为 before-install.batafter-install.batapplication-start.batvalidate-service.bat 的文件,或为 Ubuntu Server 和 RHEL 创建四个分别名为 before-install.shafter-install.shapplication-start.shvalidate-service.sh 的文件:

    对于 Windows Server:

    before-install.bat

    set FOLDER=%HOMEDRIVE%\temp\CodeDeployExample if exist %FOLDER% ( rd /s /q "%FOLDER%" ) mkdir %FOLDER%

    after-install.bat

    cd %HOMEDRIVE%\temp\CodeDeployExample echo The AfterInstall deployment lifecycle event successfully completed. > after-install.txt

    application-start.bat

    cd %HOMEDRIVE%\temp\CodeDeployExample echo The ApplicationStart deployment lifecycle event successfully completed. > application-start.txt

    validate-service.bat

    cd %HOMEDRIVE%\temp\CodeDeployExample echo The ValidateService deployment lifecycle event successfully completed. > validate-service.txt

    对于 Ubuntu Server 和 RHEL:

    before-install.sh

    #!/bin/bash export FOLDER=/tmp/CodeDeployExample if [ -d $FOLDER ] then rm -rf $FOLDER fi mkdir -p $FOLDER

    after-install.sh

    #!/bin/bash cd /tmp/CodeDeployExample echo "The AfterInstall deployment lifecycle event successfully completed." > after-install.txt

    application-start.sh

    #!/bin/bash cd /tmp/CodeDeployExample echo "The ApplicationStart deployment lifecycle event successfully completed." > application-start.txt

    validate-service.sh

    #!/bin/bash cd /tmp/CodeDeployExample echo "The ValidateService deployment lifecycle event successfully completed." > validate-service.txt unset FOLDER
  5. 仅对于 Ubuntu Server 和 RHEL,确保四个 shell 脚本具有执行权限:

    chmod +x ./scripts/*

步骤 3:打包并将您的应用程序修订上传到 Amazon S3

在部署应用程序修订之前,您需要打包文件,然后将文件包上传到 Amazon S3 存储桶。按照使用 AWS CodeDeploy 创建应用程序将 AWS CodeDeploy 的修订推送到 Amazon S3中的说明操作。(虽然您可以为应用程序和部署组提供任意名称,不过我们建议您使用 CodeDeploy-OnPrem-App 作为应用程序名称,并使用 CodeDeploy-OnPrem-DG 作为部署组名称。)在您完成这些指示的操作之后,返回本页。

注意

或者,您可以将文件包上传到 GitHub 存储库并从该位置部署。有关更多信息,请参阅 将 AWS CodeDeploy 与 GitHub 集成

步骤 4:部署应用程序修订

在您将应用程序修订上传到 Amazon S3 存储桶之后,尝试将其部署到本地实例。按照使用 AWS CodeDeploy 创建部署中的说明操作,然后返回此页。

步骤 5:验证您的部署

要验证部署已经成功,请按照使用 AWS CodeDeploy 查看部署详细信息中的说明操作,然后返回本页。

如果部署已成功,您将在 c:\temp\CodeDeployExample 文件夹 (对于 Windows Server) 或 /tmp/CodeDeployExample 文件夹 (对于 Ubuntu Server 和 RHEL) 中找到四个文本文件。

如果部署失败,请按照View Instance Details解决实例问题中的排除故障步骤操作。进行任何必要的修复,重新打包并上传应用程序修订,然后再次尝试部署。

步骤 6:清除资源

为避免对您为此教程创建的资源继续收费,请删除您不再使用的 Amazon S3 存储桶。您还可以清除关联的资源,例如 AWS CodeDeploy 中的应用程序和部署组记录,以及本地实例。

您可以使用 AWS CLI 或结合使用 AWS CodeDeploy 和 Amazon S3 控制台及 AWS CLI 来清除资源。

清除资源 (CLI)

删除 Amazon S3 存储桶

  • 对存储桶 (例如,codedeploydemobucket) 调用 rm 命令以及 --recursive 开关。该存储桶及存储桶中的所有对象将被删除。

    aws s3 rm s3://your-bucket-name --recursive

删除 AWS CodeDeploy 中的应用程序和部署组记录

  • 对应用程序(例如,CodeDeploy-OnPrem-App)调用 delete-application 命令。将删除部署和部署组的记录。

    aws deploy delete-application --application-name your-application-name

注销本地实例并删除 IAM 用户

  • 对本地实例和区域调用 deregister 命令:

    aws deploy deregister --instance-name your-instance-name --delete-iam-user --region your-region

    注意

    如果您不希望删除与此本地实例关联的 IAM 用户,请改为使用 --no-delete-iam-user 选项。

卸载 AWS CodeDeploy 代理并从本地实例中删除配置文件

  • 从本地实例调用 uninstall 命令:

    aws deploy uninstall

现在您已完成清除此教程所用资源的全部步骤。

清除资源(控制台)

删除 Amazon S3 存储桶

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 选择要删除的存储桶旁边的图标(例如,codedeploydemobucket),但不要选择存储桶本身。

  3. 选择 Actions,然后选择 Delete

  4. 在提示删除存储桶时,选择 OK

删除 AWS CodeDeploy 中的应用程序和部署组记录

  1. Sign in to the AWS 管理控制台 and open the AWS CodeDeploy console at https://console.amazonaws.cn/codedeploy.

    注意

    Sign in with the same account or IAM user information you used in AWS CodeDeploy 入门.

  2. 如果未显示应用程序列表,请在 AWS CodeDeploy 菜单上选择 Applications

  3. 选择要删除的应用程序的名称(例如,CodeDeploy-OnPrem-App)。

  4. Application details 页的底部,选择 Delete application

  5. 在系统提示时,键入应用程序的名称以确认要删除此应用程序,然后选择 Delete

您不能使用 AWS CodeDeploy 控制台来注销本地实例或者卸载 AWS CodeDeploy 代理。按照注销本地实例并删除 IAM 用户 中的说明进行操作。