Amazon CloudWatch Logs
ユーザーガイド

AWS CLI を使用した Amazon S3 へのログデータのエクスポート

次の例では、エクスポートタスクを使用して、すべてのデータを my-log-group という名前の CloudWatch Logs ロググループから my-exported-logs という名前の Amazon S3 バケットにエクスポートします。この例では、「my-log-group」というロググループを作成済みであることを前提としています。

ステップ 1: Amazon S3 バケットを作成する

CloudWatch Logs 専用に作成したバケットを使用することをお勧めします。ただし、既存のバケットを使用する場合は、ステップ 2 に進むことができます。

注記

Amazon S3 バケットは、エクスポートするログデータと同じリージョンに存在している必要があります。CloudWatch Logs では、別のリージョン内の Amazon S3 バケットへのデータのエクスポートをサポートしていません。

AWS CLI を使用して Amazon S3 バケットを作成するには

コマンドプロンプトで、次の create-bucket コマンドを実行します。ここで、LocationConstraint はログデータをエクスポートするリージョンです。

aws s3api create-bucket --bucket my-exported-logs --create-bucket-configuration LocationConstraint=us-east-2

出力例を次に示します。

{ "Location": "/my-exported-logs" }

ステップ 2: Amazon S3 および CloudWatch Logs へのフルアクセスを持つ IAM ユーザーを作成する

以下のステップで、必要なアクセス許可を持つ IAM ユーザーを作成します。

ユーザーを作成し、アクセス許可を割り当てるには

  1. IAM ユーザーを作成するには、次のコマンドを入力します。

    aws iam create-user --user-name CWLExportUser
  2. IAM 管理ポリシーを、先ほど作成した IAM ユーザーにアタッチします。

    export S3POLICYARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].{ARN:Arn}' --output text)
    export CWLPOLICYARN=$( aws iam list-policies --query 'Policies[?PolicyName==`CloudWatchLogsFullAccess`].{ARN:Arn}' --output text)
    aws iam attach-user-policy --user-name CWLExportUser --policy-arn $S3POLICYARN
    aws iam attach-user-policy --user-name CWLExportUser --policy-arn $CWLPOLICYARN
  3. 2 つの管理ポリシーがアタッチされていることを確認します。

    aws iam list-attached-user-policies --user-name CWLExportUser
  4. IAM ユーザー CWLExportUser の IAM 認証情報を含むように AWS CLI を設定します。詳細については、「AWS CLI の設定」を参照してください。

ステップ 3: Amazon S3 バケットにアクセス許可を設定する

デフォルトでは、すべての Amazon S3 バケットとオブジェクトはプライベートです。バケットを作成したアカウント (リソース所有者) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。ただし、リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。

Amazon S3 バケットに対する権限を設定するには

  1. policy.json という名前のファイルを作成し、次のアクセスポリシーを追加します。このとき、Resource を S3 バケットの名前に変更し、Principal をログデータのエクスポート先のリージョンのエンドポイントに変更します。テキストエディタを使用してこのポリシーファイルを作成します。IAM コンソールは使用しないでください。

    • バケットが自分のアカウントにある場合は、次のポリシーを使用します。

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-west-2.amazonaws.com" } } ] }
    • バケットが別のアカウントにある場合は、次のポリシーを使用します。その際、前のステップで作成した IAM ユーザーを使用してステートメントを追加します。

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-west-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "AWS": "arn:aws:iam::SendingAccountID:user/CWLExportUser" } } ] }
    • バケットが別のアカウントにあり、IAM ユーザーではなく IAM ロールを使用している場合は、次のポリシーを使用します。

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-west-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "AWS": "arn:aws:iam::SendingAccountID:role/CWLExportUser" } } ] }
  2. put-bucket-policy コマンドを使用して、バケットでアクセスポリシーとして先ほど追加したポリシーを設定します。このポリシーにより、CloudWatch Logs がログデータを Amazon S3 バケットにエクスポートできるようになります。バケット所有者には、エクスポートされたすべてのオブジェクトに対する完全なアクセス権限があります。

    aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json

    警告

    バケットにアタッチされているポリシーがすでに 1 つ以上ある場合は、そのポリシーに CloudWatch Logs アクセスのステートメントを追加します。バケットにアクセスするユーザーに適したアクセス許可であることを確認するために、アクセス許可の結果セットを評価することをお勧めします。

ステップ 4: エクスポートタスクを作成する

ロググループからログをエクスポートするためのエクスポートタスクを作成すると、エクスポートするデータのサイズに応じて、エクスポートタスクに数秒から数時間かかる可能性があります。

AWS CLI を使用してエクスポートタスクを作成するには

コマンドプロンプトで、次の create-export-task コマンドを使用してエクスポートタスクを作成します。

aws logs create-export-task --profile CWLExportUser create-export-task --task-name "my-log-group-09-10-2015" --log-group-name "my-log-group" --from 1441490400000 --to 1441494000000 --destination "my-exported-logs" --destination-prefix "export-task-output"

出力例を次に示します。

{ "taskId": "cda45419-90ea-4db5-9833-aade86253e66" }

ステップ 5: エクスポートタスクを記述する

エクスポートタスクを作成すると、タスクの現在のステータスを取得できます。

AWS CLI を使用してエクスポートタスクを記述するには

コマンドプロンプトで、次の describe-export-tasks コマンドを使用します。

aws logs --profile CWLExportUser describe-export-tasks --task-id "cda45419-90ea-4db5-9833-aade86253e66"

出力例を次に示します。

{ "exportTasks": [ { "Destination": "my-exported-logs", "DestinationPrefix": "export-task-output", "ExecutionInfo": { "CreationTime": 1441495400000 }, "From": 1441490400000, "LogGroupName": "my-log-group", "Status": { "Code": "RUNNING", "Message": "Started Successfully" }, "TaskId": "cda45419-90ea-4db5-9833-aade86253e66", "TaskName": "my-log-group-09-10-2015", "To": 1441494000000 }] }

describe-export-tasks コマンドを使用する方法は 3 通りあります。

  • フィルタなし: すべてのエクスポートタスクが、作成順とは逆の順序でリストされます。

  • タスク ID によるフィルタ: 指定された ID のエクスポートタスクが存在する場合に、そのエクスポートタスクのみがリストされます。

  • タスクステータスによるフィルタ: 指定されたステータスのエクスポートタスクがリストされます。

たとえば、次のコマンドを使用して FAILED ステータスによってフィルタリングします。

aws logs --profile CWLExportUser describe-export-tasks --status-code "FAILED"

出力例を次に示します。

{ "exportTasks": [ { "Destination": "my-exported-logs", "DestinationPrefix": "export-task-output", "ExecutionInfo": { "CompletionTime": 1441498600000 "CreationTime": 1441495400000 }, "From": 1441490400000, "LogGroupName": "my-log-group", "Status": { "Code": "FAILED", "Message": "FAILED" }, "TaskId": "cda45419-90ea-4db5-9833-aade86253e66", "TaskName": "my-log-group-09-10-2015", "To": 1441494000000 }] }

ステップ 6: エクスポートタスクをキャンセルする

エクスポートタスクが PENDING または RUNNING の状態の場合、そのタスクをキャンセルできます。

AWS CLI を使用してエクスポートタスクをキャンセルするには

コマンドプロンプトで、次の cancel-export-task コマンドを使用します。

aws logs --profile CWLExportUser cancel-export-task --task-id "cda45419-90ea-4db5-9833-aade86253e66"

describe-export-tasks コマンドを使用して、タスクが正常にキャンセルされたことを確認できる点に注意してください。