はじめに
API Gateway アクセスログの送信先をCloudWatchロググループ ⇨ Firehoseストリームへ変更する対応を行ったので備忘録として記録しておきます。
目次
対応内容🔖
送信先変更に伴い、必要な作業は以下の2ステップです。
- API Gateway アクセスログの送信先およびS3へのログデータ配信元となるFirehoseストリームを新規作成する。
- API Gatewayの
ログとトレースの編集
にて、作成したFirehoseストリームARNをアクセスログの送信先として設定する。
ただ、実際試してみていくつか注意点・沼った部分ありましたのでそこも含めて以降に詳細を記載します!
※以降、添付上のリソース名等はマスクしていますのでご了承ください。
Firehoseストリームの作成
まずは、アクセスログの送信先となるFirehoseストリームを作成します。
- AWSコンソールから
Firehoseストリーム
で検索 > Amazon Data Firehoseのページを開く > 右上にあるFirehose ストリームを作成
をクリック
Firehoseストリーム名の詳細
- ストリーム名を入力
- ソース:
Direct PUT
を選択 - 送信先:Amazon S3を選択
- データ変換・動的パーティショニング:なし
-
変更を保存
をクリック
👆ストリーム名は必ずamazon-apigateway-
から始まる名前にしてください❗️
※ amazon-apigateway-
と付かないストリームは、AWS公式ガイド > 5 > bの注記の通り、API Gatewayのアクセスログの送信先ARNとして設定できません❗️
レコードを編集、変換、および転換
- 何もせずに
変更を保存
をクリック
送信先の設定
- ログデータの配信先となるS3バケットURLを入力
- S3バケットプレフィックスは、
apigateway/
等の分かりやすいものを入力 - バッファサイズ・バッファ間隔を入力
- その他設定はデフォルトのまま、
変更を保存
をクリック
サーバー側の暗号化を編集
- 何もせずに
変更を保存
をクリック
Amazon CloudWatch エラーのログ記録を編集
- 何もせずに
変更を保存
をクリック
(自分の場合、本Firehoseストリームはアクセスログ配信専用のため無効)
サービスアクセスを編集
-
既存のIAMロールを選択
から対象となるロールを選択(※なければ要作成) -
変更を保存
をクリック
タグを編集
- 必要あれば任意のタグを追加
例:環境名やプロジェクト名
・キー:Env、値:dev
・キー:Project、値:myProject
APIGatewayログとトレースの編集
Firehoseストリームが作成できれば、あとはそれをAPI Gatewayのアクセスログの送信先として設定するだけです!
- API Gatewayを開く > API > 対象APIを選択 > ステージ > ログとトレースの編集
-
アクセスログの送信先 ARN
へ上記で新規作成したFirehoseストリームARNを設定 -
変更を保存
をクリック
対応内容としては以上です❗️
この後は、ログの配信先となっているS3バケットへ意図する問題なくログが記録されるか確認してみてください。
processing-failedフォルダへ記録される場合
Firehoseストリームの設定に問題がなければ、API Gatewayから直接Firehoseストリーム経由でS3バケットへログが配信されるかと思います。
ただ仮に、S3バケット内のprocessing-failed
フォルダにログが記録されるようであれば以下をご確認ください❗️
- Firehoseストリームの
サービスアクセス
で設定しているIAMロールにアクセス権限があるか - Firehoseストリームの詳細で、
データ変換
が有効化されていないか
⇨ データ変換はCloudWatchLogsへログを記録する際に必要な設定です。
なので、直接Firehoseストリーム経由でS3保存であれば不要な設定となります。
まとめ📝
- API Gateway アクセスログの送信先として設定するFirehoseストリーム名は、必ずイニシャルに
amazon-apigateway-
を付ける必要がある。 - S3へのログ配信時に
processing-failed
になる場合は、以下を確認すると良い。- IAMロール側のアクセス権限が許可されているか
- Firehoseストリームのデータ変換が有効化されていないか