

# 在 CloudWatch Synthetics 金丝雀中使用依赖项
<a name="CloudWatch_Synthetics_Canaries_dependencies"></a>

本节将介绍如何在 CloudWatch Synthetics 金丝雀中使用 `Dependencies`。通过 `Dependencies` 字段可为金丝雀指定依赖项，从而添加金丝雀脚本可以使用的其他库或自定义代码。

## 概述
<a name="overview"></a>

CloudWatch Synthetics 金丝雀支持将 Lambda 层指定为依赖项。此功能有助实现以下目标：
+ 跨多个金丝雀共享公共代码
+ 独立管理依赖项与金丝雀脚本
+ 将依赖项移至 Lambda 层来精简金丝雀脚本体积

## 支持的 API
<a name="supported-apis"></a>

以下 API 支持 `Dependencies` 字段：
+  [CreateCanary](https://docs.amazonaws.cn/AmazonSynthetics/latest/APIReference/API_CreateCanary.html) 
+  [UpdateCanary](https://docs.amazonaws.cn/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html) 
+  [StartCanaryDryRun](https://docs.amazonaws.cn/AmazonSynthetics/latest/APIReference/API_StartCanaryDryRun.html) 

## 语法
<a name="syntax"></a>

`Dependencies` 字段是请求语法中代码结构的一部分：

```
"Code": { 
  "Handler": "string",
  "S3Bucket": "string",
  "S3Key": "string",
  "S3Version": "string",
  "ZipFile": blob,
  "Dependencies": [
    {
      "Type": "LambdaLayer",
      "Reference": "string"
    }
  ]
}
```

## 使用依赖项
<a name="usage"></a>

以下是在不同场景中使用 `Dependencies` 字段的一些示例和说明。

### 创建带依赖项的金丝雀
<a name="creating-canary"></a>

创建金丝雀时，可将 Lambda 层指定为依赖项：

```
{
  "Name": "my-canary",
  "Code": {
    "Handler": "pageLoadBlueprint.handler",
    "S3Bucket": "my-bucket",
    "S3Key": "my-canary-script.zip",
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-custom-layer:1"
      }
    ]
  },
  "ArtifactS3Location": "s3://my-bucket/artifacts/",
  "ExecutionRoleArn": "arn:aws:iam::123456789012:role/my-canary-role",
  "Schedule": {
    "Expression": "rate(5 minutes)"
  },
  "RuntimeVersion": "syn-nodejs-puppeteer-3.9"
}
```

### 更新金丝雀的依赖项
<a name="updating-canary"></a>

使用 UpdateCanary API 可更新金丝雀的依赖项：

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-updated-layer:2"
      }
    ]
  }
}
```

### 删除依赖项
<a name="removing-dependencies"></a>

要从金丝雀中删除依赖项，只需将 Dependencies 字段指定为空数组：

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": []
  }
}
```

### 使用 StartCanaryDryRun 测试依赖项
<a name="testing-dependencies"></a>

在更新金丝雀的新依赖项前，可使用 StartCanaryDryRun API 进行测试：

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-test-layer:3"
      }
    ]
  }
}
```

## 限制和注意事项
<a name="limitations"></a>
+ 只能指定一个 Lambda 层作为依赖项
+ 创建带依赖项的金丝雀时，所用角色除[必要角色和权限](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Roles.html)外，还应具有能访问依赖项层的 ` lambda:GetLayerVersion` 权限

## 创建兼容的 Lambda 层
<a name="creating-compatible-layers"></a>

有关创建和打包 Lambda 层的具体方法，请参阅[使用层管理 Lambda 依赖项](https://docs.amazonaws.cn/lambda/latest/dg/chapter-layers.html)；要了解基于金丝雀打包结构的检查机制，请参阅[编写金丝雀脚本](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html)。