

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 CloudWatch Synthetics Canary 使用相依項
<a name="CloudWatch_Synthetics_Canaries_dependencies"></a>

本節說明如何在 CloudWatch Synthetics Canary 中使用 `Dependencies`。透過 `Dependencies` 欄位，您可以指定 Canary 的相依項，加入 Canary 指令碼可使用的其他程式庫或自訂程式碼。

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

CloudWatch Synthetics Canary 支援將 Lambda 圖層指定為相依項。此功能可讓您：
+ 在多個 Canary 之間共用常見程式碼
+ 將 Canary 指令碼程式碼與相依項分開管理
+ 將相依項移至 Lambda 圖層，以減小 Canary 指令碼

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

下列 API 支援 `Dependencies` 欄位：
+  [CreateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html) 
+  [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html) 
+  [ StartCanaryDryRun](https://docs.aws.amazon.com/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` 欄位的一些範例和說明。

### 建立具有相依項的 Canary
<a name="creating-canary"></a>

建立 Canary 時，您可以將 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"
}
```

### 更新 Canary 的相依項
<a name="updating-canary"></a>

您可以使用 UpdateCanary API 更新 Canary 的相依項：

```
{
  "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>

若要從 Canary 移除相依項，請為相依項欄位提供空陣列：

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

### 使用 StartCanaryDryRun 測試相依項
<a name="testing-dependencies"></a>

使用新的相依項更新 Canary 之前，可以先使用 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.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Roles.html)之外，用來建立具有相依項之 Canary 的角色，還應具備對相依項圖層的 ` lambda:GetLayerVersion` 存取權

## 建立相容的 Lambda 圖層
<a name="creating-compatible-layers"></a>

如需有關如何建立和封裝圖層的資訊，請參閱[使用圖層管理 Lambda 相依項](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html)；若要根據 Canary 封裝結構了解 Canary 檢查的封裝結構，請參閱[撰寫 Canary 指令碼](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html)。