Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Amazon CloudFront Continuous Deployment 基本から自動化まで

Avatar for 4hei4hei 4hei4hei
February 09, 2024
380

Amazon CloudFront Continuous Deployment 基本から自動化まで

Avatar for 4hei4hei

4hei4hei

February 09, 2024
Tweet

More Decks by 4hei4hei

Transcript

  1. 1 Copyright(C) NRI Netcom, Ltd. All rights reserved. n ⻄洋平

    (NISHI Yohei) l NRI ネットコム株式会社 基盤デザイン事業部 (@Osaka) n Web システム開発運⽤チームのインフラ担当 l IaC や SaaS による運⽤とシステム改善 l たまにサーバレスアプリケーション開発 ⾃⼰紹介 https://tech.nri-net.com/entry/aws_data_sync_cross_region_transfer https://tech.nri-net.com/entry/data_sync_copy_between_s3_buckets https://techplay.jp/event/904776
  2. 2 Copyright(C) NRI Netcom, Ltd. All rights reserved. n AWS

    マネージドなグローバル展開されている CDN サービス n 世界中に存在する Edge locations で⾼信頼 / 低遅延なコンテンツ配信を実現 Amazon CloudFront (CloudFront) おさらい
  3. 3 Copyright(C) NRI Netcom, Ltd. All rights reserved. n AWS

    マネージドなグローバル展開されている CDN サービス n 世界中に存在する Edge locations で⾼信頼 / 低遅延なコンテンツ配信を実現 Amazon CloudFront (CloudFront) おさらい 静的コンテンツ配信や動的サイトのキャッシュレイヤとして利⽤
  4. 4 Copyright(C) NRI Netcom, Ltd. All rights reserved. n AWS

    マネージドなグローバル展開されている CDN サービス n 世界中に存在する Edge locations で⾼信頼 / 低遅延なコンテンツ配信を実現 Amazon CloudFront (CloudFront) おさらい オリジン保護レイヤとして活⽤
  5. 5 Copyright(C) NRI Netcom, Ltd. All rights reserved. n AWS

    マネージドなグローバル展開されている CDN サービス n 世界中に存在する Edge locations で⾼信頼 / 低遅延なコンテンツ配信を実現 Amazon CloudFront (CloudFront) おさらい エッジコンピューティングサービスとも連携可能
  6. 6 Copyright(C) NRI Netcom, Ltd. All rights reserved. n AWS

    マネージドなグローバル展開されている CDN サービス n 世界中に存在する Edge locations で⾼信頼 / 低遅延なコンテンツ配信を実現 Amazon CloudFront (CloudFront) おさらい Continuous Deployment で安全にテストを実施してからデプロイ可能
  7. 7 Copyright(C) NRI Netcom, Ltd. All rights reserved. n AWS

    マネージドなグローバル展開されている CDN サービス n 世界中に存在する Edge locations で⾼信頼 / 低遅延なコンテンツ配信を実現 Amazon CloudFront (CloudFront) おさらい Continuous Deployment で安全にテストを実施してからデプロイ可能 → 今⽇話すのはこれ!!!
  8. 8 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Continuous

    Deployment がない世界で CloudFront をテスト & 切り替えデプロイすることを考える Continuous Deployment の話の前に……
  9. 9 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 稼働中の

    Distribution (A) と別に、新しい Distribution (B) を作成 Continuous Deployment の話の前に……
  10. 10 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 作成した

    Distribution の動作確認 Continuous Deployment の話の前に……
  11. 11 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に……
  12. 12 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に…… CloudFront では複数の Distribution が同じ代替名を利⽤することはできない
  13. 13 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に…… CloudFront では複数の Distribution が同じ代替名を利⽤することはできない → 複数レコードの準備など、検証 / 本番環境間で差異が発⽣
  14. 14 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に…… 本番稼働する Distribution の実態が変わるため、設定変更が必要な場合がある
  15. 15 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に…… 本番稼働する Distribution の実態が変わるため、設定変更が必要な場合がある → 設定の変更漏れのリスク
  16. 16 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に…… 本番稼働する Distribution の実態が変わるため、設定変更が必要な場合がある → 設定の変更漏れのリスク DNS 切り替え操作や ARN 指定箇所の修正など、細やかなケアが必要なデプロイとなる
  17. 17 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Route

    53 のレコードを新しい Distribution へ向けるように修正 Continuous Deployment の話の前に…… 本番稼働する Distribution の実態が変わるため、設定変更が必要な場合がある → 設定の変更漏れのリスク DNS 切り替え操作や ARN 指定箇所の修正など、細やかなケアが必要なデプロイとなる 安全かつ⼿軽に デプロイできない……?
  18. 18 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 2022

    / 11 に GA された CloudFront を安全かつ⼿軽に切り替えデプロイできる機能 CloudFront Continuous Deployment (継続的デプロイメント)
  19. 19 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 2022

    / 11 に GA された CloudFront を安全かつ⼿軽に切り替えデプロイできる機能 l 本番 Distribution (Primary) に対して動作確認⽤の Distribution (Staging) を作成 CloudFront Continuous Deployment (継続的デプロイメント)
  20. 20 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 2022

    / 11 に GA された CloudFront を安全かつ⼿軽に切り替えデプロイできる機能 l 本番 Distribution (Primary) に対して動作確認⽤の Distribution (Staging) を作成 l 条件を満たしたリクエストを Staging へ振り分けての動作確認が可能 (専⽤の Policy で制御) CloudFront Continuous Deployment (継続的デプロイメント)
  21. 21 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Staging

    へのリクエストルーティングを司る Policy Continuous deployment policy とは?
  22. 22 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Staging

    へのリクエストルーティングを司る Policy l Header-based と Weighted-based のどちらかを設定する Continuous deployment policy とは?
  23. 23 Copyright(C) NRI Netcom, Ltd. All rights reserved. n リクエストに含まれるヘッダを基に

    Distribution へのルーティングを⾏う l リクエスト内に指定したヘッダと値が含まれていれば Staging へ流す Continuous deployment policy とは? – Header-based Policy –
  24. 24 Copyright(C) NRI Netcom, Ltd. All rights reserved. n リクエストに含まれるヘッダを基に

    Distribution へのルーティングを⾏う l リクエスト内に指定したヘッダと値が含まれていれば Staging へ流す Continuous deployment policy とは? – Header-based Policy – (例) リクエストに aws-cf-cd-staging=true というヘッダと値が含まれている → Staging へリクエストを流す
  25. 25 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 全リクエストのうち

    N % (0 ~ 15%) のリクエストを Staging へ⾃動的に流す l Primary にもリクエストは流れ続けるので A / B テストをしたい場合などはこちらが便利 Continuous deployment policy とは? – Weighted-based Policy –
  26. 27 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが……

    CloudFront Continuous Deployment は何が嬉しい? Staging へは Primary と同じ代替名でリクエスト可能
  27. 28 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが……

    CloudFront Continuous Deployment は何が嬉しい? Staging へは Primary と同じ代替名でリクエスト可能 → 本番と検証でレコードを分けたり操作したりする必要なし!!!
  28. 29 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが……

    CloudFront Continuous Deployment は何が嬉しい? 動作確認後に Staging の設定を Primary の設定としてそのまま昇格 (Promote) 可能
  29. 30 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが……

    CloudFront Continuous Deployment は何が嬉しい? 動作確認後に Staging の設定を Primary の設定としてそのまま昇格 (Promote) 可能 → Primary は引き続き本番⽤として稼働できる!!! (※ OAC の場合は動作確認時に要作業かも……)
  30. 31 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが……

    CloudFront Continuous Deployment は何が嬉しい? Staging と Primary はキャッシュを共有しない
  31. 32 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが……

    CloudFront Continuous Deployment は何が嬉しい? Staging と Primary はキャッシュを共有しない → 事前のキャッシュクリア等も必要なし!!!
  32. 33 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 稼働中の

    Primary に対して Staging を作成して動作検証が可能 n リクエストルーティングは Policy で制御し、検証後には Staging の設定を Primary の設定として昇格も可能 CloudFront Continuous Deployment まとめ
  33. 34 Copyright(C) NRI Netcom, Ltd. All rights reserved. n コマンド単位で確認しつつ、実際に使ってみる

    l Staging / Policy 作成 → 動作検証 → Staging を Promote → 後掃除 実際に触ってみた
  34. 35 Copyright(C) NRI Netcom, Ltd. All rights reserved. n コマンド単位で確認しつつ、実際に使ってみる

    l Staging / Policy 作成 → 動作検証 → Staging を Promote → 後掃除 n CLI / SDK で⾃動化が実現できるはず……!!! l これができれば動作検証 / テスト結果次第で処理を⽌める仕組みも組み込めるはず 実際に触ってみた
  35. 36 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる 実際に触ってみた
  36. 37 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる n ⾃動化する上での課題になる点 l CloudFront に対する設定が反映されるまでの待機時間をうまく吸収するステップが必要 l リソースの後掃除にはちょっとクセがある (GUI 操作の⽅が楽だった) 実際に触ってみた
  37. 38 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる n ⾃動化する上での課題になる点 l CloudFront に対する設定が反映されるまでの待機時間をうまく吸収するステップが必要 l リソースの後掃除にはちょっとクセがある (GUI 操作の⽅が楽だった) 実際に触ってみた ここまでは簡単
  38. 39 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる n ⾃動化する上での課題になる点 l CloudFront に対する設定が反映されるまでの待機時間をうまく吸収するステップが必要 l リソースの後掃除にはちょっとクセがある (GUI 操作の⽅が楽だった) 実際に触ってみた ここだけちょっとクセがある
  39. 40 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる n ⾃動化する上での課題になる点 l CloudFront に対する設定が反映されるまでの待機時間をうまく吸収するステップが必要 l リソースの後掃除にはちょっとクセがある (GUI 操作の⽅が楽だった) 実際に触ってみた ここだけちょっとクセがある リソースのステータスが変わるまでの待機時間を細やかにケアしつつ
  40. 41 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる n ⾃動化する上での課題になる点 l CloudFront に対する設定が反映されるまでの待機時間をうまく吸収するステップが必要 l リソースの後掃除にはちょっとクセがある (GUI 操作の⽅が楽だった) 実際に触ってみた ここだけちょっとクセがある リソースのステータスが変わるまでの待機時間を細やかにケアしつつ 動作検証やテストの結果次第で処理を停⽌させる
  41. 42 Copyright(C) NRI Netcom, Ltd. All rights reserved. n よかった点

    l Staging / Policy の作成から⼀気に流すこともできるし、途中に動作検証やテストも組み込めそう l リソース作成から Promote までは⼀本道で実装できる n ⾃動化する上での課題になる点 l CloudFront に対する設定が反映されるまでの待機時間をうまく吸収するステップが必要 l リソースの後掃除にはちょっとクセがある (GUI 操作の⽅が楽だった) 実際に触ってみた ここだけちょっとクセがある リソースのステータスが変わるまでの待機時間を細やかにケアしつつ 動作検証やテストの結果次第で処理を停⽌させる → 1 つの ワークフロー として捉えられる……?
  42. 43 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Why

    StepFunctions ? ワークフローとして⾃動化 AWS Step Functions
  43. 44 Copyright(C) NRI Netcom, Ltd. All rights reserved. n Why

    StepFunctions ? l ちょっとしたスクリプト (Lambda) の組み合わせが実現できる l 待機や分岐のような、条件に応じた細やかな操作を制御可能!!! l ⼀連の処理がフロー図として可視化され、状況を把握しやすい l AWS SAM で簡単に開発 / デプロイが可能!!! • https://github.com/4hei4hei/cloudfront-continuous-deployment-stepfunctions ワークフローとして⾃動化 AWS Step Functions
  44. 46 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Origin となる S3 バケットに対するオブジェクトパスを 2 種類⽤意 (これを切り替える)
  45. 47 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Staging / Continuous deployment policy 作成から 動作検証、Promote、後掃除までを StepFunctions で実⾏
  46. 48 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Staging / policy 作成
  47. 49 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Distribution への関連付けや作成が完了したかチェック (完了するまで待機処理を挟む)
  48. 50 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Staging に対して動作確認 / テスト ※ NG ならここで落とす
  49. 51 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Staging の設定を Primary に反映する (Promote する) Primary のオブジェクトルートが変わる
  50. 52 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Staging / Policy を無効化する
  51. 53 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら

    ワークフローとして⾃動化 Staging / Policy を削除する
  52. 55 Copyright(C) NRI Netcom, Ltd. All rights reserved. n マネジメントコンソール上から⾒た

    Statemachine フロー図はこのようになる ワークフローとして⾃動化
  53. 56 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 注意するポイント

    l CloudFront の ETag • Distribution 設定の version 情報を司る⽂字列 • 設定に変更がかかると更新される & API 実⾏時に最新の値を渡さないとエラー • 今回の⾃動化では待機処理後の次ステップで都度取得している ワークフローとして⾃動化
  54. 57 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 注意するポイント

    l CloudFront の ETag • Distribution 設定の version 情報を司る⽂字列 • 設定に変更がかかると更新される & API 実⾏時に最新の値を渡さないとエラー • 今回の⾃動化では待機処理後の次ステップで都度取得している ワークフローとして⾃動化 https://docs.aws.amazon.com/cli/latest/reference/cloudfront/get-distribution-config.html
  55. 58 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 注意するポイント

    l CloudFront の設定変更を待つサイクルをこまめに挟む必要がある • SDK には waiter 機能があるが、Lambda の実⾏時間が延びる l コスト⾯を考えるとサービスで役割を棲み分けるのがおすすめ • API 実⾏ → Lambda • 設定反映まで待機 → StepFunctions ワークフローとして⾃動化
  56. 59 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 注意するポイント

    l CloudFront の設定変更を待つサイクルをこまめに挟む必要がある • SDK には waiter 機能があるが、Lambda の実⾏時間が延びる l コスト⾯を考えるとサービスで役割を棲み分けるのがおすすめ • API 実⾏ → Lambda • 設定反映まで待機 → StepFunctions ワークフローとして⾃動化
  57. 60 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 注意するポイント

    l Continuous deployment policy の依存関係 • Primary / Staging との紐付けを完全に解除していないと削除できない (後掃除がちょっと⼤変 • Policy との関連を切った設定を Primary に反映 → Policy との関連を切って Staging にも反映、となる ワークフローとして⾃動化
  58. 61 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 注意するポイント

    l Continuous deployment policy の依存関係 • Primary / Staging との紐付けを完全に解除していないと削除できない (後掃除がちょっと⼤変 • Policy との関連を切った設定を Primary に反映 → Policy との関連を切って Staging にも反映、となる ワークフローとして⾃動化 https://tech.nri-net.com/entry/learn_with_pictures_cloudfront_lntroduction
  59. 62 Copyright(C) NRI Netcom, Ltd. All rights reserved. n CloudFront

    Continuous Deployment 機能で CloudFront を安全に切り替えデプロイ可能 n この機能の⾃動化を⽬指す上では CloudFront 特有の設定反映待ち状態や条件分岐の考慮が必要 l 動作検証 / テスト処理も⾏うことを考えると、 1 つのワークフローとして捉えられる n動作検証からデプロイ、後掃除までを StepFunctions のワークフローに!!! おわりに
  60. 63 Copyright(C) NRI Netcom, Ltd. All rights reserved. n CloudFront

    Continuous Deployment 機能で CloudFront を安全に切り替えデプロイ可能 n この機能の⾃動化を⽬指す上では CloudFront 特有の設定反映待ち状態や条件分岐の考慮が必要 l 動作検証 / テスト処理も⾏うことを考えると、 1 つのワークフローとして捉えられる n動作検証からデプロイ、後掃除までを StepFunctions のワークフローに!!! l ⾃動化させてもっともっとお⼿軽に活⽤していきましょう!!! おわりに