
前回の記事では、Lightsail上のWordPressログをAWSの「CloudWatch Logs」に集約して、ブラウザから簡単に見られるようにしました。
しかし、CloudWatch Logsはそのまま放置するとデータが溜まり続け、無料枠(5GB/月)を超えると課金されてしまいます。 そこで今回は、**「CloudWatchに届いたログを、自動的にAmazon S3(超格安のストレージ)へ移動させて永久保存する仕組み」**を作ります!
これを構築すれば、どれだけログが溜まっても**維持費は月に数円〜数十円(月間数万PVなら実質0円レベル)**に抑えられます。 今回も初心者向けに、画面のクリック手順まで詳しく解説していきます!
今回の完成イメージ
- WordPressのログが
CloudWatch Logsに届く Amazon Data Firehose (旧: Kinesis Data Firehose)がログをキャッチするAmazon S3に自動でファイルとして整理・保存される!
簡単に言えば下記のようになります

💡 豆知識: 以前は「Kinesis Data Firehose」という名前でしたが、最近AWSのアップデートで**「Amazon Data Firehose」**に名前が変わりました。機能は同じなので安心してくださいね。
ログの「最終保管庫(S3バケット)」を作る
まずは、ログを永久保存するための箱(S3バケット)を用意します。
- AWSマネジメントコンソールの検索バーで**「S3」**と検索して開きます。

- 右上の**「バケットを作成」**ボタンをクリックします。

- バケット名に
yourblog-logs-2026など、好きな名前を入れます。(※世界中で自分だけのユニークな名前にする必要があります)

- **「パブリックアクセスをすべてブロック」**にチェックが入っていることを確認します。(ログという機密情報なので、絶対に非公開にします)

- 一番下までスクロールして、**「バケットを作成」**をクリックします。

正常に作成されれば、ひとまずOkです

ログの「自動配達員(Firehose)」を作る
次に、CloudWatchからS3へログを運んでくれる配達員を設定します。
- 検索バーで**「Firehose」**と検索し、「Amazon Data Firehose」を開きます。

- **「Firehose ストリームを作成」**をクリックします。

- 送信元と送信先を以下のように設定します。
- 送信元 (Source):
Direct PUT - 送信先 (Destination):
Amazon S3
- 送信元 (Source):

- Firehose ストリーム名に
wp-log-delivery-streamと入力します。

宛先の設定(Destination settings)で、**「参照」**ボタンを押し、ステップ1で作ったS3バケットを選択します。私はpolepolelife-logs と名付けたのでそれを使います

一番下までスクロールして、**「Firehose ストリームを作成」**をクリックします。 (※作成完了まで数分かかることがあります) 時々エラーになるときがありますが、その場合数分待ってから、「Firehose ストリームを作成」をクリックしてください

下記のように作成されればOKです

CloudWatchに「通行証(IAMロール)」を渡す
⚠️ ここが一番の「ハマりポイント」です! CloudWatchが勝手にFirehoseへデータを送ることはできないため、「送ってもいいよ」という許可証(IAMロール)を作成します。

1. ロールの作成画面へ 検索バーで**「IAM」と検索 > 左メニューの「ロール」** > **「ロールを作成」**をクリック。

2. 信頼されたエンティティの選択 「カスタム信頼ポリシー」を選択し、以下のコードをそのまま丸ごと上書きコピー&ペーストします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "logs.ap-northeast-1.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

貼り付けたら「次へ」をクリック。
3. 許可を追加 ここは何もチェックせずに、そのまま「次へ」をクリックします。(後で手動で追加します)

4. ロールの名前を決める ロール名に PolePoleCWLtoFirehoseRoleと入力し、右下の「ロールを作成」をクリックします。

5. 権限(ポリシー)を付与する 作成した PolePoleCWLtoFirehoseRoleを一覧から探してクリックします。

「許可を追加」>「インラインポリシーを作成」をクリックし、「JSON」タブを選んで以下のコードを丸ごと上書きコピペします。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"firehose:PutRecord",
"firehose:PutRecordBatch"
],
"Resource": "*"
}
]
}

「次へ」を押し、ポリシー名に FirehoseDeliveryPolicy と入力して「ポリシーの作成」をクリックします。 これで最強の通行証が完成しました!

CloudWatchとFirehoseを合体させる!
いよいよ最後の仕上げです。前回の記事で作ったCloudWatch Logsに、「このログをFirehoseに流してね」という指示(サブスクリプションフィルター)を出します。
- 検索バーで**「CloudWatch」**と検索して開きます。

- 左メニューから「ログ」>**「ロググループ」**を開き、前回作成した
lightsail-wp-access-logをクリックします。

- **「サブスクリプションフィルター」**というタブを開きます。

- **「作成」ボタンを押し、「Amazon Data Firehose サブスクリプションフィルターを作成」**を選択します。
- 以下の通りに設定します。

- Firehose ストリーム: ステップ2で作った
wp-log-delivery-streamを選択

- IAM ロール: ステップ3で作った PolePoleCWLtoFirehoseRole を選択

- ログの形式:
その他の (Other)を選択
サブスクリプションフィルターのパターン: 空白のままでOKです(すべてのログを送るため)
サブスクリプションフィルター名: send-to-firehose と入力

右下の**「ストリーミングを開始」**をクリックします!

完了!S3にログが届いているか確認しよう
お疲れ様でした!これで自動連携システムは完成です。
ログは「5分ごと」または「5MBたまるごと」にまとめてS3へ送られます。ご自身のブログに何度かアクセスしてアクセスログを発生させた後、5分〜10分ほど待ってからS3の画面を見てみましょう。

S3バケットの中に 2026/02/18/... のように年・月・日のフォルダが自動的に作成され、その中にログファイルが保存されていれば大成功です! (※エラーログ lightsail-wp-error-log も保存したい場合は、ステップ4の手順をエラーログ側でも同じように繰り返すだけでOKです)

まとめ
これで、あなたのブログは**「サーバーに負荷をかけず」「実質0円で」「半永久的に」**アクセスログを保存できる、エンタープライズ(大企業)並みのデータ基盤を手に入れました!
次回は、このS3に溜まった大量のログを、SQLを使って一瞬で分析できる魔法のツール**「Amazon Athena」**の使い方をご紹介します。お楽しみに!



