🤙

[Amplify] アクセスログの分割取得

に公開

最初に

Amplifyコンソールからアクセスログを取得する際、トラフィック量が多すぎて再試行を要求されるケースがあります。

Lambdaを使用すれば問題は解決しそうですが、何らかの関係でどうしてもコンソール上から取得したい場合はどうするべきかという備忘録として残しておきます。

では始めます。

Amplifyのアクセスログとは

公式にもある通り、Amplifyに対するトラフィックを全て記録してくれている機能です。
そのため、セキュリティ要件に対する対応としての選択肢に入る機能かと思います。

https://docs.aws.amazon.com/ja_jp/amplify/latest/userguide/using-access-logs.html

コンソール上では何が問題なのか

ずばり、以下2点です。

  • 1度のリクエストで2週間分までしか取得できない
    • コンソール上では終了日の指定ができないため、半強制的に、現時刻(終了日)から2週間前(開始日)までしか見れない
  • トラフィックが多すぎると分割しないと取得できない
    • 一気に2週間前まで取得しようとするとエラーになる可能性が高い
    • 分割しようにも、終了日が固定されてしまっているので、思い通りにログを取得できない

どう解決するのか

以下のAPIをコマンドで直接叩きます。
https://docs.aws.amazon.com/amplify/latest/APIReference/API_GenerateAccessLogs.html

aws amplify generate-access-logs --domain-name <value> --app-id <value> --start-time <value> --end-time <value>

こうすることで分割してアクセスログの取得が可能となります。

私の場合は。。

こうしてます。

① コマンド実行

aws amplify generate-access-logs --domain-name <value> --app-id <value> --start-time <value> --end-time <value> > logs.txt 2>&1

② log.txtに出力されたURLでtxtファイルをダウンロード
③ ダウンロードしたtxtファイルをcsvの拡張子に変更(見やすくするため)

まとめ

一時的な対応なので手動で行っておりますが、本来はLambdaを使用して人の手が介入しない仕組みにする方が保守性は高いと思いますが、今回のようなケースではそうもいかなかったので良い勉強になりました。

今回の記事が誰かのお役に立てれば幸いです。

NCDCエンジニアブログ

Discussion