こんにちは、ひるたんぬです。
6月に入り、雨の降る日が多くなりましたね。梅雨の到来を感じます。
…なぜ、この時期のことを「梅雨(つゆ)」と呼ぶのでしょうか。
梅の実が熟す時期に降る雨だから「梅雨」と書いたところまではなんとなく理解できますが、それにしてもそれを「つゆ」と読むところが納得できません。「ばいう」なら理解できるのですが…
調べてみたところ、そもそもの「梅雨」という言葉の由来は諸説あるようですが、中国が語源だそうです。
梅の実がなる時期の雨だから「梅雨(ばいう)」、カビ(黴)が生えやすい時期の雨だから「黴雨(ばいう)」など。
また、「ばいう」が「つゆ」と読むようになったのも諸説あるようです。
雨に濡れて湿っぽいという意味を持つ「露けし」が転じて「つゆ」、熟した梅の実が潰れる「潰ゆ(つゆ)」、カビのせいで食べ物が駄目になる「費ゆ(つゆ)」…などなど。
参考:気象庁 | はれるんランド「はれるんライブラリー」, tenki.jp | 「梅雨の漢字はどうして「梅」と「雨」?意外な理由を解説」
言葉の由来が正確には分かっていないのに、こうして今日一般的に使われる言葉になっているのがなんとも不思議な気持ちになりました。
さて、今回はあるアカウントから別のアカウントにあるAmazon CloudFront ディストリビューションのキャッシュ削除を、AWS CLIを用いて行う方法をご紹介いたします。
やりたいこと
とてもシンプルです。
操作元アカウント(アカウント A)から、宛先アカウント(アカウント B)にあるCloudFrontのキャッシュ削除を実施することが目標です。
先行事例
AWS CDKやAWS CodePipelineを利用した方法は既にいくつか紹介されていました。
これらの事例では、AWS Lambdaを用いてキャッシュクリアを行っています。
今回はLambdaを用いたくはなかったので、これらの事例を参考にしつつ、実装をしていきます。
事前確認 | 失敗パターン
事前確認
まずは、クロスアカウントの設定を何も行わない場合の挙動を確認してみます。
IAMユーザー・ポリシー
テスト用のユーザーを作成します。
このユーザーには、CloudFrontのすべてのディストリビューションに対し、キャッシュ削除を許可する権限を与えます。
また、手元のターミナルでコマンドを実行するために、アクセスキーを払い出し、設定します。
CloudFront ディストリビューション
別のアカウントでは、 CloudFront ディストリビューションを作成します。
今回はキャッシュ削除ができるかどうかを確認するのみなので、オリジンなどは適当に設定します。
アクセス確認
このコマンドの実行結果は以下のようになりました。(実行結果)
アクセス拒否(AccessDenied)ではなく存在しない(NoSuchDistribution)エラーである点が少し興味深いですね。
解決策 | 成功パターン
修正内容
先ほど作成したリソースについて、主にIAMの内容を見直していきます。
最終的には下図のようになります。
アカウントB | IAMロール
まずはアカウントBにIAMロールを新規で作成します。
このロールは、アカウントAにあるIAMユーザーからのロール引き受けを許可し、アカウント内のCloudFront ディストリビューションのキャッシュ削除を許可します。
▼ 許可(アカウント内のCloudFront ディストリビューションのキャッシュ削除)
アカウントA | IAMポリシー
次にアカウントAのIAMユーザーに紐づいているIAMポリシーを修正します。
先ほど作成したアカウントBのIAMロールを引き受ける許可を与えます。
クロスアカウントアクセスの設定
AWS CLIでIAMロールを利用するため、ConfigファイルにIAMロールのARNなどの情報を追加します。
今回は以下のように設定しました。
[profile test-cross] role_arn = arn:aws:iam::<アカウント BのID>:role/IRL-Cross-CloudFront-Invalidation source_profile = test
詳細はドキュメントの該当箇所を参照してください。
アクセス確認
コマンドを実行したところ、正常にキャッシュ削除の命令が送られました。(実行結果)
また、コンソールから確認してみても、正常にキャッシュ削除できていることが確認できます。
まとめ
今回はクロスアカウントでのCloudFrontキャッシュ削除の方法をご紹介しました。
考えてみると、ディストリビューションIDのみでキャッシュ削除されてしまったらだめなので、クロスアカウントの仕組みはよくできているなぁ…と思いました。
この記事をまとめるにあたり、IAMの仕組みについても勉強しました。
勉強するにあたり、参考にさせていただいたサイトを最後にご紹介いたします。