Slide 1

Slide 1 text

Amazon CloudFront Continuous Deployment 基本から⾃動化まで JAWS-UG 朝会 #52 2023年12⽉21⽇ NRIネットコム株式会社 基盤デザイン事業部 ⻄ 洋平

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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 (継続的デプロイメント)

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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 へリクエストを流す

Slide 26

Slide 26 text

25 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 全リクエストのうち N % (0 ~ 15%) のリクエストを Staging へ⾃動的に流す l Primary にもリクエストは流れ続けるので A / B テストをしたい場合などはこちらが便利 Continuous deployment policy とは? – Weighted-based Policy –

Slide 27

Slide 27 text

26 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 動作確認のためのルーティングができるのはわかったが…… CloudFront Continuous Deployment は何が嬉しい?

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

33 Copyright(C) NRI Netcom, Ltd. All rights reserved. n 稼働中の Primary に対して Staging を作成して動作検証が可能 n リクエストルーティングは Policy で制御し、検証後には Staging の設定を Primary の設定として昇格も可能 CloudFront Continuous Deployment まとめ

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

54 Copyright(C) NRI Netcom, Ltd. All rights reserved. n できたのがこちら ワークフローとして⾃動化 完成!!!

Slide 56

Slide 56 text

55 Copyright(C) NRI Netcom, Ltd. All rights reserved. n マネジメントコンソール上から⾒た Statemachine フロー図はこのようになる ワークフローとして⾃動化

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

No content