連載 [第2回] :
  CI/CD Conference 2023レポート

CI/CD Conference 2023から、アルファドライブ/ニューズピックスのSREがAWS CDKを活用したCI/CD改善を解説

2023年6月6日(火)
松下 康之 - Yasuyuki Matsushita
CI/CD Conference 2023から、ニューズピックスとアルファドライブのエンジニアによるAWS CDKのユースケースを解説したセッションを紹介する。

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年に至る中でどのような変遷を辿ったかについて解説を始めた。

EC2ベースのシステムを2013年から構築

EC2ベースのシステムを2013年から構築

EC2からの移行を実行。2022年からコンテナベースのシステムに

EC2からの移行を実行。2022年からコンテナベースのシステムに

ニューズピックスのシステムは2022年まではEC2ベースの仮想マシンで構成されていたが、それをコンテナベースのプラットフォームにするために、最も規模が大きい共通のバックエンドサーバーをECSに移行したと説明。環境としては本番環境、実行イメージは本番と同じだがデータベース系を別系統としたプレビュー環境、そしてデベロッパーが使う開発環境として構成されていたが、そこにCI/CDに関する問題があったと説明した。

EC2ベースのシステムにはCI/CDについて問題点があった

EC2ベースのシステムにはCI/CDについて問題点があった

最初の問題として挙げられたのは、ビルドとクラスターへのデプロイが同時に行われることだ。毎回ビルドされるために処理時間が発生し、デプロイまでの待ち時間が発生するほか、全サーバーにデプロイが実行されるため、バグが発見された際の影響が大きいなどの問題点があったという。

安全で高速なビルド&デプロイ環境とは言えなかったEC2ベースのシステム

安全で高速なビルド&デプロイ環境とは言えなかったEC2ベースのシステム

ここからAWSのCloud Development Kit(CDK)を使ってCI/CD環境を再構築した内容の解説に入った。

AWS CDKを使ってCI/CDを作り直す。言語はTypeScriptを採用

AWS CDKを使ってCI/CDを作り直す。言語はTypeScriptを採用

リリースが一斉に行われるという問題についてはECSサービスを複数作成し、カナリアリリースが可能なように作り直したと説明。単に一部のサーバーのイメージを置き換えてデプロイするだけではなく、リクエストのHTTPヘッダーを書き換えて通信を行うことで目的の最新のイメージにアクセスし、動作確認を可能にしたと語った。

カナリアリリースを実装し、HTTPヘッダーで特定イメージにアクセスが可能な仕組みを導入

カナリアリリースを実装し、HTTPヘッダーで特定イメージにアクセスが可能な仕組みを導入

またSlackのチャットと連携することでChatOpsを実装し、AWSのサーバーレスであるLambdaのプロセスをワークフロー(CI/CD的発想ではパイプライン)として実行するStep Functionsと組み合わせることで、カナリアリリースや、E2Eテストロールバックも可能なフローを作成したという。

Step FunctionsとChatOpsを組み合わせて安全なリリースを自動化

Step FunctionsとChatOpsを組み合わせて安全なリリースを自動化

また起動直後はキャッシュのヒット率が低く性能劣化に繋がること、サーバーサイドで使っているKotlinがJVM上で稼働していることから動的コンパイルのための処理時間が必要といった点などを解消するために、起動のプロセスを一斉に行うのではなく、タスクも抑えながら実行するなどの運用上のコツについても解説を行った。必要以上のインスタンスが実行されないように、サーキットブレーカーの機能を設定したことなども含めて説明した。

ECSとオートスケーリング機能を使って性能が劣化しない工夫を実施

ECSとオートスケーリング機能を使って性能が劣化しない工夫を実施

また環境間でイメージなどのアセットが共有できないことで毎回ビルドが実行されていたという問題については、AWSのコンテナレジストリであるECRにビルドしたイメージを格納して共有することで解決したと説明。

ビルドのフローでECRにイメージを格納、共有する処理に

ビルドのフローでECRにイメージを格納、共有する処理に

結果的に動作確認と並行してE2Eテストが実行できるようになったという。

Slackの通知を見ながらビルドからE2Eテストまで実行可能に

Slackの通知を見ながらビルドからE2Eテストまで実行可能に

また開発環境でもECRのイメージを使いながら、すべての環境から同一のイメージを使うことができるようになったと説明した。

最後に安全面、速度面でも満足できるCI/CDパイプラインが実装できたことを報告。

ニューズピックスのCDKを使った新パイプラインのまとめ

ニューズピックスのCDKを使った新パイプラインのまとめ

また共通バックエンドにおいてこのCI/CDパイプラインが実装できたことから、入社して半年のエンジニアでもSlackを使ったChatOpsが可能になったことを説明。単に新システムが使われるだけではなく、エンジニアの発想を喚起できるような良い影響を与えたことを説明して、次の登壇者に譲った。

まとめとしてAWSのCI/CDパイプラインを使わなかった理由を説明

まとめとしてAWSのCI/CDパイプラインを使わなかった理由を説明

アルファドライブ

近藤氏の次に登壇したのは株式会社アルファドライブのWebアプリケーションエンジニアである畠山嵩広氏だ。アルファドライブの開発チームでは全員がSREの能力を持つことを推奨されているとして、パブリッククラウドを使って小規模なチームが開発から運用まで手掛けるというベンチャーにありがちな実情を解説した。

畠山氏が担当するプラットフォームのテクノロジースタック

畠山氏が担当するプラットフォームのテクノロジースタック

畠山氏が関わっているプラットフォームとして、フロントエンドにはTypeScript、NEXT.js、インフラストラクチャーにはAWS ECS、CloudFormation、AWS CDKなどが使われているという。最新のサービスにはバックエンドにGo言語を使った開発が行われていることを説明した。

今回の言いたいことのまとめ。CDK、TypeScript、Step Functions

今回の言いたいことのまとめ。CDK、TypeScript、Step Functions

ここからCDKとTypeScriptを使ってCI/CDをインフラストラクチャーアズアコード(IaC)として実装した内容を詳しく説明する内容となった。

AWS CDKの説明。内部ではCloudFormationが使われている

AWS CDKの説明。内部ではCloudFormationが使われている

具体的なパイプラインの説明の中でソースコードのリポジトリーを自由に選択できる仕組みが欲しかったことが、CodePipelineではなくCDK(TypeScript)でパイプラインを開発した理由だと説明した。

特に強調したいポイントとしてCDK in TypeScriptが良かった点を3つ挙げて説明した。最初のコードが少ないという点については「new ec2.Vpc(scope:this, id:”VPC”, props:{});」というコードだけでTerraformの記述よりも短くなる点を、例を挙げて説明した。

TypeScriptの記述では多くのHCLを書かなくてはならない例

TypeScriptの記述では多くのHCLを書かなくてはならない例

また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をしたいなどの理由と合致する組織のエンジニアは、一考するに値する内容であったと感じた。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

設計/手法/テストイベント
第8回

CI/CD Conference 2023から、コストをかけずにGitHub Actionsを実行するノウハウを紹介

2023/6/27
CI/CD Conference 2023から、あまりコストをかけずにGitHub Actionsを実行するノウハウを解説したセッションを紹介する。
設計/手法/テストイベント
第7回

CI/CD Conference 2023から、Kubernetesの構成をテストする事例を解説したセッションを紹介

2023/6/26
CI/CD Conference 2023から、ソフトバンクのエンジニアによるKubernetes構成をテストする事例を解説したセッションを紹介する。
設計/手法/テストイベント
第6回

CI/CD Conference 2023、DMMのエンジニアが解説するCIを加速するトランクベースの開発とは

2023/6/23
CI/CD Conference2023から、CIを加速するトランクベースの開発をDMMのエンジニアが解説したセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています