CloudWatch Synthetics CanaryでAPI Gatewayを監視してみた

## はじめに

この記事は「[NTTテクノクロスアドベントカレンダー2024](https://qiita.com/advent-calendar/2024/ntt-tx)（シリーズ2）」の17日目の記事です。

NTTテクノクロスの大橋です。
普段はAWSを活用したシステムの構築や保守・運用の業務に携わらせていただいています。

業務の中でCloudWatch Synthetics Canaryを利用しAPI Gatewayの監視を行う機会があり、設定した内容や躓いた点をまとめましたので、今後活用する方の参考になればと思います。

## 目次

1. CloudWatch Synthetics Canaryとは
1. Canaryの設定
1. 躓いたポイント
1. まとめ

## CloudWatch Synthetics Canaryとは

AWSのサービスの1つであり、リソースの監視を行うことができるサービスです。
本記事では実施しませんが、エラー等のアラームを設定し、Slack等へ通知を送ることもできます。

## Canaryの設定

### 前提条件
* API Gatewayが作成されていること（本記事ではMockで実施）
* VPC、セキュリティグループが作成されていること
* VPCエンドポイントが作成されていること
    * execute-api
    * monitoring
    * Lambda
    * S3

### 設定
※下記に記載していない部分はデフォルト値で設定しています。
1. AWSコンソールにログインします。
1. CloudWatchを開きます。
1. Synthetics Canariesを開きます。
![Canary_1-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/be0385d1-8c52-a9cf-4cc9-11f2b9602119.png)
1. `Canaryを作成`を選択します。
![Canary_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/cb1feaed-79b5-46f4-48f2-5f25601097f7.png)
1. `設計図を使用する`を選択し、`API Canary`の設計図を選択します。
![Canary_3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/fd698377-3bcd-511b-7069-25007b0d93d7.png)
1. Canaryの名前を入力します。
![Canary_4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/a14a6dcc-035d-b895-210f-07ae932323eb.png)
1. API Gatewayの情報を設定します。
   1. Amazon API Gateway APIを使用しています：チェック
   1. API：API Gateway名を選択
   1. ステージ：API Gatewayのステージを選択
   1. Hostname：API GatewayのURL（自動入力）
   ![Canary_7-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/e65cedbf-0ff2-af50-a827-c8dab112652c.png)
   1. HTTPリクエストを追加
      1. リソース：API Gatewayのリソースを選択
      1. 方法：API Gatewayのメソッドを選択
      1. ヘッダー（APIキー情報）や、データをリクエスト（リクエスト文）を必要に応じて入力（本記事ではMockのため省略）
      ![Canary_6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/574fa149-d6cb-77a5-8912-aa84713d49f7.png)
1. S3バケットを選択します。（本記事では新規で作成します。）
![Canary_11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/82d393f4-94fa-b94d-b78a-8549de9e457c.png)
1. IAMロールを選択します。（本記事では新規で作成します。）
![Canary_12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/68b4f56a-52f3-b254-8579-53b6802f57f7.png)
1. VPC、サブネット、Lambdaのセキュリティグループの情報を設定します。
![Canary_14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/e4b6a8d3-f5af-b28d-b723-bc64aeea74fe.png)
1. `Canaryを作成`を選択します。

### 確認
1. 作成したCanaryの`可用性`タブを開きます。
1. `Canary 実行`で実行が成功していることを確認します。
![Canary_15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3952316/9676919c-b608-6231-bbe7-362635c3570e.png)

## 躓いたポイント

1. API Gatewayの情報を設定する際に、Hostnameを自動入力する必要があること。
    * 自動入力されない場合は、ステージの選択を再度実施すると自動入力されます。
    * 自動入力されない場合、HTTPリクエストを追加することができず、Canaryの作成でエラーとなってしまいます。
1. Canaryの作成時にLambdaが作成されるため、Lambdaの権限付与とセキュリティグループを作成する必要があること。
1. S3のVPCエンドポイントを事前に作成する必要があること。
    * 事前に作成していない場合、Canaryの作成は問題なくできますが、実行が失敗してしまいます。

## まとめ

CloudWatch Synthetics Canaryを利用してAPI Gatewayの監視を行った際の設定した内容や躓いたポイントについてまとめさせていただきました。
Canaryの作成時にはエラーがどの部分で発生しているのか分かりづらかったり、作成後も実行が失敗してしまったりと、設定に苦戦する場面が多々ありましたが、状態を可視化したことで、簡単にAPI Gatewayの状態を確認できるようになりました。
本記事でまとめた内容が少しでも今後Canary作成する方の参考になれば幸いです。

最後まで読んでいただきありがとうございました。
引き続きNTTテクノクロスアドベントカレンダーをお楽しみください。