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