使用 register-on-premises-instance 命令(IAM 用户 ARN)注册本地实例 - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

重要

不建议使用 IAM 用户注册实例,因为它使用静态(永久)证书进行身份验证。为了提高安全性,我们建议使用临时证书注册实例进行身份验证。有关更多信息,请参阅使用register-on-premises-instance命令 (IAM 会话 ARN) 注册本地实例

重要

确保您制定了轮换 IAM 用户的访问密钥(永久证书)的计划。有关更多信息,请参阅轮换访问密钥

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

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

创建一个 IAM 用户,本地实例将使用该用户进行身份验证和交互 CodeDeploy。

重要

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

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

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

重要

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

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

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

注意

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

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

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

    我们建议您将此策略限制为仅适用于您的本地实例需要访问的 Amazon S3 存储桶。如果您限制此策略,请确保同时允许访问包含Amazon CodeDeploy代理的 Amazon S3 存储桶。否则,每当在关联的本地实例上安装或更新 CodeDeploy 代理时,都可能出现错误。

    例如:

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

    重要

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

    aws iam put-user-policy --user-name CodeDeployUser-OnPrem --policy-name CodeDeploy-OnPrem-Permissions --policy-document file://CodeDeploy-OnPrem-Permissions.json
分配权限(控制台)
  1. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

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

  3. Create Your Own Policy 旁,选择 Select

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

  5. 策略文档框中,键入或粘贴以下权限表达式,该表达式Amazon CodeDeploy允许代表 IAM 用户将策略中指定的任何 Amazon S3 存储桶中的应用程序修订部署到本地实例:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] }
  6. 请选择Create Policy(创建策略)

  7. 在导航窗格中,选择 Users(用户)。

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

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

  10. 选择名为 CodeDeploy-OnPrem-Permissions 的托管策略,然后选择 Attach Policy (附加策略)

步骤 3:获取 IAM 用户证书

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

注意

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

如果用户需要在 Amazon Web Services Management Console 之外与 Amazon 交互,则需要编程式访问权限。Amazon API 和 Amazon Command Line Interface 需要访问密钥。可能的话,创建临时凭证,该凭证由一个访问密钥 ID、一个秘密访问密钥和一个指示凭证何时到期的安全令牌组成。

要向用户授予编程式访问权限,请选择以下选项之一。

哪个用户需要编程式访问权限? 目的 方式
IAM 使用短期凭证签署对 Amazon CLI 或 Amazon API 的编程式请求(直接或使用 Amazon SDK)。 按照《IAM 用户指南》将临时凭证用于 Amazon 资源中的说明进行操作。
IAM

(不推荐使用)

使用长期凭证签署对 Amazon CLI 或 Amazon API 的编程式请求(直接或使用 Amazon SDK)。
按照《IAM 用户指南》管理 IAM 用户的访问密钥中的说明进行操作。
获取凭证 (CLI)
  1. 调用list-access-keys命令,指定 IAM 用户的姓名(使用--user-name选项),然后仅查询访问密钥 ID(使用--query--output选项)。例如:

    aws iam list-access-keys --user-name CodeDeployUser-OnPrem --query "AccessKeyMetadata[*].AccessKeyId" --output text
  2. 如果输出中没有显示任何密钥或输出中仅显示有关一个密钥的信息,请调用create-access-key命令,指定 IAM 用户的名称(带--user-name选项):

    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 命令的示例:

    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.aws.amazon.com/iam/

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

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

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

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

    重要

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

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

    重要

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

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

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

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

  1. 在本地实例的以下位置创建一个名为codedeploy.onpremises.yml(用于 Ubuntu 服务器或 RHEL 本地实例)或conf.onpremises.yml(对于 Windows 服务器本地实例)的文件:

    • 对于 Ubuntu 服务器:/etc/codedeploy-agent/conf

    • 对于 Windows 服务器:C:\ProgramData\Amazon\CodeDeploy

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

    --- 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 用户证书,并且您的本地实例已在使用关联的访问密钥 ID 和私有访问密钥,则需要按照中的步骤 4:向本地实例添加配置文件说明指定与此 IAM 用户关联的其他访问密钥 ID 和私有访问密钥。否则,对您的本地实例的任何部署可能会停滞在永久等待的状态或完全失败。

步骤 5:安装和配置 Amazon CLI

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

  1. 要在本地实例Amazon CLI上安装,请按照Amazon Command Line Interface用户指南中的开始设置Amazon CLI中的说明进行操作。

    注意

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

  2. 要在本地实例Amazon CLI上配置,请按照Amazon Command Line Interface用户指南中的配置Amazon CLI中的说明进行操作。

    重要

    在配置时Amazon CLI(例如,通过调用aws configure命令),请务必指定除中指定的访问权限之外还至少具有以下Amazon访问权限的 IAM 用户的私有密钥 ID 和私有访问密钥配置本地实例。这样,您就可以在本地实例上下载并安装 CodeDeploy 代理:

    { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codedeploy:*" ], "Resource" : "*" }, { "Effect" : "Allow", "Action" : [ "s3:Get*", "s3:List*" ], "Resource" : [ "arn:aws:-cn:s3:::aws-codedeploy-cn-north-1/*", "arn:aws:-cn:s3:::aws-codedeploy-cn-northwest-1/*" ] } ] }

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

步骤 6:设置 AWS_REGION 环境变量(仅限 Ubuntu 服务器和 RHEL)

如果您没有在本地实例上运行 Ubuntu 服务器或 RHEL,请跳过此步骤直接转至。步骤 7:安装代 CodeDeploy 理

在 Ubuntu 服务器或 RHEL 本地实例上安装代 CodeDeploy 理,并允许该实例在新版本 CodeDeploy 可用时更新代理。为此,您可以将实例上的 AWS_REGION 环境变量设置为 CodeDeploy 支持的某个区域的标识符。我们建议您将该值设置为 CodeDeploy 应用程序、部署组和应用程序修订所在的区域(例如us-west-2)。有关区域列表,请参阅中的区域和终端节点Amazon Web Services 一般参考

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

export AWS_REGION=supported-region

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

步骤 7:安装代 CodeDeploy 理

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

步骤 8:向注册本地实例 CodeDeploy

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

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

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

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

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

      重要

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

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

      例如:

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

步骤 9:标记本地实例

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

标记本地实例 (CLI)
  • 调用-premis add-tags-to-ones-instances 命令,指定:

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

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

      例如:

      aws deploy add-tags-to-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem
标记本地实例(控制台)
  1. 登录Amazon Web Services Management Console并打开 CodeDeploy 控制台,网址为 https://console.aws.amazon.com/codedeploy

    注意

    使用您设置的同一用户登录CodeDeploy 入门

  2. 从 CodeDeploy 菜单中选择本地实例

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

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

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

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

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

您可以将应用程序修订部署到本地实例,其方式与将应用程序修订部署到 Amazon EC2 实例类似。有关说明,请参阅 使用创建部署 CodeDeploy。这些说明包含指向先决条件的链接,其中包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订,可以创建教程:使用 CodeDeploy 将应用程序部署到本地实例(Windows 服务器、Ubuntu Server 或 Red Hat Enterprise Linux)步骤 2:创建示例应用程序修订中所述的修订。

重要

如果您在创建以本地实例为目标的部署组时重复使用 CodeDeploy 服务角色,则必须在该服务角色的策略声明Action部分中包含Tag:get*该服务角色。有关更多信息,请参阅步骤 2:为创建服务角色 CodeDeploy

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

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

跟踪本地实例部署的方式与跟踪 Amazon EC2 实例部署的方式类似。有关说明,请参阅 查看CodeDeploy部署详情