Ansible Automation Platform (AAP) の AWS 経由の外部ロギング
概要
このガイドでは、Amazon Web Services (AWS) を使用して、Ansible Automation Platform (AAP) から外部のログアグリゲーターに自動化ログを転送するための標準設定について説明します。
AAP は多くのプラットフォームに直接ログを記録できますが、このアーティクルでは サーバーレスアーキテクチャー (Amazon API Gateway + Kinesis Firehose) を使用したエンドツーエンドの例を示します。これは、専用の "ログコレクター仮想" マシン、OS ファイアウォール、パッチ適用を管理する必要がなくなり、AAP がデータを送信するための安全な HTTPS エンドポイントが提供されることから、AWS 環境に推奨されるパターンです。
ステップ 1: インフラストラクチャーのセットアップ (AWS)
A. データストリームの作成 (Kinesis Firehose)
このサービスは、ログを受信してストレージに書き込むパイプラインとして機能します。
- AWS コンソールで Kinesis に移動します。
- Create Delivery Stream を選択します。
- Source: Direct PUT。
- Destination: Amazon S3。
- S3 Bucket: 新しいバケット (例: aap-automation-logs-2026) を作成するか、既存のバケットを選択します。
- Buffering: 5 MB または 300 秒 に設定します (標準の推奨設定)。
- Create Delivery Stream をクリックします。
B. セキュリティーロール (IAM) の作成
重要なステップ: 権限がない場合、API Gateway は Firehose に書き込めません。
1. API ゲートウェイロールの作成
- IAM > Roles > Create Role に移動します。
- Trusted Entity: API Gateway を選択します。
- Permissions: 次の JSON を使用して新しいインラインポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "firehose:PutRecord",
"Resource": "arn:aws:firehose:us-east-1:123456789012:deliverystream/YOUR_STREAM_NAME"
}
]
}
- Role Name: APIGateway-Firehose-Proxy-Role。
- Copy the Role ARN: 次のステップでこれが必要になります。
C. リスナーの作成 (API ゲートウェイ)
これにより、AAP が通信するパブリック HTTPS URL が作成されます。
- API Gateway に移動します。
- REST API を作成します。
- Create Resource: 名前を log にします (URL は .../v1/log になります)。
- Create Method: POST を選択します。
- Integration Type: AWS Service。
- AWS Service: Firehose。
- Action: PutRecord。
- Execution Role: ステップ 1B で作成した APIGateway-Firehose-Proxy-Role の ARN を貼り付けます。
- Deploy API: ステージ (例: v1) を選択します。
- Copy the Invoke URL: (例: https://xyz123.execute-api.us-east-1.amazonaws.com/v1/log)。
ステップ 2: 送信者の設定 (AAP)
Ansible Automation Platform の送信先を新しいサーバーレスコレクターに指定します。
- AAP で、Settings > Logging に移動します。
- Enable External Logging: On に切り替えます。
- Logging Aggregator Type: Splunk を選択します (これは AWS と互換性のある JSON 形式です)。
- Logging Aggregator: API ゲートウェイからコピーした Invoke URL (例: https://xyz123.../v1/log) を入力します。
- Logging Aggregator Port: 空白のままにするか、443 (HTTPS のデフォルト) に設定します。
- Logging Aggregator Protocol: HTTPS。
- Save and Test をクリックします (ボタンは緑色に変わります)。
ステップ 3: データ分析の設定 (Amazon Athena)
テキストファイルを保存する仮想マシンとは異なり、S3 ではデータを読み取るためにクエリーエンジンが必要です。Amazon Athena を使用して、ログバケットを検索可能なデータベースに変換します。
- Amazon Athena に移動します。
- Query Editor を開きます。
- 次の SQL コマンドを実行して、"Raw" テーブルを作成します。この方法は、システムログでの JSON 解析エラーを回避するために推奨されています。
CREATE EXTERNAL TABLE IF NOT EXISTS aap_raw_debug (
raw_line string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\0'
LINES TERMINATED BY '\n'
LOCATION 's3://aap-automation-logs-2026/';
ステップ 4: 検証 (視覚的検証)
ログは AAP ➔ API Gateway ➔ Firehose ➔ S3 で流れるようになります。パイプラインが機能していることを確認するには、Amazon Athena を使用して、特定の自動化ジョブが正常に完了することを確認します。
検証クエリー
この SQL クエリーを Athena で実行します。具体的には "Finalize Run" イベントを確認します。これは、システムノイズを除去しつつ、コントローラーがジョブの処理を完了したことを確認します。
SELECT
-- 1. Get the Timestamp (Cast to string to prevent serialization errors)
CAST(from_unixtime(CAST(json_extract_scalar(raw_line, '$.time') AS double)) AS VARCHAR) as Time,
-- 2. Extract the Success Message
json_extract_scalar(raw_line, '$.event.message') as Message,
-- 3. Extract the Final Status (e.g., 'finalize_run')
json_extract_scalar(raw_line, '$.event.lifecycle_data.state') as Status
FROM aap_raw_debug
WHERE raw_line LIKE '%finalize_run%' -- Filter for the completion event
ORDER BY Time DESC
LIMIT 1;
期待される結果
最新のジョブの完了を示す 1 行が表示されます。

サンプル JSON ペイロード:
これは、上記の出力を生成した S3 でキャプチャーされた生データです。
{"@timestamp":"2026-01-16T01:04:47.612Z","message":"projectupdate-611 waiting {\"type\": \"projectupdate\", \"task_id\": 611, \"state\": \"waiting\", \"work_unit_id\": null, \"task_name\": \"Demo Project\"}","host":"automation-controller-task-79d47497cf-q7xvj","level":"INFO","logger_name":"awx.analytics.job_lifecycle","lifecycle_data":{"type":"projectupdate","task_id":611,"state":"waiting","work_unit_id":null,"task_name":"Demo Project"},"organization_id":1,"cluster_host_id":"automation-controller-task-79d47497cf-q7xvj","tower_uuid":null}}
サポート対象のログアグリゲーター
このガイドでは AWS ネイティブサービスを使用していますが、このアーキテクチャーは以下の転送先にも対応しています。
- Splunk: Kinesis Firehose で宛先を "Splunk" に指定します。
- Datadog: Kinesis Firehose で宛先を "Datadog" に指定します。
- Elastic Stack (ELK): Kinesis Firehose で宛先を "Elasticsearch" に指定します。
- New Relic: Kinesis Firehose で宛先を "New Relic" に指定します。
参考ドキュメント
- Amazon API Gateway as a Kinesis Proxy:
https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-kinesis.html - Querying JSON in Athena:
https://docs.aws.amazon.com/athena/latest/ug/querying-JSON.html
Comments