AWS CodeDeploy
User Guide (API Version 2014-10-06)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 register-on-premises-instance 命令 (IAM 用户 ARN) 注册本地实例

按以下说明,配置本地实例并主要靠自己通过 AWS CodeDeploy 注册该实例并为其添加标签,同时使用静态 IAM 用户凭证进行身份验证。

步骤 1:为本地实例创建 IAM 用户

创建本地实例用来与 AWS CodeDeploy 进行身份验证和交互的 IAM 用户。

重要

您必须为每个参与的本地实例创建单独的 IAM 用户。如果您尝试对多个本地实例重用单个 IAM 用户,则您可能无法成功使用 AWS CodeDeploy 注册或标记这些本地实例。对这些本地实例的部署可能会停滞在永久等待的状态或完全失败。

我们建议为 IAM 用户分配一个标识其用途的名称,例如 CodeDeployUser-OnPrem。

您可以使用 AWS CLI 或 IAM 控制台创建 IAM 用户。有关信息,请参阅 在您的 AWS 账户中创建 IAM 用户

重要

无论您使用 AWS CLI 还是 IAM 控制台创建新的 IAM 用户,请记录为该用户提供的用户 ARN。稍后在步骤 4:将配置文件添加到本地实例步骤 8:将本地实例注册到 AWS CodeDeploy中您将需要此信息。

步骤 2:向 IAM 用户分配权限

如果您的本地实例将从 Amazon S3 存储桶部署应用程序修订,则您必须向 IAM 用户分配权限来与这些存储桶交互。您可以使用 AWS CLI 或 IAM 控制台分配权限。

注意

如果您仅从 GitHub 存储库部署应用程序修订,则跳过此步骤,直接转到步骤 3:获取 IAM 用户凭证。(您仍将需要有关先前在步骤 1:为本地实例创建 IAM 用户 中创建的 IAM 用户的信息。后面的步骤中将用到此信息。)

分配权限 (CLI)

  1. 在您用于调用 AWS CLI 的 Amazon EC2 实例或设备上创建包含以下策略内容的文件。采用类似于 CodeDeploy-OnPrem-Permissions.json 的格式对文件命名,然后保存文件。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] }

    注意

    我们建议您将此策略限制为您的本地实例需要访问的那些 Amazon S3 存储桶。如果您限制此策略,请确保还向包含 AWS CodeDeploy 代理的 Amazon S3 存储桶提供了访问权限。否则,只要在关联的本地实例上安装或更新 AWS CodeDeploy 代理,就可能出现错误。例如:

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::codedeploydemobucket/*", "arn:aws:s3:::aws-codedeploy-us-east-1/*", "arn:aws:s3:::aws-codedeploy-us-east-2/*", "arn:aws:s3:::aws-codedeploy-us-west-1/*", "arn:aws:s3:::aws-codedeploy-us-west-2/*", "arn:aws:s3:::aws-codedeploy-ca-central-1/*", "arn:aws:s3:::aws-codedeploy-eu-west-1/*", "arn:aws:s3:::aws-codedeploy-eu-west-2/*", "arn:aws:s3:::aws-codedeploy-eu-central-1/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*", "arn:aws:s3:::aws-codedeploy-ap-south-1/*", "arn:aws:s3:::aws-codedeploy-sa-east-1/*", "arn:aws-cn:s3:::aws-codedeploy-cn-north-1/*" ] } ] }
  2. 调用 put-user-policy 命令,在命令中指定 IAM 用户的名称 (使用 --user-name 选项)、策略的名称 (使用 --policy-name 选项) 和新创建策略文档的路径 (使用 --policy-document 选项)。例如,假设 CodeDeploy-OnPrem-Permissions.json 文件位于您调用此命令时所在的同一个目录 (文件夹) 中:

    重要

    务必在文件名前包含 file://。此命令中需要该项。

    Copy
    aws iam put-user-policy --user-name CodeDeployUser-OnPrem --policy-name CodeDeploy-OnPrem-Permissions --policy-document file://CodeDeploy-OnPrem-Permissions.json

分配权限(控制台)

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中选择 Policies,然后选择 Create Policy。(如果 Get Started 按钮出现,选择此按钮,然后选择 Create Policy。)

  3. Create Your Own Policy 旁,选择 Select

  4. Policy Name 框中,键入此策略的名称(例如,CodeDeploy-OnPrem-Permissions)。

  5. Policy Document 框中,键入或粘贴以下权限表达式,这允许 AWS CodeDeploy 代表 IAM 用户账户从策略中指定的任意 Amazon S3 存储桶向本地实例部署应用程序修订:

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] }
  6. 选择 Create Policy

  7. 在导航窗格中,选择 Users

  8. 在用户列表中,浏览并选择在步骤 1:为本地实例创建 IAM 用户 中创建的 IAM 用户的名称。

  9. Permissions 选项卡上的 Managed Policies 中,选择 Attach Policy

  10. 选择名为 CodeDeploy-OnPrem-Permissions 的策略,然后选择 Attach Policy

步骤 3:获取 IAM 用户凭证

获取 IAM 用户的私有密钥 ID 和秘密访问密钥。您在步骤 4:将配置文件添加到本地实例 中需要使用它们。您可以使用 AWS CLI 或 IAM 控制台获取私有密钥 ID 和秘密访问密钥。

注意

如果您已具有私有密钥 ID 和秘密访问密钥,则跳过这一步,直接转到步骤 4:将配置文件添加到本地实例

获取凭证 (CLI)

  1. 调用 list-access-keys 命令,在命令中指定 IAM 用户的名称 (使用 --user-name 选项) 并仅查询访问密钥 ID (使用 --query--output 选项)。例如:

    Copy
    aws iam list-access-keys --user-name CodeDeployUser-OnPrem --query "AccessKeyMetadata[*].AccessKeyId" --output text
  2. 如果输出中未显示密钥或者输出中只显示一个密钥的相关信息,则调用 create-access-key 命令,在命令中指定 IAM 用户的名称 (使用 --user-name 选项):

    Copy
    aws iam create-access-key --user-name CodeDeployUser-OnPrem

    在调用 create-access-key 命令的输出中,记录 AccessKeyIdSecretAccessKey 字段的值。在步骤 4:将配置文件添加到本地实例 中您将需要此信息。

    重要

    这是您仅有的一次查看此秘密访问密钥的机会。如果您忘记或丢失了此秘密访问密钥,则需要按照步骤 3:获取 IAM 用户凭证 中的步骤生成新的密钥。

  3. 如果已经列出了两个访问密钥,则您必须删除其中之一,方法是调用 delete-access-key 命令,并在命令中指定 IAM 用户的名称 (使用 --user-name 选项) 以及要删除的访问密钥的 ID (使用 --access-key-id 选项)。然后调用 create-access-key 命令,如此步骤中前面所述。下面是一个调用 delete-access-key 命令的示例:

    Copy
    aws iam delete-access-key --user-name CodeDeployUser-OnPrem --access-key-id access-key-ID

    重要

    如果您调用 delete-access-key 命令删除这些访问密钥之一,并且本地实例已经按步骤 4:将配置文件添加到本地实例 中所述使用此访问密钥,则您需要再次按照步骤 4:将配置文件添加到本地实例中的说明操作,指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则,对该本地实例的任何部署可能会停滞在永久等待的状态或完全失败。

获取凭证(控制台)

    1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

    2. 如果用户的列表未显示,则在导航窗格中选择 Users

    3. 在用户列表中,浏览并选择在步骤 1:为本地实例创建 IAM 用户 中创建的 IAM 用户的名称。

  1. Security credentials 选项卡上,如果没有列出密钥或仅列出了一个密钥,请选择 Create access key

    如果列出了两个访问密钥,则必须删除其中之一。选择其中一个访问密钥旁边的 Delete,然后选择 Create access key

    重要

    如果您选择这些访问密钥之一旁边的 Delete,并且本地实例已经按步骤 4:将配置文件添加到本地实例 中所述使用此访问密钥,则您需要再次按照步骤 4:将配置文件添加到本地实例 中的说明操作,指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则,对该本地实例的部署可能会停滞在永久等待的状态或完全失败。

  2. 选择 Show 并记录访问密钥 ID 和秘密访问密钥。您在下一步中需要此信息。或者,您可以选择 Download .csv file 来保存访问密钥 ID 和秘密访问密钥的副本。

    重要

    除非您记录或下载了凭证,否则这是您仅有的一次查看此秘密访问密钥的机会。如果您忘记或丢失了此秘密访问密钥,则需要按照步骤 3:获取 IAM 用户凭证 中的步骤生成新的密钥。

  3. 选择 Close 返回 Users > IAM User Name 页面。

步骤 4:将配置文件添加到本地实例

使用 root 或管理员权限将配置文件添加到本地实例。此配置文件用于声明将为 AWS CodeDeploy 使用的 IAM 用户凭证和目标 AWS 区域。该文件必须添加到本地实例上的特定位置。文件必须包括 IAM 用户的 ARN、私有密钥 ID、秘密访问密钥和目标 AWS 区域。该文件必须遵循特定格式。

  1. 在本地实例上的以下位置,创建名为 codedeploy.onpremises.yml(用于 Ubuntu Server 或 RHEL 本地实例)或 conf.onpremises.yml 的文件(用于 Windows Server 本地实例):

    • 对于 Ubuntu Server:/etc/codedeploy-agent/conf

    • 对于 Windows Server:C:\ProgramData\Amazon\CodeDeploy

  2. 使用文本编辑器,向新创建的 codedeploy.onpremises.ymlconf.onpremises.yml 文件添加以下信息:

    Copy
    --- aws_access_key_id: secret-key-id aws_secret_access_key: secret-access-key iam_user_arn: iam-user-arn region: supported-region

    其中:

    重要

    如果您在步骤 3:获取 IAM 用户凭证 中选择了其中一个访问密钥旁边的 Delete,并且您的本地实例已经使用关联的访问密钥 ID 和秘密访问密钥,那么就需要按照步骤 4:将配置文件添加到本地实例 中的说明操作,指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则,对您的本地实例的任何部署可能会停滞在永久等待的状态或完全失败。

步骤 5:安装和配置 AWS CLI

在本地实例上安装和配置 AWS CLI(AWS CLI 将在步骤 7:安装 AWS CodeDeploy 代理 中用于在本地实例上下载和安装 AWS CodeDeploy 代理。)

  1. 要在本地实例上安装 AWS CLI,请按照 AWS 命令行界面用户指南使用 AWS命令行界面进行设置中的说明执行操作。

    注意

    1.7.19 版 AWS CLI 中提供了用于处理本地实例的 AWS CodeDeploy 命令。如果您已经安装了 AWS CLI 版本,则可以调用 aws --version 来检查其版本。

  2. 要在本地实例上配置 AWS CLI,请按照 AWS 命令行界面用户指南配置 AWS 命令行界面中的说明执行操作。

    重要

    在您配置 AWS CLI(例如,通过调用 aws configure 命令)时,请确保指定 IAM 用户的私有密钥 ID 和秘密访问密钥,并且除了在配置本地实例的先决条件中指定的访问权限之外,该用户还必须至少具有以下 AWS 访问权限。这使您能够在本地实例上下载和安装 AWS CodeDeploy 代理:

    Copy
    { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:*" ], "Resource" : "*" }, { "Effect" : "Allow", "Action" : [ "s3:Get*", "s3:List*" ], "Resource" : [ "arn:aws:s3:::aws-codedeploy-us-east-1/*", "arn:aws:s3:::aws-codedeploy-us-east-2/*", "arn:aws:s3:::aws-codedeploy-us-west-1/*", "arn:aws:s3:::aws-codedeploy-us-west-2/*", "arn:aws:s3:::aws-codedeploy-ca-central-1/*", "arn:aws:s3:::aws-codedeploy-eu-west-1/*", "arn:aws:s3:::aws-codedeploy-eu-west-2/*", "arn:aws:s3:::aws-codedeploy-eu-central-1/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*", "arn:aws:s3:::aws-codedeploy-ap-south-1/*", "arn:aws:s3:::aws-codedeploy-sa-east-1/*", "arn:aws-cn:s3:::aws-codedeploy-cn-north-1/*" ] } ] }

    这些访问权限可以分配到您在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户或者其他 IAM 用户。要将这些权限分配给 IAM 用户,请按照步骤 1:为本地实例创建 IAM 用户 中的说明操作,并使用这些访问权限而不是该步骤中的权限。

步骤 6:设置 AWS_REGION 环境变量(仅针对 Ubuntu Server 和 RHEL)

如果您的本地实例上没有运行 Ubuntu Server 或 RHEL,则跳过此步骤,直接转到步骤 7:安装 AWS CodeDeploy 代理

在 Ubuntu Server 或 RHEL 本地实例上安装 AWS CodeDeploy 代理,并让实例能够在发布新版本时及时更新 AWS CodeDeploy 代理。为此,您可以将实例上的 AWS_REGION 环境变量设置为 AWS CodeDeploy 支持的某个区域的标识符。我们建议您将区域的值设置为您的 AWS CodeDeploy 应用程序、部署组和应用程序修订所在的区域(例如,us-west-2)。有关区域列表,请参阅 AWS General Reference 中的区域和终端节点

要设置环境变量,请从终端调用以下命令:

Copy
export AWS_REGION=supported-region

其中 supported-region 是区域标识符(例如,us-west-2)。

步骤 7:安装 AWS CodeDeploy 代理

在本地实例上安装 AWS CodeDeploy 代理:

步骤 8:将本地实例注册到 AWS CodeDeploy

这一步中的说明假设您从本地实例本身上注册该本地实例。您还可以从安装和配置了 AWS CLI 的其他设备或实例上注册本地实例,如步骤 5:安装和配置 AWS CLI中所述。

使用 AWS CLI 将本地实例注册到 AWS CodeDeploy,以便可以在部署中使用该实例。

  1. 使用 AWS CLI 之前,您需要在步骤 1:为本地实例创建 IAM 用户 中创建的 IAM 用户的用户 ARN。如果您还没有用户 ARN,请调用 get-user 命令,在命令中指定 IAM 用户的名称 (使用 --user-name 选项) 并仅查询用户 ARN (使用 --query--output 选项):

    Copy
    aws iam get-user --user-name CodeDeployUser-OnPrem --query "User.Arn" --output text
  2. 调用 register-on-premises-instance 命令,在命令中指定:

    • 唯一标识本地实例的名称 (使用 --instance-name 选项)。

      重要

      为了帮助标识本地实例,特别是用于调试用途,我们强烈建议您指定能够反映本地实例的某种唯一特性的名称 (例如,在适用时可以指定序列号或内部资产标识符)。如果您指定 MAC 地址作为名称,请注意 MAC 地址包含 AWS CodeDeploy 不允许使用的字符,例如冒号 (:)。有关允许字符的列表,请参阅限制

    • 您在 步骤 1:为本地实例创建 IAM 用户 中创建的 IAM 用户的用户 ARN (使用 --iam-user-arn 选项)。

      例如:

      Copy
      aws deploy register-on-premises-instance --instance-name AssetTag12010298EX --iam-user-arn arn:aws:iam::80398EXAMPLE:user/CodeDeployUser-OnPrem

步骤 9:标记本地实例

您可以使用 AWS CLI 或 AWS CodeDeploy 控制台标记本地实例。(在部署期间,AWS CodeDeploy 使用本地实例标签来标识部署目标。)

标记本地实例 (CLI)

  • 调用 add-tags-to-on-premises-instances 命令,在命令中指定:

    • 唯一标识本地实例的名称 (使用 --instance-names 选项)。

    • 您要使用的本地实例标签密钥的名称和标签值 (使用 --tags 选项)。您必须同时指定名称和值。AWS CodeDeploy 不允许本地实例标签只具有值。

      例如:

      Copy
      aws deploy add-tags-to-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem

标记本地实例(控制台)

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

    注意

    使用您在入门中使用的相同账户或 IAM 用户信息进行登录。

  2. 从 AWS CodeDeploy 菜单中,选择 On-premises instances

  3. 在本地实例列表中,选择您要标记的本地实例旁边的箭头。

  4. 在标签列表中,选择或键入所需的标签密钥和标签值。当您键入标签密钥和标签值之后,将显示另一行。您可以重复此步骤,最多添加 10 个标签。要删除标签,请选择删除图标 ( )。

  5. 在您添加标签之后,选择 Update Tags

步骤 10:将应用程序修订部署到本地实例

现在,您已准备好将应用程序修订部署到已注册和标记的本地实例。

将应用程序修订部署到本地实例的方法类似于将应用程序修订部署到 Amazon EC2 实例。有关说明,请参阅 创建部署。这些说明包含指向先决条件的链接,其中包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订,可以创建教程:将应用程序部署到本地实例步骤 2:创建示例应用程序修订中所述的修订。

重要

在创建以本地实例为目标的部署组的过程中,如果您重用 AWS CodeDeploy 服务角色,则必须将 Tag:get* 包含到服务角色策略语句的 Action 部分中。有关更多信息,请参阅 步骤 3:创建服务角色

步骤 11:跟踪对本地实例的部署

将应用程序修订部署到已注册和标记的本地实例之后,您可以跟踪部署进度。

跟踪对本地实例的部署的方法与跟踪对 Amazon EC2 实例的部署的方法类似。有关说明,请参阅查看部署详细信息