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

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

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

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

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

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

重要

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

我们建议为 IAM 用户分配一个标识其用途的名称(如代码部署用户 Onprem)。

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

重要

无论您使用Amazon CLI或 IAM 控制台创建新的 IAM 用户,请记录为该用户提供的用户 ARN。稍后在第 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 S3 了针对包含Amazon CodeDeploy代理。否则,只要在关联的本地实例上安装或更新 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. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/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 步:将配置文件添加到本地实例

获取凭证 (CLI)

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

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

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

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

    重要

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

  3. 如果已经列出了两个访问密钥,则必须通过调用删除访问密钥命令,指定 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

    重要

    如果选择Delete,并且本地实例已经按中所述使用此访问密钥,并且本地实例已经按中所述使用此访问密钥,第 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 Server:/etc/codedeploy-agent/conf

    • 对于 Windows Server: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

    其中:

    重要

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

第 5 步:安装和配置 Amazon CLI

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

  1. 安装Amazon CLI,请按照中的说明操作开始设置Amazon CLI中的Amazon Command Line Interface用户指南

    注意

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

  2. 配置Amazon CLI,请按照中的说明操作配置Amazon CLI中的Amazon Command Line Interface用户指南

    重要

    在配置Amazon CLI(例如,通过调用aws configure命令),请确保指定至少具有以下条件的 IAM 用户的私有密钥 ID 和秘密访问密钥。Amazon访问权限以及配置本地实例的先决条件。这使您能够在本地实例上下载和安装 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/*" ] } ] }

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

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

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

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

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

export AWS_REGION=supported-region

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

步骤 7:安装 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. 调用注册本地实例命令,在命令中指定:

    • 唯一标识本地实例的名称 (使用 --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)

  • 调用将标签添加到本地实例命令,在命令中指定:

    • 唯一标识本地实例的名称 (使用 --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 服务器或红帽企业 Linux)将应用程序部署到本地实例第 2 步:创建示例应用程序修订中所述的修订。

重要

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

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

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

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