wordpressデプロイ時のcloudfrontキャッシュクリアを自動化する

こんにちは。
cloudfrontのキャッシュクリア、よく忘れます。
デプロイした後にawsにログインしてポチポチやるでもいいですが、自動化しましょう。
 
ギークフィードではwordpressのデプロイにwordmoveというオープンソースを利用しています。
また、cloudfrontを利用して負荷をかけずに高速化をしています。
詳しくは以下の社長ブログからどうぞ。
 
WordPressで構築されているウェブサイトにCloudFrontを立てて高速化&セキュリティ強化①
WordPressで構築されているウェブサイトにCloudFrontを立てて高速化&セキュリティ強化②

環境

簡単に環境の構成図と今回の完成予想をまとめてみました。
 

 
今回はデプロイした際にオレンジ線のキャッシュクリアが実行されるようにしてみます。
図にあるように、ギークのwordpressはバーチャルホストをきって複数サイトを運用しているため、
特定のサイトをデプロイした際にどのcloudfrontディストリビューションのキャッシュをクリアするかを判別する必要があります。

IAMユーザー、ポリシーの作成

wordpress開発環境でawscliを使用するためにIAMユーザーとポリシーを作成します。
 
IAMユーザー
ユーザー名:cli_wordpress_dev
アクセスキー、シークレットアクセスキーを作成
 
IAMポリシー

 
必要最低限のポリシーを設定し、一応リソース制限としてwordpress開発サーバーのIPを指定しています。

スクリプトの作成

作成したスクリプトは以下です。
wordmove実行時のpathから対象のwordpressプロファイルを特定し、プロファイル名を含むCNAMEを持つディストリビューションのキャッシュをすべてクリアします。
 

ディストリビューションidの取得について

aws cloudfront list-distributions
を実行すると、結果は以下のようなjsonで返ってきます。(本当はもっと大量に出てきますが不要な情報はすべて消しています)
 

 
Items以下のjson配列をループしています。
Enabledはそのディストリビューションが有効かどうかを表しており、有効になっていないものはid検索から除外しています。
jqコマンドで値を取得するとき、「-r」オプションをつけることでダブルクオーテーションを排除することができます。

awsコマンドについて

今回はすべてのキャッシュをクリアするので、この部分は簡単です。’/*’で全指定できます。
サイトごとに異なるpathのキャッシュを削除したい場合は、それぞれ専用のjsonオブジェクトを作成し、
「–invalidation-batch」オプションを使用すると実現できます。

【awscliドキュメント】create-invalidation

実行してみる

実行してみるとアウトプットは以下のような感じです。
 

 
実行後にAWSのコンソールで確認してみるとこんな感じです。
 

 
キャッシュクリアが行われていることがわかります。

自動化する

あとはwordmove実行をトリガーとして上記スクリプトを実行すればOKです。
今回はaliasを使って行うことにしました。
~/.bash_profileに以下を追記します。
 

 
以前とは若干コマンドが変わってしまいますが、wordmoveを実行する際にpushとpullの間違いがたまーに発生していたので、それも防げるということでOKでしょう。

おわりに

まとめ

・忘れやすいキャッシュクリアは自動化しよう
・ディストリビューションidの特定はjqコマンドでがんばろう
・すべてのキャッシュクリアをする場合は’/*’で指定できるよ

感想

こういったちょっとした作業も自動化できると、ミスも減りますし楽できていいですね。
次回はもうちょっと面白い内容の記事をかけたらいいっすね。

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ