TerraformやAWS CDKで実践するIaCによるAWSインフラ管理

Infrastructure as Code(IaC)とは

今の世の中ではいろいろな開発者向けサービスがクラウド上で展開され、そのほとんどのサービスでWeb UIの管理画面を提供しています。直感的なWeb UIのおかげで、ドキュメントを深く読み込まなくても画面を見れば設定内容がつかめることが多く、使ったことのないサービスであっても、Web画面をポチポチすることで必要な設定をして、すぐに使い始められることが多いでしょう。

Amazon Web Services(AWS)にもAWSマネジメントコンソールと呼ばれるWeb UIが提供されています。Web画面を見れば、AWSのそれぞれのサービスでどのような設定ができるのか直感的にわかり、簡単にさまざまなサービスを使うことができます。

ソフトウェア開発では、⁠開発」⁠ステージング」⁠本番」など複数の環境を用意するのが一般的です。本番稼働を見据えた検証を「開発」「ステージング」で行うには、これらの環境の設定は「本番」と同じである必要があります。しかし、AWSマネジメントコンソールで同じ操作を各環境に実施するのは必ずしも容易ではなく、設定の一致を確認するのも手間がかかります。このような状況を解決しようとするのがInfrastructure as Code(IaC)という考え方です。構築された状態をコードで「宣言的」に記述し、対応するツールが宣言された状態にするための操作の実行計画を作成し、その操作を実行します。コードに実現したい状態を記述して、それを複数の環境に適用することで、それぞれの環境で同じ設定であることが保証されます。また、設定がコードになっているので、画面よりも設定の俯瞰がしやすくなります。

AWS IaCのためのツール: TerraformとAWS CDK

AWSのリソースを構築するためのIaCのツールとして、Terraform、AWS CDKなどがよく使われます。ただ、これらのツールを1つのプロジェクトで併用することはほとんどなく、プロジェクトごとに使うツールを決めていることが多いでしょう。

TerraformはJSONとも互換性があるHCLと呼ばれる言語でコードを記述します。AWSに限らず、リソースを操作するためのAPIが提供されていて、そのAPIを用いた「プロバイダ」と呼ばれるプラグインがあるサービスで使うことができます。プロバイダには、AWS、Google Cloud、Microsoft Azureといったパブリッククラウドサービスをはじめ、Auth0、Datadog、Snowflake、GitHubなどのさまざまなサービスに対応したものが開発されています。

AWS CDKはAWSサービス専用のIaCツールで、TypeScriptやPythonなどのプログラミング言語で記述したコードからAWSのIaCサービスであるAWS CloudFormationのテンプレートを生成して、AWS CloudFormationの仕組みを使ってリソースを構築します。AWS CDKのコードではリソースを抽象的に記述できるため、少ないコードですばやくリソースを構築できる利点があります。

これらの2つのツールは「宣言的なコードの記述」という大きな枠組みでは共通しています。一方、宣言的な記述を適用するときには、⁠なんらかの状態」と比較して差分を抽出することが必要です。実は、その「なんらかの状態」が2つのツールの間で異なっています。その結果、コードの記述法だけでなく、リソースを構築したあとの変更や管理に注意すべき違いがあります。

IT技術者のための技術書シリーズ「エンジニア選書」の1つとして発刊された[詳解⁠⁠ AWS Infrastructure as Code ̶̶ 使って比べるTerraform & AWS CDKでは、それぞれの基本的な使い方を解説しつつ、両ツールの横断的な比較を試みています。