AWSでのCloudformation / ServerlessとTerraform
Terraformのようなツールの必要性を理解したいと思います。Cloudformationテンプレートが利用可能であり、それを使用してすべてのAWSサービスを作成/更新できる場合、Terraformのようなサービスを使用するポイントは何ですか。提案してください。
回答
CloudFormation(CFN)とTerraform(CF)は、どちらもInfrastructure as Code(IaC)開発ツールです。
ただし、CFNはAWS専用です。Azure、GCP、またはAWSエコシステム以外のものでは使用できません。対照的に、TFはクラウドに依存しません。複数のクラウドプロバイダーで使用できるだけでなく、Docker、さまざまなデータベース、必要に応じてドミノピザなどの非クラウド製品を操作することもできます。
したがって、TFの主な利点は、一度学習すれば、多くのクラウドプロバイダーに適用できることです。CFNはAWSでのみ役立ちます。CFNの使用をやめると、他のクラウドと連携するために何か新しいことを学ぶ必要があります。
TFとCFNの動作にも違いがあります。どちらにも長所と週末があります。例えば:
CFNを使用してデプロイすると、すべてのリソースがテンプレートのソースコードとともにAWSの1つの中央の場所で表示できるようになります。一方、TFではそのような場所はありません。AWSコンソールにログインすると、TFによって何が作成されたか、使用されたソースコードは何かなどがわかりません。
TFにはループがあり、複雑なデータ構造と条件がありますが、CFNにはありません。
CFNには作成ポリシーと更新ポリシーがありますが、TFにはありません。
CFNポリシーとIAMポリシーを使用して、CFNへのアクセスを制御できます。TFはAWSの外部に「存在する」ため、同じことを行うことはできません。
CloudFormationではなくTerraformを選択する理由はいくつかあります。
- ベンダーにとらわれない:将来、クラウドインフラストラクチャを移行する必要があるかもしれません。これは、いくつかの理由(コスト、規制順守など)が原因である可能性があります。Terraformを使用すると、同じツールを使用して新しいインフラストラクチャを展開できます。Terraformモジュールを賢く使用することで、インフラストラクチャの大部分をコードリポジトリとしてそのままにしておくこともできます。
- 他のツールのサポート:これも前のポイントに少し基づいていますが、TerraformはAWSリソースだけでなくはるかに多くをデプロイできます。たとえば、Terraformを使用して、Ansibleで構成されたEC2マシンのデプロイを調整できます。または、Terraformを使用して、Kubernetesクラスターの上にアプリケーションをデプロイすることもできます。CloudFormationはカスタムラムダの作成を介してカスタムリソースをサポートしますが、維持するのは非常に多くの作業です。
- より広いエコシステム: Terraformのオープンソースの性質により、コードとしてのインフラストラクチャのテストや継続的なコンプライアンスの構築など、あらゆる種類の問題の解決に役立つツールの巨大なエコシステムがあります。
- 間違いなくより良い言語:個人的には、TerraformはCloudFormationよりもCodeとしてのインフラストラクチャに適していると思います。Terraformには、言語(HCL)に組み込まれた柔軟性がはるかに高く、そのモジュールシステムにより、CloudFormationで実現できるものよりもはるかに多くの構成可能性が可能になります。