

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

# 第 3 步：创建自定义 AWS AppConfig 扩展
<a name="working-with-appconfig-extensions-creating-custom-extensions"></a>



扩展程序定义了它在 AWS AppConfig 工作流程中执行的一个或多个操作。例如， AWS 创作的`AWS AppConfig deployment events to Amazon SNS`扩展程序包括向 Amazon SNS 主题发送通知的操作。每个操作都是在您与之交互 AWS AppConfig 或代表您执行流程时 AWS AppConfig 调用的。这些被称为*行动要点*。 AWS AppConfig 扩展支持以下操作要点：

**PRE\_\* 操作点**：在 `PRE_*` 操作点上配置的扩展操作在请求验证之后应用，但在 AWS AppConfig 执行与操作点名称对应的活动之前。这些操作调用与请求同时处理。如果发出多个请求，则操作调用将按顺序运行。另请注意，`PRE_*` 操作点接收并可以更改配置的内容。 `PRE_*` 操作点还可以响应错误并防止操作发生。
+ `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`
+ `PRE_START_DEPLOYMENT`

**ON\_\* 操作点**：扩展也可以使用`ON_*`操作点与 AWS AppConfig 工作流程并行运行。 `ON_*`操作点是异步调用的。 `ON_*`操作点不接收配置的内容。如果扩展程序在 `ON_*` 操作点期间遇到错误，服务将忽略该错误并继续工作流。
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_STEP`
+ `ON_DEPLOYMENT_BAKING`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

**AT\_\* 操作点**：在 `AT_*` 操作点上配置的扩展操作是同步调用的，并与 AWS AppConfig 工作流并行。如果扩展在 `AT_*` 操作点期间遇到错误，服务将停止工作流并回滚部署。
+ `AT_DEPLOYMENT_TICK`

`AT_DEPLOYMENT_TICK` 操作点支持第三方监控集成。`AT_DEPLOYMENT_TICK` 在配置部署处理编排期间被调用。如果您使用第三方监控解决方案（例如 Datadog 或 New Relic），则可以创建一个 AWS AppConfig 扩展程序来检查`AT_DEPLOYMENT_TICK`操作点的警报，并作为安全护栏，在部署触发警报时将其撤回。

如果您使用第三方监控解决方案，例如Datadog或New Relic，则可以创建一个 AWS AppConfig 扩展程序来检查`AT_DEPLOYMENT_TICK`操作点的警报，并作为安全护栏，在部署触发警报时将其撤回。有关更多信息，请参阅以下 Datadog 和 New Relic 集成示例： GitHub
+ [Datadog](https://github.com/aws-samples/aws-appconfig-tick-extn-for-datadog)
+ [New Relic](https://github.com/aws-samples/sample-aws-appconfig-tick-extn-for-newrelic)

有关 AWS AppConfig 扩展的更多信息，请参阅以下主题：
+ [使用扩展程序扩展 AWS AppConfig 工作流程](working-with-appconfig-extensions.md)
+ [演练：创建自定义扩展 AWS AppConfig](working-with-appconfig-extensions-creating-custom.md)

**示例 扩展程序**  
以下示例扩展程序定义了一个调用 `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` 操作点的操作。在 `Uri` 字段中，该操作指定在本演练前面创建的 `MyS3ConfigurationBackUpExtension` Lambda 函数的 Amazon 资源名称（ARN）。该操作还指定了本演练前面创建的 AWS Identity and Access Management (IAM) 代入角色 ARN。

** AWS AppConfig 扩展示例**

```
{
    "Name": "MySampleExtension",
    "Description": "A sample extension that backs up configurations to an S3 bucket.",
    "Actions": {
        "PRE_CREATE_HOSTED_CONFIGURATION_VERSION": [
            {
                "Name": "PreCreateHostedConfigVersionActionForS3Backup",
                "Uri": "arn:aws:lambda:{{aws-region}}:111122223333:function:MyS3ConfigurationBackUpExtension",
                "RoleArn": "arn:aws:iam::111122223333:role/ExtensionsTestRole"
            }
        ]
    },
    "Parameters" : {
        "S3_BUCKET": {
            "Required": false
        }
    }
}
```

**注意**  
要查看创建扩展程序时的请求语法和字段描述，请参阅 *AWS AppConfig API 参考*中的[CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html)主题。

**创建扩展程序（控制台）**

1. 打开 AWS Systems Manager 控制台，网址为[https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/)。

1. 在导航窗格中，请选择 **AWS AppConfig**。

1. 在 **扩展程序** 选项卡上，选择 **创建扩展程序**。

1. 对于 **扩展程序名称**，输入唯一的名称。在本演练中，请输入 **MyS3ConfigurationBackUpExtension**。（可选）输入描述。

1. 在 **操作** 部分中，选择 **添加新操作**。

1. 对于 **操作名称**，输入唯一的名称。在本演练中，请输入 **PreCreateHostedConfigVersionActionForS3Backup**。此名称描述操作使用的操作点和扩展程序目的。

1. 在**操作点**列表中，选择 PRE\_C **REATE\_HOSTED\_CONFIGURATION\_VERSION**。

1. **对于 **Uri**，选择 **Lambda 函数**，然后在 Lambda 函数列表中选择该函数。**如果您没有看到自己的函数，请确认您与创建函数的 AWS 区域 位置相同。

1. 对于 **IAM 角色**，选择您之前在本演练中创建的角色。

1. 在 **扩展参数（可选）** 部分中，选择**添加新参数**。

1. 对于**参数名称**，请输入名称。在本演练中，请输入 **S3\_BUCKET**。

1. 重复步骤 5-11，为 `PRE_START_DEPLOYMENT` 操作点创建第二个操作。

1. 选择 **创建扩展程序**。