はじめに
「Ansible Automation Platform(AAP)で生成されるログを、安全かつ自動で保管したい」そんな要望は多くの現場で見られます。
本記事では、AWSのFirehoseとAPI Gatewayを活用し、AAPのログをS3に転送・蓄積するための具体的な手順を解説します。
「クラウド上でのログ管理を自動化したい」「運用監査やトラブルシュートのためにログを長期保存したい」といった方に最適な内容です。
AWSの基本サービスを組み合わせることで、堅牢なログ保管基盤を構築できます。実際の設定例や注意点も交えて、初めての方でも再現できるよう丁寧にまとめました。
ぜひ、日々の運用改善やセキュリティ強化にお役立てください。
TL;DR
この記事を読めば、以下のことができるようになります
- AAPのログをAWS S3に自動で保管する仕組みを構築できる
- API Gateway・Firehose・S3の連携構成が理解できる
- 必要なIAMポリシーやロールの作成手順がわかる
- AAP側の設定例や動作確認方法も把握できる
前提条件
- AWS上にAAPが構築済みであること
- Amazon S3にバケットが作成済みであること
- 名前は、
s3-aap-log-testとします
- 名前は、
実行環境
- Ansible Automation Platform: 2.6
- Automation Controller: 4.7.6
なぜ、S3だけではだめなのか?
Ansible Automation Platform(AAP)のログを直接S3に送信する仕組みは、標準機能としては用意されていません。
理由は主に以下の通りです。
- AAPはS3への直接書き込みに対応していない(標準のログ転送先としてS3を指定できない)
- S3は「オブジェクトストレージ」であり、HTTPリクエストで直接ログを1件ずつ受け取るAPIではない
- ログの整形やバッファリング、圧縮などの前処理ができない
- セキュリティやアクセス制御の観点からも、直接S3に外部から書き込ませるのは推奨されない
そのため、API GatewayやFirehoseなどのAWSサービスを中継し、
「HTTPで受け取ったログを安全にS3へ転送・蓄積する」構成が現実的かつ安全な方法となります。
各サービスの役割
-
AAP(Ansible Automation Platform):
- 各種自動化ジョブの実行やシステム管理を行い、実行結果やシステムの状態をログとして出力する
- 今回はこのログを外部に送信する
-
API Gateway:
- AAPなど外部システムからのHTTPリクエスト(ログデータ)を受け付ける窓口
- セキュリティや認証、リクエスト変換なども担当
-
Firehose(Amazon Data Firehose):
- API Gatewayから受け取ったデータをバッファリングし、まとめてS3などのストレージに転送
- データの整形や圧縮、暗号化などの前処理も可能
-
S3(Amazon Simple Storage Service):
- 転送されたログデータを安全に長期保管するストレージ
- 監査や検索、分析などの用途で活用できる
詳細
1. Firehose書き込み用ポリシーの作成
-
IAM>アクセス管理>ポリシーを選択 -
ポリシーの作成を選択 -
ポリシーエディタにJSON形式で以下を入力し、次へを選択{ "Version": "2012-10-17", "Statement": [ { "Sid": "PutToFirehose", "Effect": "Allow", "Action": [ "firehose:PutRecord" ], "Resource": [ "*" ] } ] }セキュリティに関する注意)
上記のJSONでは設定を簡略化するため、Resourceは*としていますが、本番環境ではセキュリティリスクを抑えるため、作成した Firehose ストリームの ARN を指定してください。 -
以下を入力して、
ポリシーの作成を選択- ポリシー名: policy-firehose-write-test
2. S3書き込み用ポリシーの作成
-
IAM>アクセス管理>ポリシーを選択 -
ポリシーの作成を選択 -
ポリシーエディタにJSON形式で以下を入力し、次へを選択- Resourceはテスト用なので
*を入れていますが、本番で使うのであればS3のARNを入力
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3Write", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "*" ] } ] }セキュリティに関する注意)
上記のJSONでは設定を簡略化するため、Resourceは*としていますが、本番環境ではセキュリティリスクを抑えるため、S3バケット(およびその中身)のARNを指定してください。 - Resourceはテスト用なので
-
以下を入力して、
ポリシーの作成を選択- ポリシー名: policy-s3-write-test
3. API Gateway用ロールの作成
-
IAM>アクセス管理>ロールを選択 -
ロールを作成を選択 - 以下を入力して、
次へを選択- 信頼されたエンティティタイプ: AWSのサービス
- ユースケース: API Gateway
-
許可を追加では何もせずに次へを選択 - 以下を入力して、
ロールを作成を選択- ロール名: role-api-gateway-test
- 作成されたロールを開いて、
アクセス許可を追加>ポリシーをアタッチを選択 - Firehose書き込み用ポリシー(
policy-firehose-write-test)をチェックしてアクセス許可を追加を選択
4. Firehose用ロールの作成
-
IAM>アクセス管理>ロールを選択 -
ロールを作成を選択 - 以下を入力して、
次へを選択- 信頼されたエンティティタイプ: AWSのサービス
- ユースケース: Firehose
- S3書き込み用ポリシー(
policy-s3-write-test)をチェックして次へを選択 - 以下を入力して、
ロールを作成を選択- ロール名: role-firehose-test
5-1. Firehoseの作成
-
Amazon Data Firehose>Firehoseストリームを選択 -
Firehose ストリームを作成を選択 - 以下を入力して、
Firehose ストリームを作成を選択- ソースと送信先を選択
- ソース: Direct PUT
- 送信先: Amazon S3
- Firehose ストリーム名: stream-test
- 送信先の設定
- S3 バケット:
参照より、作成済みのバケット(s3-aap-log-test)を選択 - S3 バケットと S3 エラー出力プレフィックスタイムゾーン
- Asia/Tokyo
- バッファのヒント、圧縮、ファイル拡張子、暗号化
- バッファ間隔: 60秒
- Firehoseがデータをため込む時間です。テスト用なので、時間は短くしておきます
- バッファ間隔: 60秒
- S3 バケット:
- 詳細設定
- サービスアクセス: 既存の IAM ロールを選択
- 作成したFirehose用ロール(
role-firehose-test)を選択
- 作成したFirehose用ロール(
- サービスアクセス: 既存の IAM ロールを選択
- ソースと送信先を選択
- Firehose ストリームが作成されるのを待ちます
5-2. Firehoseの動作確認
- 作成したFirehose ストリームにある
デモデータでテストより、デモデータの送信を開始を選択 - 作成済みのバケット(
s3-aap-log-test)にファイルが作成されることを確認する - 確認できたら、
デモデータの送信を停止を選択
6-1. API Gatewayの作成
-
Amazon Data Firehose>APIを選択 -
APIを作成を選択 - APIタイプの選択では、
REST APIの右にある構築を選択 - 以下を入力して、
APIを作成を選択- 新しいAPI
- API名: api-gateway-test
- APIエンドポイントタイプ: リージョン
- セキュリティポリシー: 必要に応じて選択
- IPアドレスのタイプ: IPv4
6-2. API Gatewayにおけるリソースの作成
- 作成したAPIで、
リソースを作成を選択 - 以下を入力して、
リソースを作成を選択- リソースパス:
/ - リソース名:
logs
- リソースパス:
6-3. API Gatewayにおけるメソッドの作成
- 作成したリソース(
logs)をアクティブにした状態で、メソッドを作成を選択 - 以下を入力して、
メソッドを作成を選択- メソッドタイプ: POST
- 結合タイプ: AWSのサービス
- AWS リージョン: ap-northeast-1
- AWSのサービス: Firehose
- HTTP メソッド: POST
- アクションタイプ: アクション名を使用
- アクション名: PutRecord
- 実行ロール: 作成したAPI Gateway用ロール(
role-api-gateway-test)のARNを入力 - コンテンツの処理: パススルー
6-4. API Gatewayにおけるマッピングテンプレートの追加
- 作成したメソッド(
POST)を選択し、結合リクエストタブの編集を選択 -
マッピングテンプレートに以下を追加して、保存を選択-
コンテンツタイプ
application/json
-
テンプレート本文
-
DeliveryStreamNameは前の手順で作成したFirehoseの名前 - 下記のように
$input.bodyの後に改行すると、AAPから出力されるログごとにデータが改行されるようになる
#set($data = "$input.body ") { "DeliveryStreamName": "stream-test", "Record": { "Data": "$util.base64Encode($data)" } } -
-
6-5. API Gatewayの動作確認・デプロイ
-
作成したメソッド(
POST)を選択し、テストタブを開く -
リクエスト本文に以下を入力して、
テストを選択{"hoge": "hoge"} -
以下の状態であることを確認する
- レスポンス本文の
RecordIdに中身が入っていること - 作成済みのバケット(
s3-aap-log-test)にファイルが作成されること
- レスポンス本文の
-
APIをデプロイを選択し、ステージは新しいステージを選択 -
ステージ名を入力(今回は
prod)して、デプロイを選択 -
ステージごとのURLが発行されます
-
今回AAPに使用するのは下記のようになります
https://<発行された文字列>.execute-api.ap-northeast-1.amazonaws.com/prod/logs
-
7-1. AAPの設定
- AAPで
設定>Automation Execution>Loggingにある編集を選択 - 以下を入力して、
Saveを選択-
Logging Aggregator: 前の手順の最後で発行されたURL(
https://~/prod/logs) -
Logging Aggregator Port: 443
-
Logging Aggregator Type: other
-
Loggers Sending Data to Log Aggregator Form
-
出力したいログをリスト形式で記入(以下は記入例)
- awx - activity_stream - job_events
-
-
Logging Aggregator Protocol: HTTPS/HTTP
-
オプション
-
Enable External Loggingをアクティブにする
-
-
7-2. AAPログ送信の動作確認
-
Automation Execution>テンプレートより、適当なテンプレートを実行 - 作成済みのバケット(
s3-aap-log-test)にファイルが作成されることを確認する
さいごに
本記事では、Ansible Automation Platform(AAP)のログをAWS S3に安全かつ自動で保管するための構成と手順を解説しました。
API GatewayやAmazon Data Firehoseを活用することで、運用負荷を抑えつつ、ログ管理基盤を実現できます。
この仕組みは、監査・トラブルシュート・セキュリティ強化など、さまざまな運用シーンで役立ちます。
ぜひ、ご自身の環境や要件に合わせてカスタマイズし、より良い運用に役立ててください。
参考URL
-
Red Hat Documentation > ロギングのセットアップ
- AAP(Ansible Automation Platform)で外部ロギングを設定するための公式手順
-
Amazon AWS Documentation > Firehose ストリームのソースと宛先を選択する
- Amazon Data Firehoseのストリーム作成やS3連携など、構築時に参考になるAWS公式ドキュメント