BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AirBnbがAWSとTerraformを使ってiOS用のCIパイプラインを改善

AirBnbがAWSとTerraformを使ってiOS用のCIパイプラインを改善

AirBnbはこれまで、iOSの継続的インテグレーションパイプラインを実行するために、独自のMacのフリートを管理してきた。AWSがMacをサポートするおかげで、AirBnbのエンジニアはiOS CIインフラをAWSに移行し、柔軟性、一貫性、効率性を向上させた。

AirBnbがサポートする他のプラットフォームの管理方法とは逆に、iOS用のCIパイプラインはもともとAWS上で動作していなかった。実際、Macを使うことで、iOSアプリの構築やテストの実行にAppleのツールを活用することが可能になったが、メンテナンスコストの増加やテスト効率の低下を招いていた。

特にエンジニアは、Macの全機種がAirBnbのモバイルデバイス管理ツールに登録されているか、またmacOSとXcodeの最新バージョンが動作しているかを確認する必要があった。専任のエンジニアがいても、一部のMacが悪い状態になり、パイプラインから除外される可能性は防げない。また、最新のXcodeにアップデートすると、テストに使用できるマシンの台数や維持費がさらに減る可能性もあった。

AirBnbのエンジニアであるMichael Bachand氏は、macOSのAMIが利用可能になったことで、AirBnbはCIパイプラインをAWSに移行し、多くの明確な利点を得たと説明する。1つのAMIで追加のインスタンスを自動的に起動できるようになったほか、サポートするすべてのプラットフォームでCIインフラを統合できるようになった。

AirBnbは、AMIの構築にHashiCorp Packerを使用している。このツールは、HashiCorp構成言語(HCL)で定義されたテンプレートに基づき、EC2インスタンスを起動し構成できる。このステップは完全に自動化でき、PackerのテンプレートはGitを使用してバージョン管理できる。

AirBnbのCIソリューションに欠かせないもう一つのコンポーネントがTerraformで、これはiOSのCIインフラを他の対応プラットフォームと同様の方法でAWSにデプロイするために使用される。

iOS CI用のAWSインフラはすべて、ソースコントロールにチェックするTerraformコードで指定されている。iOS CIに関連するプルリクエストをマージするたびに、Terraform Enterpriseは私たちの変更をAWSアカウントに自動的に適用する。

スケーリングは、buildkite-agent-scalerの修正版を使用したAuto scaling groupによって処理される。インスタンスは、AMIと「起動」スクリプトを含むすべての特性を指定する起動テンプレートから作成される。

このCIセットアップには、多くの利点があるとBachand氏は言う。一方では、必要なCPUアーキテクチャやXcodeのバージョンごとに新しいCI環境を簡単に作る。CI環境を使用しない場合は、Auto scaling groupの設定を変更して無効にする。

このセットアップのもう一つの利点は、毎日インスタンスを終了して入れ替えることで、インスタンスをローテーションできる。これは、内蔵SSDやNVRAM変数のクリア、ファームウェアのアップデートによって、インスタンスがドリフトする可能性を減らす。万が一、インスタンスがドリフトした場合でも、オートスケーラーから除外し、新しいクリーンなインスタンスを追加することは簡単だ。

このアプローチのおかげで、AirBnbは、仮想マシンのパフォーマンス・ペナルティなしに仮想化のメリットを得ることができ、サポートするプラットフォームごとにCIインフラの扱い方を統一できたと、Bachand氏は書いている。AirBnbの移行に関する詳細の全容については、オリジナルの記事を参照してほしい。

作者について

この記事に星をつける

おすすめ度
スタイル

BT