🐕

AmplifyのアクセスログをGitHub Actionsを用いて日時でS3にアップロードする

2021/12/12に公開約2,100字

AmplifyのアクセスログはS3やCloudWatch LogsとのIntegrationがサポートされてない

Amplifyはとても便利なサービスです。
なので、アクセスログもコンソールぽちぽちやったらすぐにS3に転送されるようにできると思っていた...

できないです。

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

アクセスログを取得する方法は、下記の2通り

  • コンソールからアクセスログをダウンロードする
  • AWS CLIを用いてダウンロードURLを生成して、そこからダウンロードする

いちいちコンソールからダウンロードするのはめんどくさいので、当然AWS CLIを使って自動でS3に転送する仕組みを考えた。

自動でアクセスログをS3に転送したい

最初は下記を参考にEventBridgeでスケジュール発火してLambdaでとってくる方法を考えた。

https://dev.classmethod.jp/articles/amplify-accesslog-to-s3/

ただLambdaを作るのもちょっとめんどくさい。

AWS CLIとcurlで取得する方法発見。タイトルの通り、これならサクッと取得できそう。

https://zenn.dev/noid11/articles/6620e494816a4ea9b56b

ならGitHub Actionsで日時でワークフロー回せばいいんじゃね、と思い作ったのがこちら

name: ExportAccessLogsToS3

on:
  schedule
    - cron: '0 0 * * *'

env:
  TZ: UTC

permissions:
  id-token: write
  contents: read

jobs:
  ExportAccessLogsToS3:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ${{ secrets.AWS_REGION }}
          role-to-assume: ${{ secrets.ROLE_TO_ASSUME }}

      - name: Generate Access logs & Export CSV & Upload S3
        run: |
          START_TIME=`date -d "1 days ago" "+%Y-%m-%dT00:00:00"`
          END_TIME=`date -d "1 days ago" "+%Y-%m-%dT23:59:59"`
          DOMAIN_NAME=xxx.amplifyapp.com
          aws amplify generate-access-logs --start-time $START_TIME --end-time $END_TIME --domain-name $DOMAIN_NAME --app-id ${{ secrets.AMPLIFY_APP_ID }} --query logUrl | xargs curl -o /tmp/filename.csv
          aws s3 cp /tmp/filename.csv s3://${{ secrets.S3_BUCKET_NAME }}

日時で昨日のアクセスログを収集したCSVファイルをs3に転送しています。
AmplifyのアクセスログはUTCなので注意。(なのでenvでUTCを設定して、cronもUTC基準の0時で回しています)

余談ですが、最近GitHub Actions に AWS クレデンシャルを直接渡さずに IAM ロールが使えるようになってました。

https://docs.github.com/ja/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services

やり方もそんなに難しくなくて、最高です!

参考

Discussion

ログインするとコメントできます