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

为 AWS CodeDeploy 事件创建触发器

您可以创建一个针对 AWS CodeDeploy 部署或实例事件发布 Amazon Simple Notification Service (Amazon SNS) 主题的触发器。然后,当该事件发生时,关联主题的所有订阅者都将通过主题中指定的终端节点(例如 SMS 消息或电子邮件)接收通知。Amazon SNS 提供多种订阅主题的方式。

创建触发器之前,您必须设置触发器将指向的 Amazon SNS 主题。有关信息,请参阅创建主题。在创建主题时,我们建议您为主题指定一个标识其用途的名称,并采用 Topic-group-us-west-3-deploy-failTopic-group-project-2-instance-stop 这样的格式。

您也必须向 AWS CodeDeploy 服务角色授予 Amazon SNS 权限才能为您的触发器发送通知。有关信息,请参阅 向 AWS CodeDeploy 服务角色授予 Amazon SNS 权限

创建主题后,您可以添加订阅者。有关创建、管理和订阅主题的信息,请参阅什么是 Amazon Simple Notification Service

创建触发器以发送关于 AWS CodeDeploy 事件的通知(控制台)

您可以使用 AWS CodeDeploy 控制台为 AWS CodeDeploy 事件创建触发器。在设置过程结束时,将发送一条测试通知消息,以确保权限和触发器详细信息均已正确设置。

为 AWS CodeDeploy 事件创建触发器

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

    注意

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

  2. Applications 页面上,选择将为其发送触发器的应用程序的名称。

  3. Applications details 页面上,选择将为其发送触发器的部署组旁边的箭头。

  4. Triggers 区域中,选择 Create trigger

  5. Create trigger 窗格中,执行以下操作:

    • Trigger name 中,为触发器键入一个便于标识其用途的名称。我们建议采用 Trigger-group-us-west-3-deploy-failTrigger-group-eu-central-instance-stop 这样的格式。

    • Events 中,选择将触发 Amazon SNS 主题发送通知的事件类型。

    • Amazon SNS topic 中,选择您为发送此触发器的通知而创建的主题的名称。

  6. 选择 Create trigger

    AWS CodeDeploy 将发送一条测试通知,以确认您已正确配置 AWS CodeDeploy 和 Amazon SNS 主题之间的访问权限。如果您已订阅该主题,您将收到通过 SMS 消息或电子邮件发送的确认信息,具体取决于您为该主题选择的终端结点类型。

创建触发器以发送关于 AWS CodeDeploy 事件的通知 (CLI)

您可以在创建部署组时使用 CLI 来加入触发器,也可以将触发器添加到现有部署组。

创建触发器以发送关于新部署组的通知

创建 JSON 文件以配置部署组,然后使用 --cli-input-json 选项运行 create-deployment-group 命令。

创建 JSON 文件最简单的方式是使用 --generate-cli-skeleton 选项获取 JSON 格式的副本,然后在纯文本编辑器中提供所需的值。

  1. 运行以下命令,然后将结果复制到纯文本编辑器中。

    Copy
    aws deploy create-deployment-group --generate-cli-skeleton
  2. 将现有 AWS CodeDeploy 应用程序的名称添加到输出:

    Copy
    { "applicationName": "TestApp-us-east-1", "deploymentGroupName": "", "deploymentConfigName": "", "ec2TagFilters": [ { "Key": "", "Value": "", "Type": "" } ], "onPremisesInstanceTagFilters": [ { "Key": "", "Value": "", "Type": "" } ], "autoScalingGroups": [ "" ], "serviceRoleArn": "", "triggerConfigurations": [ { "triggerName": "", "triggerTargetArn": "", "triggerEvents": [ "" ] } ] }
  3. 为您要配置的参数提供值。

    在使用 create-deployment-group 命令时,您必须至少为以下参数提供值:

    • applicationName:已在您的账户中创建的应用程序的名称。

    • deploymentGroupName:您正在创建的部署组的名称。

    • serviceRoleArn:在您的账户中为 AWS CodeDeploy 设置的现有服务角色的 ARN。有关信息,请参阅 步骤 3:创建服务角色

    triggerConfigurations 部分,为以下参数提供值:

    • triggerName:您要为触发器给定的便于标识的名称。我们建议采用 Trigger-group-us-west-3-deploy-failTrigger-group-eu-central-instance-stop 这样的格式。

    • triggerTargetArn:您创建的要与触发器关联的 Amazon SNS 主题的 ARN,采用以下格式:arn:aws:sns:us-east-1:80398EXAMPLE:NewTestTopic

    • triggerEvents:您要为其触发通知的事件的类型。您可以指定一个或多个事件类型,多个事件类型名称用逗号分隔(例如,"triggerEvents":["DeploymentSuccess","DeploymentFailure","InstanceFailure"])。当您添加多个事件类型时,所有这些类型的通知都将发送到您指定的主题,而不是分别发送到不同的主题。您可以从以下事件类型中选择:

      • DeploymentStart

      • DeploymentSuccess

      • DeploymentFailure

      • DeploymentStop

      • DeploymentRollback

      • DeploymentReady (仅适用于蓝/绿部署中的替代实例)

      • InstanceStart

      • InstanceSuccess

      • InstanceFailure

      • InstanceReady (仅适用于蓝/绿部署中的替代实例)

    以下配置示例将为一个名为 TestApp-us-east-1 的应用程序创建一个名为 dep-group-ghi-789-2 的部署组,并创建一个触发器,在部署启动、成功或失败时,该触发器都将提示发送通知:

    Copy
    { "applicationName": "TestApp-us-east-1", "deploymentConfigName": "CodeDeployDefault.OneAtATime", "deploymentGroupName": "dep-group-ghi-789-2", "ec2TagFilters": [ { "Key": "Name", "Value": "Project-ABC", "Type": "KEY_AND_VALUE" } ], "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role", "triggerConfigurations": [ { "triggerName": "Trigger-group-us-east-1", "triggerTargetArn": "arn:aws:sns:us-east-1:80398EXAMPLE:us-east-deployments", "triggerEvents": [ "DeploymentStart", "DeploymentSuccess", "DeploymentFailure" ] } ] }
  4. 以 JSON 文件格式保存更新,然后在运行 --cli-input-jsoncreate-deployment-group 命令时使用 选项调用该文件:

    重要

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

    Copy
    aws deploy create-deployment-group --cli-input-json file://filename.json

    在创建过程结束时,您将收到一条测试通知消息,指示权限和触发器详细信息均已正确设置。

创建触发器以发送关于现有部署组的通知

要使用 AWS CLI 将 AWS CodeDeploy 事件的触发器添加到某个现有部署组,请创建 JSON 文件以更新部署组,然后使用 --cli-input-json 选项运行 update-deployment-group 命令。

创建 JSON 文件最简单的方式是运行 get-deployment-group 命令以获取部署组配置的副本(采用 JSON 格式),然后在纯文本编辑器中更新参数值。

  1. 运行以下命令,然后将结果复制到纯文本编辑器中。

    Copy
    aws deploy get-deployment-group --application-name application --deployment-group-name deployment-group
  2. 从输出中删除以下内容:

    • 在输出的开头处,删除 { "deploymentGroupInfo":

    • 在输出的结尾处,删除 }

    • 删除包含 deploymentGroupId 的行。

    • 删除包含 deploymentGroupName 的行。

    现在,您的文本文件的内容看起来应类似于以下内容:

    Copy
    { "applicationName": "TestApp-us-east-1", "deploymentConfigName": "CodeDeployDefault.OneAtATime", "autoScalingGroups": [], "ec2TagFilters": [ { "Type": "KEY_AND_VALUE", "Value": "Project-ABC", "Key": "Name" } ], "triggerConfigurations": [], "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role", "onPremisesInstanceTagFilters": [] }
  3. triggerConfigurations 部分,为 triggerEventstriggerTargetArntriggerName 参数添加数据。有关触发器配置参数的信息,请参阅 TriggerConfig

    现在,您的文本文件的内容看起来应类似于以下内容。在部署启动、成功或失败时,此代码都将提示发送通知。

    Copy
    { "applicationName": "TestApp-us-east-1", "deploymentConfigName": "CodeDeployDefault.OneAtATime", "autoScalingGroups": [], "ec2TagFilters": [ { "Type": "KEY_AND_VALUE", "Value": "Project-ABC", "Key": "Name" } ], "triggerConfigurations": [ { "triggerEvents": [ "DeploymentStart", "DeploymentSuccess", "DeploymentFailure" ], "triggerTargetArn": "arn:aws:sns:us-east-1:80398EXAMPLE:us-east-deployments", "triggerName": "Trigger-group-us-east-1" } ], "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role", "onPremisesInstanceTagFilters": [] }
  4. 以 JSON 文件格式保存更新,然后使用 --cli-input-json 选项运行 update-deployment-group 命令。请务必包含 --current-deployment-group-name 选项并将 filename 替换为您的 JSON 文件的名称:

    重要

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

    Copy
    aws deploy update-deployment-group --current-deployment-group-name deployment-group-name --cli-input-json file://filename.json

    在创建过程结束时,您将收到一条测试通知消息,指示权限和触发器详细信息均已正确设置。