

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

# スケジュールされたクエリの作成
<a name="create-scheduled-query"></a>

CloudWatch Logs Insights クエリを自動的に実行し、選択した送信先に結果を配信するスケジュールされたクエリを作成します。

## 前提条件
<a name="create-scheduled-query-prerequisites"></a>

スケジュールされたクエリを作成する前に、以下があることを確認してください。
+ **ロググループ** - 分析するデータを含む 1 つ以上のロググループ
+ **実行 IAM ロール** - 次のアクセス許可を持つ IAM ロール。
  + `logs:StartQuery` - CloudWatch Logs Insights クエリを開始するアクセス許可
  + `logs:GetQueryResults` - クエリ結果を取得するアクセス許可
  + `logs:DescribeLogGroups` - ロググループ情報にアクセスするためのアクセス許可。これは、ロググループ検出のプレフィックスベースのロググループにのみ必要です。
+ **送信先アクセス**許可 - 選択した送信先に対する追加の IAM アクセス許可:
  + Amazon S3 の送信先の場合: `s3:PutObject`
+ ** AWS CLI および API の使用** - CloudWatch Logs APIsを呼び出すアクセス許可を持つ AWS 認証情報を設定

IAM ポリシーの詳細な例については、「」を参照してください[Amazon CloudWatch Logs の Identity and Access Management](auth-and-access-control-cwl.md)。また、アカウントごとにスケジュールされたクエリは 1,000 件のみです。

------
#### [ Console ]

**スケジュールされたクエリを作成するには (コンソール)**

1.  で CloudWatch Logs コンソールを開きますか? [https://us-east-1.console.aws.amazon.com/cloudwatch/homeregion=us-east-1\#logsV2:logs-insights](https://us-east-1.console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:logs-insights)。

1. ナビゲーションペインで、**Logs Insights** を選択します。

1. **スケジュールされたクエリの作成**を選択します。

1. **クエリ定義**セクションで、次の操作を行います。

   1. **クエリ言語** で、リストから使用するクエリ言語を選択します。

   1. **クエリ文字列**には、ボックスに CloudWatch Logs Insights クエリを入力します。

   1. **ロググループ**で、リストからクエリするロググループを選択します。

1. **「スケジュール設定**」セクションで、次の操作を行います。

   1. **スケジュール式**では、クエリが実行されるタイミングを設定します。事前定義されたオプションから選択するか、カスタム cron 式を入力します。

   1. **「作成時に有効**」で、スケジュールがいつアクティブになるかを指定します。すぐに開始するか、YYYY/MM/DD 形式を使用して特定の日時から開始するかを選択します。

   1. **時間範囲**には、各クエリ実行のルックバック期間を指定します。実行時間からクエリまでの時間を定義する時間を分単位で入力します。

   1. **「無期限に続行する**」で、スケジュールの終了時刻を指定します。無期限に実行するか、YYYY/MM/DD 形式を使用して特定の日時まで実行するかを選択します。

1. コンソールには、設定に基づいて次の 3 つのスケジュールされたクエリ実行が表示され、クエリが実行される正確な日時が UTC で表示されます。

1. 「クエリ**結果を S3 に投稿する - オプション**」セクション (S3 送信先を使用している場合):

   1. **S3 バケット**の場合、送信先バケットが同じアカウントにある場合は**この** AWS アカウントを選択し、バケットが別の AWS アカウントにある場合は**別の**アカウントを選択し、バケット所有アカウントのアカウント ID を入力として指定します。

   1. **Amazon S3 URI** の場合は、結果が保存される Amazon S3 バケットとプレフィックス (例: ) を入力します`s3://my-bucket/query-results/`。**このアカウント**を選択した場合は、**Amazon S3 の参照**を選択して移動し、既存の Amazon S3 の場所を選択できます。

   1. (オプション) **KMS キー ARN** には、カスタマーマネージド AWS KMS キーの ARN を入力して、SSE-KMS を使用してクエリ結果を暗号化します。キーは、送信先の Amazon S3 バケットと同じ AWS リージョンにある必要があります。

1. Amazon **Amazon S3ロール**セクションで、次のいずれかのオプションを選択します。

   1. **デフォルトのアクセス許可を持つ新しいロールの自動作成**を選択すると、CloudWatch Logs がクエリ結果を Amazon S3 に配信するために必要なアクセス許可を持つ IAM ロールが自動的に設定されます。

   1. **既存のロールを使用して**、CloudWatch Logs がクエリ結果を Amazon S3 に配信するために必要なポリシーを持つ既存の IAM ロールを選択します。検索フィールドを使用して、リストから適切な IAM ロールを検索して選択します。

1. **スケジュールされたクエリ実行の IAM ロール**セクションで、次のいずれかのオプションを選択します。

   1. **デフォルトのアクセス許可を持つ新しいロールを自動作成**を選択して、CloudWatch Logs がスケジュールされたクエリを実行するために必要なアクセス許可を持つ IAM ロールを自動的にセットアップします。

   1. **既存のロールを使用して**、CloudWatch Logs がスケジュールされたクエリを実行するために必要なポリシーを持つ既存の IAM ロールを選択します。検索フィールドを使用して、リストから適切な IAM ロールを検索して選択します。

1. **スケジュールの作成**を選択して、スケジュールされたクエリを作成します。

------
#### [ AWS CLI ]

**スケジュールされたクエリを作成するには (AWS CLI)**
+ `create-scheduled-query` コマンドを使用して、新しいスケジュールされたクエリを作成します。

  ```
  aws logs create-scheduled-query \
      --name "ErrorAnalysisQuery" \
      --query-language "CWLI" \
      --query-string "fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)" \
      --schedule-expression "cron(8 * * * ? *)" \
      --execution-role-arn "arn:aws:iam::123456789012:role/CloudWatchLogsScheduledQueryRole" \
      --log-group-identifiers "/aws/lambda/my-function" "/aws/apigateway/my-api" \
      --state "ENABLED"
  ```

------
#### [ API ]

**スケジュールされたクエリを作成するには (API)**
+ `CreateScheduledQuery` アクションを使用して、新しいスケジュールされたクエリを作成します。次の例では、1 時間ごとに実行されるスケジュールされたクエリを作成します。

  ```
  {
      "name": "ErrorAnalysisQuery",
      "queryLanguage": "CWLI",
      "queryString": "fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)",
      "scheduleExpression": "cron(8 * * * ? *)",
      "executionRoleArn": "arn:aws:iam::123456789012:role/CloudWatchLogsScheduledQueryRole",
      "logGroupIdentifiers": ["/aws/lambda/my-function", "/aws/apigateway/my-api"],
      "state": "ENABLED"
  }
  ```

------

スケジュールされたクエリを作成したら、**スケジュールされたクエリ**ページから ListScheduledQueries API を使用してクエリを表示および管理できます。この API には、スケジュールされたすべてのクエリの名前、作成日、最終実行のステータス、最終トリガー時間、繰り返し頻度が表示されます。