LoginSignup
0
0

More than 1 year has passed since last update.

CloudFrontのコンフィグ取得や操作関連@CloudShell

Last updated at Posted at 2023-03-27

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0