【AWS】集約したログを Data Firehose を使用して S3 バケットに格納する

AWS

背景

こちらの記事の続きものとして。同じく備忘録です。

手順

S3 バケットを用意する

ログ格納用のバケットを、Amazon S3 > バケット > バケットを作成 で作ります。今回はバケットタイプは汎用、ACL 無効、 パブリックアクセスをすべてブロック などデフォルトの設定で進めます。

また保存するライフサイクルを設定したい場合は、バケットを選択して 管理 > ライフサイクルルールを作成する でルールを定義しておきましょう。とりあえず7日のサイクルで消えるように設定してみました。

Data Firehose の設定

Amazon Data Firehose > Firehose ストリーム > Firehose ストリームを作成 からFirehose を作成しましょう。ソースで Direct PUT で送信先に S3 を指定します。

レコード変換オプションはそのまま、送信先の設定で S3バケット に先ほど作ったバケットを指定します。ログファイルを圧縮して保管したい場合は GZIP など好みのファイル形式にチェックを入れておきます。設定が終わったらそのままバケットを作成します。

CloudWatch が Firehose を使用するための Role の用意

IAM > ロール > ロールを作成 で、カスタム信頼ポリシーを設定します。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"Service": "logs.ap-northeast-1.amazonaws.com"
			},
			"Action": "sts:AssumeRole"
		}
	]
}

許可を追加 ページではなにも割り当てず、次に進みます。名前、確認、および作成 ページで名前を設定してロールを作成します。作成後、許可 > インラインポリシーを作成 でポリシーを付与します。

JSON のビューに変更してポリシーを付与します。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Effect": "Allow",
			"Action": [
				"firehose:PutRecordBatch",
				"firehose:PutRecord"
			],
			"Resource": "arn:aws:firehose:region:111122223333:deliverystream/PUT-S3-kir-thread-log"
		}
	]
}

"Resource" には先ほど作成した Firehose のリソースを設定します(Firehose のページ↓で確認できる ARN を設定すれば良いです)。

ポリシー名をつけて設定完了です。

Role の割り当て

作成している CloudWatch のログ設定から、サブスクリプションフィルター > Amazon Data Firehose サブスクリプションフィルターを作成 を選択します。

作った Firehose ストリームとロールを割り当てましょう。

このサブスクリプションフィルター名をつけて(SendToS3 とかにしました)、ストリーミングを開始します。結果として2件作られる形になります。

/aws/kinesisfirehose/PUT-S3-kir-thread-log は、ログが S3 に送れなかった場合の Firehose 自体のログが書き込まれることになります。こちらのログが残り続けるのが不安であれば、同じように アクション > 保持設定を編集 で適当に保持期間を設定しておきましょう。

これで設定完了です。 S3 を見るとログが格納されていますね。Firehose 作成時に GZIP を指定したので、.gz で保管できています。

おわりに

今回は自分が個人で使っているインスタンスに対して設定を実際に試してみました。永久無料枠があるので大した費用にはならない…はずなのですが、怖いのでしばらく料金表はこまめにチェックすることにします。

おまけ

料金について

CloudWatch, Data Firehose, S3 の構成は基本的に CloudWatch が料金の大半を占めることになります。

CloudWatch

Amazon CloudWatch Pricing
Explore Amazon CloudWatch pricing with AWS free tier. Simply pay for what you use. No up-front commitment or minimum fee.
Collect (Data Ingestion)	
Standard $0.76 per GB/month

例えば月 10 GB のログを収集する場合、 月額 $7.60 くらいです。

Data Firehose

Data Firehose Pricing
First 500 TB / month $0.036
※ Direct PUT > Other destinations > Asia Pacific(Tokyo) 設定

例えば月 10 GB のログを送信するとき、月額 $0.36 くらいです。

S3

S3 Pricing
First 50 TB / Month $0.025 per GB

例えば 10 GB のログを保管するとき、月額 $0.25 くらいです(gz などにして圧縮している場合はもっと少なくなるはずです)。

コメント

タイトルとURLをコピーしました