この記事でやること
CloudWatchLogsへ出力されたログをKinesis Data Firehoseを使用してS3へ転送する仕組みを構築する。
こちらの記事の続きでやっていきます。
前提
- CloudWatch Logsへログは転送済み
- Kinesis Data Firehoseを使用してログをS3に転送する
- CloudWatchLogsのサブスクリプションフィルターを設定する
実施手順
- ログ保管用バケットを作成
- Kinesis用IAMロールを作成する
- Kinesis Datafirehoseを作成
- CloudWatch Logsのサブスクリプションフィルターを作成&設定する
- S3にログが転送されているか確認する
S3バケットの作成
以下バケットを作成しました。
設定はデフォルト設定にしています
IAMロールの作成
Kinesis用ロールの作成
- 信頼ポリシー:Kinesis(Firehose)
- 権限ポリシー:AmazonS3FullAccess
CloudWatch Logsサブスクリプションフィルター用ロールの作成
- 信頼ポリシー
{
"Statement": {
"Effect": "Allow",
"Principal": { "Service": "logs.ap-northeast-1.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:SourceArn": "arn:aws:logs:ap-northeast-1:123456789012:*"
}
}
}
}
- 権限ポリシー:AmazonKinesisFirehoseFullAccess
※本来であればカスタムポリシーを作成してアタッチするべきですが今回マネージドポリシーを使用します。
Kinesis Data Firehoseを作成
以下設定で作成します
- ソース:Direct PUT
- 送信先:Amazon S3
- 送信先の設定:先ほど作成したS3を選択
- 詳細設定
- IAMロール:先ほど作成したKinesis用ロールを選択
サブスクリプションフィルターの設定
以下設定で作成します。
- 送信先アカウント:現在のアカウント
- 配信ストリーム:先ほど作成したFirehose
- IAMロール:先ほど作成したサブスクリプションフィルター用のIAMロール
その他設定はデフォルト
CloudWatch Logsにテストイベントを送信したいと思います。
$ aws logs put-log-events --log-group-name [log-group-name] --log-stream-name [log-stream-name] --log-events timestamp=$(node -e 'console.log(Date.now())'),message="test log message from AWS CLI"
オブジェクトが登録されているのでS3にログ転送されていることが確認できました。
今日はここまで。ありがとうございました!!