AWS CLI を使用してログデータを Amazon S3 にエクスポートする
次の例では、エクスポートタスクを使用して、すべてのデータを my-log-group
という名前の CloudWatch Logs ロググループから my-exported-logs
という名前の Amazon S3 バケットにエクスポートします。この例では、「my-log-group
」というロググループを作成済みであることを前提としています。
AWS KMS によって暗号化された Amazon S3 バケットへのログデータのエクスポートはサポートされていません。
ステップ 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 ユーザーを作成します。
ユーザーを作成し、アクセス許可を割り当てるには
IAM ユーザーを作成するには、次のコマンドを入力します。
aws iam create-user --user-name
CWLExportUser
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 $S3POLICYARNaws iam attach-user-policy --user-name
CWLExportUser
--policy-arn $CWLPOLICYARN2 つの管理ポリシーがアタッチされていることを確認します。
aws iam list-attached-user-policies --user-name
CWLExportUser
CWLExportUser
IAM ユーザーの IAM 認証情報を含むように AWS CLI を設定します。詳細については、「AWS CLI の設定」を参照してください。
ステップ 3: Amazon S3 バケットに許可を設定する
デフォルトでは、すべての Amazon S3 バケットとオブジェクトはプライベートです。バケットを作成したアカウント (リソース所有者) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。ただし、リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。
Amazon S3 バケットに対する権限を設定するには
-
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-east-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-east-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-east-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-east-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-east-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-east-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
" } } ] }
-
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 --task-name "
my-log-group-09-10-2015
" --log-group-name "my-log-group
" --from1441490400000
--to1441494000000
--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
", "tTo":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 コマンドを使用して、タスクが正常にキャンセルされたことを確認できる点に注意してください。