Node.js マルチチェックブループリントの JSON 設定の記述 - Amazon CloudWatch

Node.js マルチチェックブループリントの JSON 設定の記述

Node.js マルチチェックブループリントを使用すると、1 回の Canary 実行内で複数の検証チェックを実行する Canary を作成できます。このブループリントは、複数のエンドポイントをテストしたり、アプリケーションのさまざまな側面を検証したり、関連する一連のチェックを順番に実行したりする場合に便利です。

ルート設定構造

ルート設定は、高度な API ブループリント Canary の全体的な構造を定義します。

スキーマプロパティ
プロパティ タイプ 必須 説明
globalSettings オブジェクト 不可 すべてのステップに適用されるデフォルト設定
variables オブジェクト 不可 ステップ間で再利用可能な値 (最大 10)
steps オブジェクト あり モニタリングステップのコレクション (1~10 ステップ)

{ "globalSettings": { "stepTimeout": 30000, "userAgent": "CloudWatch-Synthetics-Advanced/1.0" }, "variables": { "baseUrl": "https://api.example.com", "apiVersion": "v1" }, "steps": { "1": { "stepName": "healthCheck", "checkerType": "HTTP", "url": "${baseUrl}/health", "httpMethod": "GET" } } }

検証ルール

  • 少なくとも 1 つのステップを含める必要があります

  • 最大 10 ステップまで可能

  • globalSettingsvariablessteps 以外の追加プロパティは不可

[Global settings] (グローバル設定)

グローバル設定は、ステップレベルで上書きされない限り、すべてのステップに適用されるデフォルト設定を指定します。

プロパティ

グローバル設定のプロパティ
プロパティ タイプ デフォルト Range 説明
stepTimeout integer 30000 5000~300000 すべてのステップのデフォルトのタイムアウト (ミリ秒)

{ "globalSettings": { "stepTimeout": 60000, } }

変数とデータ管理

変数を使用すると、${variableName} 構文を使用して設定全体で参照できる再利用可能な値を定義できます。

変数プロパティ

プロパティ 説明
変数名 string パターン ^[a-zA-Z][a-zA-Z0-9_]*$ と一致する必要があります
変数値 string 任意の文字列値

制限事項

  • 設定ごとに最大 10 個の変数

  • 変数名は英字で始まる必要があります

  • 名前には、英字、数字、下線のみを含めることができます

  • スキーマで指定されていない最大長

{ "variables": { "baseUrl": "https://api.example.com", "apiKey": "${AWS_SECRET:my-api-key}", "timeout": "30000", "userEmail": "test@example.com" } }

設定の使用方法

{ "steps": { "1": { "url": "${baseUrl}/users", "timeout": "${timeout}", "headers": { "Authorization": "Bearer ${apiKey}" } } } }

ステップの定義

ステップは、個々のモニタリングオペレーションを定義します。各ステップには 1~10 の番号が付けられ、特定のタイプのチェックが含まれます。

一般的なステップのプロパティ

プロパティ タイプ 必須 説明
stepName 文字列 あり ステップの一意の識別子
checkerType string あり チェックのタイプ: HTTPDNSSSLTCP
extractors array 不可 データ抽出設定

ステップ名の検証

  • パターン - ^[a-zA-Z][a-zA-Z0-9_-]*$

  • 最大文字数 - 64 文字

  • 英字で始まっている必要があります

ステップの番号付け

  • ステップには、文字列キーとして「1」、「2」、...、「10」という番号が付けられます。

  • パターン: ^([1-9]|10)$

  • 最低 1 ステップが必要

  • 最大 10 ステップまで可能

{ "steps": { "1": { "stepName": "loginAPI", "checkerType": "HTTP", "url": "https://api.example.com/login", "httpMethod": "POST" }, "2": { "stepName": "dnsCheck", "checkerType": "DNS", "domain": "example.com" } } }

チェックタイプ

HTTP チェック

包括的なリクエストとレスポンスの検証を使用して、ウェブエンドポイントと API をモニタリングします。

必要なプロパティ

プロパティ 説明
url string ターゲット URL (有効な URI 形式である必要があります)
httpMethod string HTTP method: GETPOSTPUTPATCHDELETEHEADOPTIONS

オプションのプロパティ

プロパティ タイプ デフォルト Range 説明
timeout integer 30000 5000~300000 リクエストタイムアウト (ミリ秒)
waitTime integer 0 0-60 リクエスト前の遅延 (秒)
headers オブジェクト - - カスタム HTTP ヘッダー
body string - - POST/PUT オペレーションのリクエスト本文
authentication オブジェクト - - 認証の設定
assertions array - - レスポンス検証ルール

{ "stepName": "createUser", "checkerType": "HTTP", "url": "https://api.example.com/users", "httpMethod": "POST", "timeout": 15000, "headers": { "Content-Type": "application/json", "X-API-Version": "v1" }, "body": "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}", "authentication": { "type": "API_KEY", "apiKey": "${AWS_SECRET:api-credentials}", "headerName": "X-API-Key" }, "assertions": [ { "type": "STATUS_CODE", "operator": "EQUALS", "value": 201 } ] }

DNS チェック

DNS 解決を検証し、情報を記録します。

必要なプロパティ

プロパティ 説明
domain string クエリするドメイン名 (ホスト名形式)

オプションのプロパティ

プロパティ タイプ デフォルト 説明
recordType string 「A」 DNS レコードタイプ: ACNAMEMXTXTNS
nameserver string - クエリする特定の DNS サーバー
timeout integer 30000 クエリタイムアウト (5000~300000 ms)
port integer 53 DNS サーバーポート (1~65535)
protocol string 「UDP」 プロトコル: UDP または TCP
assertions array - DNS レスポンス検証ルール

{ "stepName": "dnsResolution", "checkerType": "DNS", "domain": "example.com", "recordType": "A", "nameserver": "8.8.8.8", "timeout": 10000, "assertions": [ { "type": "RECORD_VALUE", "operator": "CONTAINS", "value": "192.168" } ] }

SSL チェック

SSL 証明書のヘルスと設定をモニタリングします。

必要なプロパティ

プロパティ 説明
hostname string ターゲットホスト名 (ホスト名形式)

オプションのプロパティ

プロパティ タイプ デフォルト 説明
port integer 443 SSL ポート (1~65535)
timeout integer 30000 接続タイムアウト (5000~300000 ms)
sni boolean TRUE サーバー名の表示
verifyHostname boolean TRUE ホスト名の検証
allowSelfSigned ブール値 FALSE 自己署名証明書の受け入れ
assertions array - 証明書検証ルール

{ "stepName": "sslCertCheck", "checkerType": "SSL", "hostname": "secure.example.com", "port": 443, "sni": true, "verifyHostname": true, "assertions": [ { "type": "CERTIFICATE_EXPIRY", "operator": "GREATER_THAN", "value": 30, "unit": "DAYS" } ] }

TCP チェック

TCP ポートの接続とレスポンス検証をテストします。

必要なプロパティ

プロパティ 説明
hostname string ターゲットホスト名 (ホスト名形式)
port integer ターゲットポート (1~65535)

オプションのプロパティ

プロパティ タイプ デフォルト 説明
timeout integer 30000 全体的なタイムアウト (5000~300000 ms)
connectionTimeout integer 3000 接続タイムアウト (5000~300000 ms)
readTimeout integer 2000 データ読み取りタイムアウト (5000~300000 ms)
sendData string - 接続後に送信するデータ
expectedResponse string - 予想されるレスポンスデータ
encoding string 「UTF-8」 データエンコーディング: UTF-8ASCIIHEX
assertions array - 接続とレスポンスの検証

{ "stepName": "databaseConnection", "checkerType": "TCP", "hostname": "db.example.com", "port": 3306, "connectionTimeout": 5000, "sendData": "SELECT 1", "expectedResponse": "1", "assertions": [ { "type": "CONNECTION_SUCCESSFUL", "value": true } ] }

認証方法

認証なし

{ "type": "NONE" }

基本認証

プロパティ タイプ 必須 説明
type 文字列 あり "BASIC" を指定してください
username string あり 認証用のユーザー名
password string あり 認証用のパスワード

{ "type": "BASIC", "username": "admin", "password": "${AWS_SECRET:basic-auth:password}" }

API キー認証

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "API_KEY" を指定してください
apiKey string あり - API キー値
headerName string 不可 「X-API-Key」 API キーのヘッダー名

{ "type": "API_KEY", "apiKey": "${AWS_SECRET:api-credentials}", "headerName": "Authorization" }

OAuth クライアントの認証情報

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "OAUTH_CLIENT_CREDENTIALS" を指定してください
tokenUrl string あり - OAuth トークンエンドポイント URL
clientId string あり - OAuth クライアント ID
clientSecret string あり - OAuth クライアントシークレット
scope string 不可 - OAuth スコープ
audience string 不可 - OAuth 対象者
resource string 不可 - OAuth リソース
tokenApiAuth array 不可 - トークン API 認証メソッド: BASIC_AUTH_HEADERREQUEST_BODY
tokenCacheTtl integer 不可 3600 トークンキャッシュ TTL (60 秒以上)

{ "type": "OAUTH_CLIENT_CREDENTIALS", "tokenUrl": "https://auth.example.com/oauth/token", "clientId": "${AWS_SECRET:oauth-creds:client_id}", "clientSecret": "${AWS_SECRET:oauth-creds:client_secret}", "scope": "read write", "tokenCacheTtl": 7200 }

AWS Signature (バージョン 4)

プロパティ タイプ 必須 説明
type 文字列 あり "SIGV4" を指定してください
service string あり AWS サービスの名前 (「execute-api」など)
region string あり AWS リージョン
roleArn string あり 署名用の IAM ロール ARN

{ "type": "SIGV4", "service": "execute-api", "region": "us-east-1", "roleArn": "arn:aws:iam::123456789012:role/SyntheticsRole" }

アサーションと検証

HTTP アサーション

ステータスコードアサーション

プロパティ タイプ 必須 説明
type 文字列 あり "STATUS_CODE" を指定してください
operator string あり EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN, IN_RANGE
value 整数 条件付き HTTP ステータスコード (100~599)
rangeMin 整数 条件付き 最小範囲値 (IN_RANGE の場合)
rangeMax 整数 条件付き 最大範囲値 (IN_RANGE の場合)
{ "type": "STATUS_CODE", "operator": "EQUALS", "value": 200 }

応答時間のアサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "RESPONSE_TIME" を指定してください
operator string あり - LESS_THAN, GREATER_THAN, EQUALS
value 数値 あり - 時間値 (最小 0)
unit string 不可 「MILLISECONDS」 "MILLISECONDS" を指定してください
{ "type": "RESPONSE_TIME", "operator": "LESS_THAN", "value": 500, "unit": "MILLISECONDS" }

ヘッダーアサーション

プロパティ タイプ 必須 説明
type 文字列 あり "HEADER" を指定してください
headerName string あり 検証するヘッダーの名前
operator string あり EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, REGEX_MATCH, EXIST
value 文字列/ブール型 条件付き 予想される値 (EXIST 演算子のブール値)
{ "type": "HEADER", "headerName": "Content-Type", "operator": "CONTAINS", "value": "application/json" }

本文アサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "BODY" を指定してください
target string 不可 「JSON」 JSON、または TEXT
path string 条件付き - JSONPath (JSON ターゲットに必須)
operator string あり - CONTAINS, NOT_CONTAINS, EQUALS, NOT_EQUALS, EXISTS
value 文字列/ブール型 あり - 予想される値 (EXISTS 演算子のブール値)
{ "type": "BODY", "target": "JSON", "path": "$.users[0].name", "operator": "EQUALS", "value": "John Doe" }

DNS アサーション

レコード値のアサーション

プロパティ タイプ 必須 Range 説明
type 文字列 あり - "RECORD_VALUE" を指定してください
operator string あり - EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, REGEX_MATCH
value string あり - 予想されるレコード値

レコード数のアサーション

プロパティ タイプ 必須 Range 説明
type 文字列 あり - "RECORD_COUNT" を指定してください
operator string あり - EQUALS, GREATER_THAN, LESS_THAN
value integer あり ≥ 0 予想される個数 (最小 0)

認可アサーション

プロパティ タイプ 必須 Range 説明
type 文字列 あり - "AUTHORITATIVE" を指定してください
value boolean あり - 想定される認可ステータス

TTL アサーション

プロパティ タイプ 必須 Range 説明
type 文字列 あり - "TTL" を指定してください
operator string あり - EQUALS, GREATER_THAN, LESS_THAN
value integer あり ≥ 0 予想される TTL (最小 0)

SSL アサーション

証明書の有効期限のアサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "CERTIFICATE_EXPIRY" を指定してください
operator string あり - GREATER_THAN, LESS_THAN
value integer あり - 時間値 (最小 0)
unit string 不可 「DAYS」 DAYS, HOURS

証明書のサブジェクトのアサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "CERTIFICATE_SUBJECT" を指定してください
field string あり - サブジェクトフィールド: CNOOUCSTL
operator string あり - CONTAINS, EQUALS, REGEX_MATCH
value string あり - 予想されるフィールド値

証明書発行者のアサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "CERTIFICATE_ISSUER" を指定してください
field string あり - 発行者フィールド: CNO
operator string あり - CONTAINS, EQUALS
value string あり - 予想されるフィールド値

TCP アサーション

接続成功アサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "CONNECTION_SUCCESSFUL" を指定してください
value boolean あり - 予想される接続ステータス

レスポンスデータのアサーション

プロパティ タイプ 必須 デフォルト 説明
type 文字列 あり - "RESPONSE_DATA" を指定してください
operator string あり - CONTAINS, EQUALS, NOT_CONTAINS, REGEX_MATCH, STARTS_WITH, ENDS_WITH
value string あり - 予想されるレスポンスデータ
encoding string 不可 「UTF-8」 UTF-8, ASCII, HEX

データ抽出

エクストラクターを使用すると、後続のステップでの使用やレポートのために、レスポンスからデータをキャプチャできます。

抽出プロパティ

プロパティ タイプ 必須 デフォルト 説明
name 文字列 あり - 抽出されたデータの変数名
type string あり - 抽出タイプ: BODY
path string 不可 - 本文抽出用の JSONPath
regex string 不可 - 正規表現パターン
regexGroup integer 不可 0 正規表現キャプチャグループ (最小 0)

抽出名の検証

  • パターン: ^[a-zA-Z][a-zA-Z0-9_]*$

  • 英字で始まっている必要があります

  • 英字、数字、下線のみを含めることができます

制限 – 置換は、特定の ENUM 値を持つスキーマのフィールドには適用されません。

抽出タイプ

{ "name": "userId", "type": "BODY", "path": "$.user.id" }
{ "stepName": "loginAndExtract", "checkerType": "HTTP", "url": "https://api.example.com/login", "httpMethod": "POST", "body": "{\"username\":\"test\",\"password\":\"pass\"}", "extractors": [ { "name": "textVariable", "type": "BODY", "path": "$.myvalue" } ] }, { "stepName": "substituteVariable", "checkerType": "HTTP", "url": "https://api.example.com/get/${textVariable}", "httpMethod": "GET", "assertions": [ { "type": "BODY", "target": "JSON", "path": "$.users[0].name", "operator": "EQUALS", "value": "${textVariable}" } ] }