hugoのブログ記事をs3にアップしてCloudfrontのキャッシュ削除までを一気に行うシェルスクリプトです。 Github Actions作るまでのつなぎとして使用するために作成。

1. IAMユーザを作っておく

s3の同期取るのとcloudfrontのキャッシュを削除するためのIAMユーザを作っておきましょう。
バケット名やアカウントID、CloudfrontのディストリビューションIDは環境に合わせて適宜調整してください。
(adminやpower権限を持つユーザですでにconfigureしていて、それを使うなら不要)
以下はIAMユーザにアタッチするIAMポリシーのjsonです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject",
                "cloudfront:CreateInvalidation"
            ],
            "Resource": [
                "arn:aws:s3:::${bucket}/*",
                "arn:aws:s3:::${bucket}",
                "arn:aws:cloudfront::${account_id}:distribution/*"
            ]
        }
    ]
}

2. configureする

上記ポリシーをアタッチしたユーザを作成し、アクセスキーを作成した上でconfigureしておく

aws configure --profile hugo

シェルスクリプト

フォルダやバケットのディレクトリは環境に合わせて適宜調整してください

# /bin/sh

s3_bucket=s3://$1/
cloudfront_dist=$2

# ブログを生成
hugo

# publicフォルダとs3の中身を同期
aws s3 sync public/ $s3_bucket --profile hugo

# キャッシュを削除
aws cloudfront create-invalidation --distribution-id $cloudfront_dist --paths "/*" --profile hugo

実行方法例

./hugo.sh hogehogefugafuga EXXXXXXXXXXXXX

これを定期実行させておくなり記事書いたら実行するなりすればOK