CI/CD Conference 2023から、アルファドライブ/ニューズピックスのSREがAWS CDKを活用したCI/CD改善を解説
CI/CDに特化したカンファレンスCICD Conference 2023から、株式会社アルファドライブと株式会社ニューズピックスのエンジニアが、AWS CDK(Cloud Development Kit)を使ったCI/CD改善についてそれぞれ解説するセッションを紹介する。
●動画:最高の開発者体験を目指してAWS CDKでCI/CDパイプラインを改善し続けている話
アルファドライブとニューズピックスはどちらもユーザベースの子会社だが、社内のSlackでこのカンファレンスへの参加について会話していた時に「同じ内容で講演できるかも?」ということで盛り上がった結果、同じタイトルで時間を分けて講演するということになったという。タイトルは「最高の開発者体験を目指してAWS CDKでCI/CDパイプラインを改善し続けている話」、同じタイトルで40分の時間をそれぞれ20分ずつにわけて解説している。
ニューズピックス
最初はニューズピックスのSREである安藤裕紀氏が登壇し、EC2主体のプラットフォームからコンテナをベースにしたECSへの移行を解説した。開発チームにおいては「誰でも安全かつ高速に開発とリリースができる状態」をゴールとしていたと説明し、それが2013年から2023年に至る中でどのような変遷を辿ったかについて解説を始めた。
ニューズピックスのシステムは2022年まではEC2ベースの仮想マシンで構成されていたが、それをコンテナベースのプラットフォームにするために、最も規模が大きい共通のバックエンドサーバーをECSに移行したと説明。環境としては本番環境、実行イメージは本番と同じだがデータベース系を別系統としたプレビュー環境、そしてデベロッパーが使う開発環境として構成されていたが、そこにCI/CDに関する問題があったと説明した。
最初の問題として挙げられたのは、ビルドとクラスターへのデプロイが同時に行われることだ。毎回ビルドされるために処理時間が発生し、デプロイまでの待ち時間が発生するほか、全サーバーにデプロイが実行されるため、バグが発見された際の影響が大きいなどの問題点があったという。
ここからAWSのCloud Development Kit(CDK)を使ってCI/CD環境を再構築した内容の解説に入った。
リリースが一斉に行われるという問題についてはECSサービスを複数作成し、カナリアリリースが可能なように作り直したと説明。単に一部のサーバーのイメージを置き換えてデプロイするだけではなく、リクエストのHTTPヘッダーを書き換えて通信を行うことで目的の最新のイメージにアクセスし、動作確認を可能にしたと語った。
またSlackのチャットと連携することでChatOpsを実装し、AWSのサーバーレスであるLambdaのプロセスをワークフロー(CI/CD的発想ではパイプライン)として実行するStep Functionsと組み合わせることで、カナリアリリースや、E2Eテストロールバックも可能なフローを作成したという。
また起動直後はキャッシュのヒット率が低く性能劣化に繋がること、サーバーサイドで使っているKotlinがJVM上で稼働していることから動的コンパイルのための処理時間が必要といった点などを解消するために、起動のプロセスを一斉に行うのではなく、タスクも抑えながら実行するなどの運用上のコツについても解説を行った。必要以上のインスタンスが実行されないように、サーキットブレーカーの機能を設定したことなども含めて説明した。
また環境間でイメージなどのアセットが共有できないことで毎回ビルドが実行されていたという問題については、AWSのコンテナレジストリであるECRにビルドしたイメージを格納して共有することで解決したと説明。
結果的に動作確認と並行してE2Eテストが実行できるようになったという。
また開発環境でもECRのイメージを使いながら、すべての環境から同一のイメージを使うことができるようになったと説明した。
最後に安全面、速度面でも満足できるCI/CDパイプラインが実装できたことを報告。
また共通バックエンドにおいてこのCI/CDパイプラインが実装できたことから、入社して半年のエンジニアでもSlackを使ったChatOpsが可能になったことを説明。単に新システムが使われるだけではなく、エンジニアの発想を喚起できるような良い影響を与えたことを説明して、次の登壇者に譲った。
アルファドライブ
近藤氏の次に登壇したのは株式会社アルファドライブのWebアプリケーションエンジニアである畠山嵩広氏だ。アルファドライブの開発チームでは全員がSREの能力を持つことを推奨されているとして、パブリッククラウドを使って小規模なチームが開発から運用まで手掛けるというベンチャーにありがちな実情を解説した。
畠山氏が関わっているプラットフォームとして、フロントエンドにはTypeScript、NEXT.js、インフラストラクチャーにはAWS ECS、CloudFormation、AWS CDKなどが使われているという。最新のサービスにはバックエンドにGo言語を使った開発が行われていることを説明した。
ここからCDKとTypeScriptを使ってCI/CDをインフラストラクチャーアズアコード(IaC)として実装した内容を詳しく説明する内容となった。
具体的なパイプラインの説明の中でソースコードのリポジトリーを自由に選択できる仕組みが欲しかったことが、CodePipelineではなくCDK(TypeScript)でパイプラインを開発した理由だと説明した。
特に強調したいポイントとしてCDK in TypeScriptが良かった点を3つ挙げて説明した。最初のコードが少ないという点については「new ec2.Vpc(scope:this, id:”VPC”, props:{});」というコードだけでTerraformの記述よりも短くなる点を、例を挙げて説明した。
またStep Functionsの中でTypeScriptによるLambdaの開発体験が良いことを説明。他にもCDKとStep Functionsの相性が良いこととして、GUIでワークフローを作るのはStep Functionsでは簡単だが、IaC的にコードで行おうとするとJSONベースのASL(Amazon States Language)を使う必要があったという。その点CDKなら、TypeScriptでワークフローを書けることなどを説明した。Goを使って記述することにも最初はチャレンジしたが、GoからCDKを使うことには複数のマイナスポイントがあったことを説明し、すでに開発されていたGoのコードをTypeScriptに移行中であると説明した。
基本的にAWS純正のCI/CDパイプラインツールを使わずにTypeScriptを使ってCDKで開発したことを解説する内容となった。畠山氏が説明したようにこの例を応用するとすれば、TypeScriptに慣れたエンジニアが組織にいることが前提となると思われるが、ソースブランチを自由に選択したい、Step FunctionsでIaCをしたいなどの理由と合致する組織のエンジニアは、一考するに値する内容であったと感じた。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- TFXを使った機械学習パイプラインの構築(デプロイ編)
- Infrastructure-as-Codeアプローチと「Pulumi」の概要
- DevOpsのフローとDevOpsの実践に必要な技術
- OCIが指し示すクラウドネイティブへの道筋
- コンテナは場所を選ばない!「オンプレ or クラウド × コンテナ」(前編)
- CNDT2021、ミクシィのSREによるEKS移行の概要を解説するセッションを紹介
- CNDT 2022、NTTコムのエンジニアがマニフェストレスを実現したIaCのためのSaaSを解説
- ビルドからリリースまでを抽象化するツールWaypointをHashiCorpがリリース
- CNDT2021、パブリッククラウドを使ってゼロから勘定系を開発したみんなの銀行のセッションを紹介
- OpenShift Commons Gatheringで語られたOpenShiftに最適なCI/CDとは