目次
このWebサイトは以下のように運用しています。
SimplyStaticsに年間1.5万円くらい払えば、直接S3にアップロードする機能も使えるみたいなのですが、あまり更新しないブログ(更新しろ)なので、そんなに費用かけるのもなぁ…という感じ。
そこで、Zipダウンロードするところまでは変わらず、S3にアップロードを楽にしようと思います。
※ この記事はMacを使っている人向けです。
WordPressを静的なファイルに変換してくれるツール。
要は投稿やページをPHPを介さずに直接HTML, CSS, JSを表示できます。
Mac標準の自動化ツール。
クイックアクションという機能を使うと、そのファイルに対してシェルを実行したりできます。
例えば、Finderで画像を右クリックしてサイズを変換したり、音楽を右クリックしてビットレートを変更したり…いろいろできるので重宝しています。
下記のインストール等が完了している前提で進みます。
このあたりは検索すれば五万と情報が出てくるのでここでは割愛します。
AWSコンソールにログインし、IAMユーザーを作成します。
これでIAMユーザーが作成できました。
ユーザー一覧画面に戻るとユーザーが作成されていることがわかります。このユーザーでAWSにアクセスするためのCredentials(認証情報)を取得しましょう。
※ 最後に出てくる情報は一度しか表示されないので、間違えて消さないようにしましょう。
profile名はなんでもいいのですが、IAMユーザーの名前に合わせてs3-uploader
にしておきます。
下記のコマンドを叩くと対話形式で認証情報の設定ができます。
$ aws configure --profile s3-uploader
AWS Access Key ID [None]: {先ほど取得したアクセスキー}
AWS Secret Access Key [None]: {先ほど取得したシークレットキー}
Default region name [None]: ap-northeast-1
Default output format [None]: json
ここまでで準備は完了です。
まず、Automatorを立ち上げましょう。「アプリケーション」の中にロボットのアイコンのAutomatorがあると思います。
起動して、「ファイル」→「作成」をすると、種類の選択画面が出てきます。今回はクイックアクションを作りたいので、そちらを選択すると、クイックアクションを作る画面が出てきます。
まず、画面上部でこのクイックアクションの対象を設定をしていきましょう。
ワークフローが受け取る現在の項目: ファイルまたはフォルダ
検索対象: Finder
左のリストの中から「ユーティリティ」を選択し、その中の「シェルスクリプトを実行」を右のエリアにドラッグ&ドロップしましょう。
右上の「入力の引き渡し方法」の項目は「引数として」にした上で、以下を記入してください。
#!/bin/bash
# Automator の PATH 設定
# `which aws`などを叩いて、PATHを通してあげてください。
export PATH="/opt/homebrew/bin/:$PATH"
# AWS プロファイルとバケット名の指定
AWS_PROFILE="s3-uploader"
S3_BUCKET="your-bucket-name"
DISTRIBUTION_ID="E1234567890" # CloudFront のディストリビューションID
# 引数として渡されたZIPファイルを取得
ZIP_FILE="$1"
# 引数のファイルが存在するか確認
if [ ! -f "$ZIP_FILE" ]; then
osascript -e "display notification \"指定されたZIPファイルが存在しません\" with title \"ZIP to S3\""
exit 1
fi
# ZIPファイル名と展開先ディレクトリの設定
ZIP_BASENAME=$(basename "$ZIP_FILE" .zip)
TEMP_DIR=$(mktemp -d)
# ZIPファイルを一時ディレクトリに展開
unzip -q "$ZIP_FILE" -d "$TEMP_DIR"
# 展開されたディレクトリの中身を S3 バケットにアップロード
aws s3 cp "$TEMP_DIR/" "s3://$S3_BUCKET/" --recursive --profile "$AWS_PROFILE"
# アップロード完了通知
osascript -e "display notification \"S3 アップロード完了\" with title \"ZIP to S3\""
# CloudFront のキャッシュを無効化
INVALIDATION_OUTPUT=$(aws cloudfront create-invalidation \
--distribution-id "$DISTRIBUTION_ID" \
--paths "/*" \
--profile "$AWS_PROFILE")
# キャッシュ無効化の結果を確認
if [ $? -eq 0 ]; then
osascript -e "display notification \"CloudFront キャッシュの無効化を完了しました。\" with title \"ZIP to S3\""
else
osascript -e "display notification \"CloudFront キャッシュの無効化に失敗しました。\" with title \"ZIP to S3\""
fi
# 一時ディレクトリを削除
rm -rf "$TEMP_DIR"
# 完了通知
osascript -e "display notification \"処理が完了しました。\" with title \"ZIP to S3\""
CloudFrontのディストリビューションIDはAWSコンソールのCloudFrontのページに行けば、簡単に見つかると思うので、ここでは割愛します。
ここまでやったらわかりやすい名前をつけて保存しましょう。
「Zipを展開してS3にアップロード」とかでいいと思います。
動かすのは簡単で、SimplyStaticsで書き出したzipファイルをダウンロードして、「右クリック→クイックアクション→Zipを展開してS3にアップロード」を選択するだけ。
サイトにアクセスすれば反映されていることがわかると思います。
Automatorで処理を作るのはちょっと難しいですが、何度も何度も繰り返し行うルーチンであれば、一度頑張って作っておくと今後の未来は明るいです。
自分は過去にmovをgifに変えたり、動画の音声をトラックごとに抽出するスクリプトをAutomatorで作って作業効率化しています。
Automatorで楽しましょう!