見出し画像

CloudFrontのStaging Distributionで継続的デプロイを試してみた

Makuake Tech note

この記事は、Makuake Advent Calendar 2022の16日目の記事です。

皆さんはじめまして。10月にマクアケのSREチームに入社しました@adachin0817です。SREチームは現在3名から5名になりまして、新チームとしてサービスの信頼性を向上するために日々改善している状況です。チームの取り組みについては以下のインタビュー記事を見ていただければと思います。

さて、今回はCloudFrontのStaging DistributionでContinuous Deployment(継続的デプロイ)がサポートされたので検証として試してみました。


Use CloudFront continuous deployment to safely validate CDN changes

・経緯

現在マクアケではPHPのバージョンアップに取り組んでいます。その際、ユーザー影響のないよう、SLI/SLO を確認してエラーを出さないように進め、段階的かつ安全に環境を切り替える必要があります。

Route53の加重ルーティングにてトラフィックを分散させれば、並行稼働させながら動作確認ができると思いきや、CloudFrontの代替ドメインが重複してしまうという課題がありました。CloudFrontの恐ろしいところはDistributionの設定変更を行う場合、変更が終わるまでに数分かかってしまうため、気楽に変更はできません。

そんなとき、先月CloudFrontがStaging Distributionで継続的デプロイがサポートされました。このことで、アクセス時に一定量のリクエストを割り振り、旧環境と新環境(weight 15%まで)の並行稼動が可能になり、新環境への昇格もできるようになりました。これによりドライに新環境へ動作検証と切り替えることが可能になりました。というわけで今回は、PHPバージョンアップでの実戦投入に先立って、オリジンとしてS3を2つ作成した環境で動作検証してみました。


環境

  • ドメイン(仮)

    • https://example.com

  • S3

    • example1.s3.ap-northeast-1.amazonaws.com

    • example2.s3.ap-northeast-1.amazonaws.com

  • CloudFront

    • Primary(origin:example1)

    • Staging(origin:example2)

初期設定に関しては割愛しますが、S3で簡単な静的ウェブサイトをホスティングしています。


PrimaryからContinuous deployment

まずCloudFrontでPrimary用のディストリビューションを作成後に [Continuous deployment] を選択しましょう。Weight-basedはMaxの15%を指定します。一旦Enableはせずに保存します。(上記画像は作成後です)

数分後にStagingのディストリビューションが作成されますので、オリジンをexample2に向くように設定しました。


動作確認

1 $ for i in {1..10}; do curl https://example.com/; done
2 hoge
3 hoge
4 hoge
5 hoge
6 hoge
7 hoge
8 hoge
9 hoge
10 hoge
11 hoge

現状 [Continuous deployment] は有効になっていないため、example1バケットを向いていることが分かります。

  • Continuous deploymentを有効

1 > for i in {1..10}; do curl https://example.com/; done
2 hoge
3 hoge
4 hoge
5 hoge2
6 hoge
7 hoge
8 hoge2
9 hoge
10 hoge
11 hoge

有効にしてから数秒でexample2バケットも並行稼動し、15%の確率でexample2を向くようになりました。

  • Promoteしてexample2を昇格させる

StagingをPrimaryに昇格させると、ディストリビューションの設定がStagingの設定で上書きされます。このとき警告が出ますので、 [confirm] してあげましょう。

1 $ for i in {1..10}; do curl https://example.com/; done
2 hoge2
3 hoge2
4 hoge2
5 hoge2
6 hoge2
7 hoge2
8 hoge2
9 hoge2
10 hoge2
11 hoge2

こちらも数秒でStagingが昇格されて、すべてのトラフィックでexample2バケットからの結果を返すようになりました。

  • StagingからPrimaryに戻したい場合

もし新環境で何かしらエラーが発生した場合はPrimaryのオリジンを元に戻して、旧環境にデプロイし直せばすぐに対応可能です。


まとめ

新環境でのテストに対してより柔軟で安全に動作検証と切り替えができるようになりました。Weight-basedが15%までしか対応していないので、今後のアップデートに期待です。他にも新環境に昇格すればメンテナンス画面に切り替えることもできそうなので、重宝しそうです。また、実際のユーザーアクセスで昇格した場合にタイムアウトされるかはPHPのバージョンアップ作業を通して試してみるので、完了したら Makuake Tech noteにてご紹介したいと思います。


--------------------------------------------------------------------------

最後に、現在マクアケではエンジニアの募集をしております。
もっとマクアケについて知りたい方は、社員インタビュー記事や以下リンクからカジュアル面談・エントリーのお申し込みをお願いいたします!

◉エントリーをご希望の方

◉カジュアル面談をご希望の方

◉マクアケの中の人を知りたい方



この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!