CDNを触るのも、CloudFrontを触ることも初めてだった。初めてにも関わらず、それをやらなければならないことがあった。
アプリケーションレイヤなので、設定も膨大な量になることが、うっすらと見えていた。
そんな中で「全部GUIでやる!」というツワモノがいて、震える夜、眠れない夜を過ごした(これだけ設定がたくさんあるのに、どう管理して、どうチェックするつもりなんだという震え。1-2個のドメインだったらそれでいいんだけどね。。。ああ、コワイヨ・・・)。案の定、設定ミスが多く、関係各位から怒られる。
設定はミスっても仕方ないと思う。人間は不完全な生き物ですから。設定箇所もとても多いし、時間もないので。
ただ、どこを間違えたのかはわかるようにしたいよね。そうしないと対策も作れないし、何よりも元に戻せないのがつらいね・・・。
そんな震える夜、ヒトリノ夜ももうこれで大丈夫。
前提
- Cloudshellを使って操作
- AWSCLIが操作可能で、適切なIAM権限のあるLinuxインスタンスでも可能なはず(こちらは未検証だけど、操作は全部AWSCLIなので可能の認識)
手順
ここでは、「example-test.jp」がオリジンのドメイン名であるCloudFrontディストリビューションドメインを操作する。
- CloudFrontのIDを確認する
CloudFrontのGUIで見てもよし。CLIで見てもよし。以下はCloudShellによるCLI方式。
example-test.jpは自身のオリジンドメインネームに置き換えること。
5行あるが、全部まるっとコピーペーストが可能(\で改行してるだけなので)。
$ aws cloudfront list-distributions \
--query "DistributionList.Items[].{DistId: Id, DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == 'example-test.jp'] \
| [0].DistId" \
--output=text \
| grep -v -i "none"
- 作業用ディレクトリ作成
CloudFrontのIDを確認できたら、作業用ディレクトリを作る。cfsetting日付ディレクトリができ、そこにカレントを移す。
$ mkdir cfsetting`date '+%Y%m%d'`
$ cd cfsetting`date '+%Y%m%d'`
- 事前コンフィグ取得
設定前にコンフィグを取ってテキストに残す。
EXXXXXXXXXXXXX は前工程で確認したIDに置き換えて入力。
$ aws cloudfront get-distribution-config --id "EXXXXXXXXXXXXX" | jq '.DistributionConfig' > EXXXXXXXXXXXXX-before.conf
- 設定ファイルの作成
設定したい内容を記載するため、前工程で取得した事前コンフィグをコピーしてリネームする。
$ cp -p EXXXXXXXXXXXXX-before.conf EXXXXXXXXXXXXX-modify.conf
$ ls -ltr
- 設定ファイルの編集
EXXXXXXXXXXXXX-modify.confを編集する。sedとか使って一括で変えたりする。設定項目がそんなに多くなければ、GUIで設定してもいい。
$ vi EXXXXXXXXXXXXX-modify.conf
- 設定反映前のETAG取得
ETAG値を取得する。EXXX・・・は実際のIDに置き換える。コマンド実行結果に文字列が出るため、これをコピーして、次のコマンドに使う。
$ aws cloudfront get-distribution-config --id "EXXXXXXXXXXXXX" | jq '.ETag'
- 設定反映
EXXX・・・は実際のIDに置き換える。ETAGIDは「設定反映前のETAG取得」のコマンド実行結果の値に変更する。このコマンドを打つと、設定が反映されるため、心の準備をしておく。
$ aws cloudfront update-distribution --id "EXXXXXXXXXXXXX" --distribution-config file://EXXXXXXXXXXXXX-modify.conf --if-match ETAGID
- 設定値の確認
設定値一覧を出力。ただ、設定箇所が多すぎるので、流す程度で見る。EXXX・・・は実際のIDに置き換える。
$ aws cloudfront get-distribution-config --id "EXXXXXXXXXXXXX"
- 事後コンフィグ取得
設定後にコンフィグを取ってテキストに残す。EXXX・・・は実際のIDに置き換え。
$ aws cloudfront get-distribution-config --id "EXXXXXXXXXXXXX" | jq '.DistributionConfig' > EXXXXXXXXXXXXX-after.conf
- コンフィグ差分比較
設定前後のコンフィグをdiffでコンペア。こちらで見れば、設定した箇所だけ変わっているかという観点と、他に設定してしまった部分がないかという観点で、網羅的にチェックできる。ここまでして初めて「設定しました、問題ないっす!」と言えるんだよ、後輩くん・・・。
$ diff EXXXXXXXXXXXXX-before.conf EXXXXXXXXXXXXX-after.conf
まとめ
こんな感じで、なにごともバックアップとテキストに残すことはとっても大事。L7レベルの設定になるとどうしたって設定値は増えるんだから、これぐらいは当たり前にやっておきたいところ。
参考
先人への感謝もこめて、掲載。
sedコマンドでファイルを上書き編集
https://open-groove.net/linux-command/sed-edit-files/
aws-cli で CloudFront の設定を変更する。
https://blog.proudit.jp/2018/04/27/change-the-parameter-of-cloudfront-by-awscli.html
jqコマンドで指定したキーが特定の値を持つ配列のみキーの置換(書き換え)を行う
https://orebibou.com/ja/home/201604/20160423_001/
aws cli と jq コマンド
https://qiita.com/naokishi/items/f9d2f53bb103241b2817
jq で条件にマッチするデータ構造だけ出力する
https://blog.kyanny.me/entry/2014/05/28/030006