こんにちは、連休はヴィンランド・サガを読み返そうかなと思っています
さて、今回は ECSのログをkinesisを利用してS3へ長期保存する方法を書いていきます
※ECS周りは設定は記載しません
▼構成と流れ
ECS → CloudWatch Logs → サブスクリプションフィルター → Kinesis(Amazon Data Firehose) → S3 バケット
▼手順
1. ログ保存用S3バケットの作成
Amazon S3 > バケット > バケットを作成 を押下
→バケット名は全世界で被らないようにする必要があります
2. Kinesis(Amazon Data Firehose) の作成
Amazon Data Firehose > Firehose ストリーム > Firehose ストリームを作成 を押下
ソース:Direct Put
送信先:Amazon S3
Firehose ストリーム名:なんでもOK
レコードを変換および転換:すべてチェックなし
S3 バケット:1で作成したS3バケット
改行の区切り文字:有効ではありません
動的パーティショニング:有効ではありません
S3 バケットプレフィックス:なんでもOK
S3 バケットと S3 エラー出力プレフィックスタイムゾーン:Asia/Tokyo
バッファサイズ:5MiB (デフォルト)
バッファ間隔:300 (デフォルト)
データレコードの圧縮:有効ではありません
Amazon CloudWatch エラーのログ記録:有効
サービスアクセス:IAM ロールを作成または更新
3. CloudWatch Logs 用のIAMロールとポリシーを作成
3.1. IAMロールの作成
・カスタム信頼ポリシーを下記で作成する
{
"Statement": {
"Effect": "Allow",
"Principal": { "Service": "logs.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:SourceArn": "arn:aws:logs:${RESION}:${AWSアカウントID}:*"
}
}
}
}
・何も選択せずに次へを押下する
・下記でポリシーを作成する
ロール名:なんでもOK
説明:空白
信頼ポリシー:そのままでOK
許可ポリシー:一旦何も付与しない
3.2. IAMポリシーの作成
IAM > ロール > 作成したIAMロール > インラインポリシーの作成
・ポリシーエディタを選択し、下記で作成する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "firehose:ListDeliveryStreams",
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"iam:PassRole",
"firehose:*"
],
"Resource": [
"arn:aws:iam::${AWSアカウントID}:先ほど作成したIAMロール名",
"arn:aws:firehose:${RESION}:${AWSアカウントID}:先ほど作成したKinesis Data Firehose の配信ストリーム名"
]
}
]
}
・下記で作成する
ポリシー名:なんでもOK
説明:空白
このポリシーで定義されている許可:Firehose と IAM
4. サブスクリプションフィルターの作成
CloudWatch > ロググループ > ECSのロググループ > サブスクリプションフィルター > 作成 > Amazon Data Firehose サブスクリプションフィルターを作成
・下記で作成する
送信先アカウント:現在のアカウント
Amazon Data Firehose ストリーム:2で作成したFirehose ストリーム
既存のロールを選択:3で作成したIAMロール
サブスクリプションフィルター名:なんでもOK
ログの形式:その他
・ストリーミングを作成
5. ログの確認
S3バケットの上にzip圧縮されたログが出力されたことを確認する
