0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ansible Automation Platform】ログをAmazon S3に保管したい

Last updated at Posted at 2026-02-03

はじめに

「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書き込み用ポリシーの作成

  1. IAM > アクセス管理 > ポリシー を選択

  2. ポリシーの作成を選択

  3. ポリシーエディタにJSON形式で以下を入力し、次へを選択

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

    セキュリティに関する注意)
    上記のJSONでは設定を簡略化するため、Resource*としていますが、本番環境ではセキュリティリスクを抑えるため、作成した Firehose ストリームの ARN を指定してください。

  4. 以下を入力して、ポリシーの作成を選択

    • ポリシー名: policy-firehose-write-test

2. S3書き込み用ポリシーの作成

  1. IAM > アクセス管理 > ポリシー を選択

  2. ポリシーの作成を選択

  3. ポリシーエディタに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を指定してください。

  4. 以下を入力して、ポリシーの作成を選択

    • ポリシー名: policy-s3-write-test

3. API Gateway用ロールの作成

  1. IAM > アクセス管理 > ロール を選択
  2. ロールを作成を選択
  3. 以下を入力して、次へを選択
    • 信頼されたエンティティタイプ: AWSのサービス
    • ユースケース: API Gateway
  4. 許可を追加では何もせずに次へを選択
  5. 以下を入力して、ロールを作成を選択
    • ロール名: role-api-gateway-test
  6. 作成されたロールを開いて、アクセス許可を追加 > ポリシーをアタッチ を選択
  7. Firehose書き込み用ポリシー(policy-firehose-write-test)をチェックしてアクセス許可を追加を選択

4. Firehose用ロールの作成

  1. IAM > アクセス管理 > ロール を選択
  2. ロールを作成を選択
  3. 以下を入力して、次へを選択
    • 信頼されたエンティティタイプ: AWSのサービス
    • ユースケース: Firehose
  4. S3書き込み用ポリシー(policy-s3-write-test)をチェックして次へを選択
  5. 以下を入力して、ロールを作成を選択
    • ロール名: role-firehose-test

5-1. Firehoseの作成

  1. Amazon Data Firehose > Firehoseストリーム を選択
  2. Firehose ストリームを作成を選択
  3. 以下を入力して、Firehose ストリームを作成を選択
    • ソースと送信先を選択
      • ソース: Direct PUT
      • 送信先: Amazon S3
    • Firehose ストリーム名: stream-test
    • 送信先の設定
      • S3 バケット: 参照より、作成済みのバケット(s3-aap-log-test)を選択
      • S3 バケットと S3 エラー出力プレフィックスタイムゾーン
        • Asia/Tokyo
      • バッファのヒント、圧縮、ファイル拡張子、暗号化
        • バッファ間隔: 60秒
          • Firehoseがデータをため込む時間です。テスト用なので、時間は短くしておきます
    • 詳細設定
      • サービスアクセス: 既存の IAM ロールを選択
        • 作成したFirehose用ロール(role-firehose-test)を選択
  4. Firehose ストリームが作成されるのを待ちます

5-2. Firehoseの動作確認

  1. 作成したFirehose ストリームにあるデモデータでテストより、デモデータの送信を開始を選択
  2. 作成済みのバケット(s3-aap-log-test)にファイルが作成されることを確認する
  3. 確認できたら、デモデータの送信を停止を選択

6-1. API Gatewayの作成

  1. Amazon Data Firehose > API を選択
  2. APIを作成を選択
  3. APIタイプの選択では、REST APIの右にある構築を選択
  4. 以下を入力して、APIを作成を選択
    • 新しいAPI
    • API名: api-gateway-test
    • APIエンドポイントタイプ: リージョン
    • セキュリティポリシー: 必要に応じて選択
    • IPアドレスのタイプ: IPv4

6-2. API Gatewayにおけるリソースの作成

  1. 作成したAPIで、リソースを作成を選択
  2. 以下を入力して、リソースを作成を選択
    • リソースパス: /
    • リソース名: logs

6-3. API Gatewayにおけるメソッドの作成

  1. 作成したリソース(logs)をアクティブにした状態で、メソッドを作成を選択
  2. 以下を入力して、メソッドを作成を選択
    • メソッドタイプ: POST
    • 結合タイプ: AWSのサービス
    • AWS リージョン: ap-northeast-1
    • AWSのサービス: Firehose
    • HTTP メソッド: POST
    • アクションタイプ: アクション名を使用
    • アクション名: PutRecord
    • 実行ロール: 作成したAPI Gateway用ロール(role-api-gateway-test)のARNを入力
    • コンテンツの処理: パススルー

6-4. API Gatewayにおけるマッピングテンプレートの追加

  1. 作成したメソッド(POST)を選択し、結合リクエストタブの編集を選択
  2. マッピングテンプレートに以下を追加して、保存を選択
    • コンテンツタイプ

      • application/json
    • テンプレート本文

      • DeliveryStreamNameは前の手順で作成したFirehoseの名前
      • 下記のように$input.bodyの後に改行すると、AAPから出力されるログごとにデータが改行されるようになる
      #set($data = "$input.body
      ") { "DeliveryStreamName": "stream-test", "Record": { "Data": "$util.base64Encode($data)" } }
      

6-5. API Gatewayの動作確認・デプロイ

  1. 作成したメソッド(POST)を選択し、テストタブを開く

  2. リクエスト本文に以下を入力して、テストを選択

    {"hoge": "hoge"}
    
  3. 以下の状態であることを確認する

    • レスポンス本文のRecordIdに中身が入っていること
    • 作成済みのバケット(s3-aap-log-test)にファイルが作成されること
  4. APIをデプロイを選択し、ステージは新しいステージを選択

  5. ステージ名を入力(今回はprod)して、デプロイを選択

  6. ステージごとのURLが発行されます

    • 今回AAPに使用するのは下記のようになります

      https://<発行された文字列>.execute-api.ap-northeast-1.amazonaws.com/prod/logs
      

7-1. AAPの設定

  1. AAPで設定 > Automation Execution > Logging にある編集を選択
  2. 以下を入力して、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ログ送信の動作確認

  1. Automation Execution > テンプレートより、適当なテンプレートを実行
  2. 作成済みのバケット(s3-aap-log-test)にファイルが作成されることを確認する

さいごに

本記事では、Ansible Automation Platform(AAP)のログをAWS S3に安全かつ自動で保管するための構成と手順を解説しました。
API GatewayやAmazon Data Firehoseを活用することで、運用負荷を抑えつつ、ログ管理基盤を実現できます。
この仕組みは、監査・トラブルシュート・セキュリティ強化など、さまざまな運用シーンで役立ちます。
ぜひ、ご自身の環境や要件に合わせてカスタマイズし、より良い運用に役立ててください。

参考URL


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?