Terraform を使用して CloudWatch Synthetics Canary をデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用して CloudWatch Synthetics Canary をデプロイする

作成者: Dhrubajyoti Mukherjee (AWS) と Jean-Francois Landreau (AWS)

コードリポジトリ: Terraform を使用して CloudWatch Synthetics Canary をデプロイする

環境:本稼働

テクノロジー: DevOps、ビジネスの生産性 DevelopmentAndTesting、インフラストラクチャ、ウェブおよびモバイルアプリ

AWS サービス: Amazon CloudWatch、Amazon S3、Amazon SNS、Amazon VPC、AWSアイデンティティとアクセス管理

[概要]

顧客の観点からシステムの状態を検証し、顧客が接続できることを確認することは重要です。顧客がエンドポイントを頻繁に呼び出さない場合、これはさらに困難になります。Amazon CloudWatch Synthetics は、パブリックエンドポイントとプライベートエンドポイントの両方をテストできる Canary の作成をサポートしています。Canary を使用すれば、使用中でなくてもシステムの状態を知ることができます。これらの Canary は Node.js Puppeteer スクリプトまたは Python Selenium スクリプトのどちらかです。

このパターンでは、 HashiCorp Terraform を使用してプライベートエンドポイントをテストする Canary をデプロイする方法について説明します。が URLを返すかどうかをテストする Puppeteer スクリプトを埋め込みます200-OK。その後、Terraform スクリプトを、プライベートエンドポイントをデプロイするスクリプトと統合できます。パブリックエンドポイントを監視するようにソリューションを変更することもできます。

前提条件と制限

前提条件

  • 仮想プライベートクラウド (AWS) とプライベートサブネットを持つアクティブな Amazon Web Services (VPC) アカウント

  • プライベートサブネットから到達できるエンドポイントURLの 。

  • Terraform をインストールしたデプロイメント環境

制限

現在のソリューションは、次の CloudWatch Synthetics ランタイムバージョンで機能します。

  • syn-nodejs-puppeteer-3.4

  • syn-nodejs-puppeteer-3.5

  • syn-nodejs-puppeteer-3.6

  • syn-nodejs-puppeteer-3.7

新しいランタイムバージョンがリリースされると、現在のソリューションの更新が必要な場合があります。また、セキュリティアップデートに対応できるようにソリューションを変更する必要もあります。

製品バージョン

  • Terraform 1.3.0

アーキテクチャ

Amazon CloudWatch Synthetics は CloudWatch、、Lambda、および Amazon Simple Storage Service (Amazon S3) に基づいています。Amazon CloudWatch には、Canary を作成するウィザードと、Canary の実行のステータスを表示するダッシュボードが用意されています。Lambda 関数はスクリプトを実行します。Amazon S3 は、Canary 実行のログとスクリーンショットを保存します。

このパターンは、ターゲットサブネットにデプロイされた Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを介してプライベートエンドポイントをシミュレートします。Lambda 関数には、プライベートエンドポイントVPCがデプロイされている に伸縮自在なネットワークインターフェイスが必要です。

説明は図に続いて記載します。

図に示す内容は以下のとおりです。

  1. Synthetics canary が Canary Lambda 関数を開始します。

  2. Canary Lambda 関数が Elastic Network Interface に接続します。

  3. Canary Lambda 関数はエンドポイントのステータスを監視します。

  4. Synthetics Canary は、実行データを S3 バケットと CloudWatch メトリクスにプッシュします。

  5. メトリクスに基づいて CloudWatch アラームが開始されます。

  6. CloudWatch アラームは、Amazon Simple Notification Service (Amazon SNS) トピックを開始します。

ツール

AWS サービス

  • Amazon CloudWatch は、AWSリソースのメトリクスと、 で実行しているアプリケーションのAWSメトリクスをリアルタイムでモニタリングするのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Simple Notification Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ交換の調整と管理に役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

  • Amazon Virtual Private Cloud (Amazon VPC) は、定義した仮想ネットワークにAWSリソースを起動するのに役立ちます。この仮想ネットワークは、独自のデータセンターで運用する従来のネットワークに似ており、 のスケーラブルなインフラストラクチャを使用する利点がありますAWS。このパターンでは、VPCエンドポイントとエラスティックネットワークインターフェイスを使用します。

その他のサービス

  • HashiCorp Terraform はオープンソースのInfrastructure as Code (IaC) ツールで、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理する際に役立ちます。このパターンでは、Terraform を使用してインフラストラクチャをデプロイします。

  • Puppeteer は Node.js ライブラリです。 CloudWatch Synthetics ランタイムは Puppeteer フレームワークを使用します。

コード

このソリューションは、 GitHub クラウド watch-synthetics-canary- テレフォームリポジトリで利用できます。詳細については、「追加情報」セクションを参照してください。

エピック

タスク説明必要なスキル

プライベート をモニタリングするための要件を収集しますURL。

ドメイン、パラメータ、ヘッダーという完全なURL定義を収集します。Amazon S3 と Amazon にプライベートに通信するには CloudWatch、VPCエンドポイントを使用します。VPC および サブネットがエンドポイントにどのようにアクセスできるかを書き留めます。Canary 実行の頻度を考えてみましょう。

クラウドアーキテクト、ネットワーク管理者

既存のソリューションを変更して、プライベート をモニタリングしますURL。

terraform.tfvars ファイルの変更:

  • name – Canary の名前。

  • runtime_version – Canary のランタイムバージョン。 syn-nodejs-puppeteer-3.7 を使用することをお勧めします。

  • take_screenshot – スクリーンショットを撮るべきかどうか。

  • api_hostname – 監視対象のエンドポイントのホスト名。

  • api_path – 監視対象のエンドポイントのパス。

  • vpc_id – Canary Lambda 関数で使用される VPC ID。

  • subnet_ids – Canary Lambda 関数IDsで使用されるサブネット。

  • frequency – Canary の実行頻度 (分単位)。

  • alert_sns_topic – CloudWatch アラーム通知が送信されるSNSトピック。

クラウドアーキテクト

ソリューションをデプロイして運用する。

ソリューションを展開するには、次を実行します。

  1. 開発環境の cloudwatch-synthetics-canary-terraform ディレクトリから Terraform を初期化します。

    terraform init
  2. 変更を計画し、レビューします。

    terraform plan
  3. ソリューションをデプロイします。

    terraform apply
クラウドアーキテクト、 DevOps エンジニア

トラブルシューティング

問題ソリューション

プロビジョニングされたリソースの削除が停止する。

Canary Lambda 関数、対応する elastic network interface、セキュリティグループをこの順序で手動で削除します。

関連リソース

追加情報

リポジトリのアーティファクト

リポジトリのアーティファクトは、次の構造を持っています。

. ├── README.md ├── main.tf ├── modules │   ├── canary │   └── canary-infra ├── terraform.tfvars ├── tf.plan └── variable.tf

main.tf ファイルにはコアモジュールが含まれ、2 つのサブモジュールがデプロイされます。

  • canary-infra は、Canary に必要なインフラストラクチャをデプロイします。

  • canary は、Canary をデプロイします。

ソリューションの入力パラメータは terraform.tfvars ファイルにあります。次のコード例を使用して 1 つの Canary を作成できます。

module "canary" { source = "./modules/canary" name = var.name runtime_version = var.runtime_version take_screenshot = var.take_screenshot api_hostname = var.api_hostname api_path = var.api_path reports-bucket = module.canary_infra.reports-bucket role = module.canary_infra.role security_group_id = module.canary_infra.security_group_id subnet_ids = var.subnet_ids frequency = var.frequency alert_sns_topic = var.alert_sns_topic }

対応する.var ファイルは次のとおりです。

name = "my-canary" runtime_version = "syn-nodejs-puppeteer-3.7" take_screenshot = false api_hostname = "mydomain.internal" api_path = "/path?param=value" vpc_id = "vpc_id" subnet_ids = ["subnet_id1"] frequency = 5 alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"

ソリューションのクリーンアップ

開発環境でこれをテストする場合は、コストの発生を避けるためにソリューションをクリーンアップできます。

  1. AWS マネジメントコンソールで、Amazon S3 コンソールに移動します。ソリューションが作成した Amazon S3 バケットを空にします。必要な場合は、必ずデータのバックアップを取ってください。

  2. 開発環境の cloudwatch-synthetics-canary-terraform ディレクトリから destroy コマンドを実行します。

    terraform destroy