IAC ツールについて: AWS CDK と Terraform の比較

公開: 2022-03-31

AWS CDK と Terraform – どちらを選択すればよいかわからない? この記事は、十分な情報に基づいた決定を下すのに役立ちます。

クラウド コンピューティングは、情報とテクノロジーの世界に革命をもたらしました。 アプリケーションの展開と保守の方法から開発の実践まで、すべてがクラウド コンピューティングの影響を大きく受けています。 すべての新しいアプリケーションは、クラウド ネイティブであり、クラウド サービスと互換性があるように開発されています。

クラウド コンピューティングは、可用性が高く、スケーラブルで効率的なアーキテクチャを開発するのに役立ち、クラウド サービスの需要がますます高まっています。 このクラウド コンピューティングのブームに伴い、インフラストラクチャをコードとして維持する必要性が生じています。 コンソールを介して手動でクラウド リソースを維持することは、追跡が非常に困難な複雑なタスクになる可能性があります。

コードとしてのインフラストラクチャ、別名 IAC または IAAC は、この問題を解決します。 IAC を使用することで、リソースをコードとして定義し、このコードを使用してクラウド サービスをプロビジョニングできます。 Infrastructure as a Code を使用すると、複数の開発者がインフラストラクチャで共同作業し、開発者が行った変更を追跡できます。

AWS のコードとしてのインフラストラクチャ

AWS は、世界で最も広く使用されている最大のクラウド プロバイダーです。 独自の IAC ツールである AWS CloudFormation または AWS CDK があり、Terraform などのサードパーティの IAC ツールでリソースをプロビジョニングすることもできます。 AWS 用の IAC ツールを選択する場合、サードパーティ ツールである Terraform は、AWS マネージド ツールである AWS CloudFormation および AWS CDK との確固たる競争相手です。

これらの各ツールには非常に多くの選択肢と機能が用意されているため、適切な IAC ツールを選択するのは困難な場合があります。 この記事では、AWS CDK と Terraform の違いについて説明します。 AWS CDK は内部で Cloudformation を使用しているため、Cloudformation と Terraform の詳細については、関連記事「Understanding IAC tools: CloudFormation vs. Terraform」を参照してください。

テラフォーム

Terraform は、Hashicorp によって最初に開発されたオープンソースのコードとしてのインフラストラクチャ ツールです。 AWS だけでなく、他のクラウド プロバイダーもサポートする、非常に正確で成熟したツールです。 Terraform は AWS のすべてのサービスをサポートしており、開発コミュニティは、AWS がそのサービスに追加する新機能をすぐに取り上げます。 これにより、Hashicorp 開発言語 (HCL) でコードを記述できます。 HCL は、インフラストラクチャ リソースを定義するための JSON に似た言語です。

AWS CDK

AWS CDK は、AWS CloudFormation のラッパーです。 AWS CDK の動作を理解するには、AWS CloudFormation について少し知っておく必要があります。 AWS CloudFormation は、YML または JSON 形式で AWS インフラストラクチャを定義できる AWS 管理ツールです。 JSON と YML を読むのは簡単ですが、実際のプログラミング言語ではありません。 ループと関数のネイティブ サポートがないため、大規模なインフラストラクチャの維持がますます困難になっています。 ここで AWS CDK の出番です。

AWS CDK は AWS CloudFromation のラッパーであり、JAVA や Python などの使い慣れたプログラミング言語を使用してインフラストラクチャをプロビジョニングできます。 これにより、コードの作成と保守が容易になります。

Terraform と AWS CDK: 違い

#1。 言語と使いやすさ

AWS CDK と Terraform の違いを理解するには、言語と使いやすさが不可欠​​です。

最初に Terraform について話しましょう。 Terraform は、JSON に似た言語を使用して、リソースやその他のデータ、HCL、または HashiCorp 構成言語を定義します。 それは非常に簡単で、ドキュメントは初心者でも理解しやすく従うのが簡単です.

S3 バケットを作成するコードを見てみましょう。

 resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }

コードは非常に読みやすく、このリソースがサポートする他のパラメーターは Terraform ドキュメントで確認できます。

前述のように、AWS CDK は CloudFormation ラッパーであり、プログラミング言語でリソースを定義できるようにします。 S3 バケットを作成するための AWS CDK コードを見てみましょう。

 import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class BucketStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket', { bucketName: 'my-first-bucket', }); } }

Terraform コードは CDK よりも少しきれいに見えますが、Terraform コードと CDK コードはどちらも非常に単純です。 小規模なプロジェクトに IAC を使用する予定がある場合は、言語と使いやすさに関する限り、Terraform と CDK の両方が優れたオプションです。

ただし、多くの開発者が参加する大規模なプロジェクトに適した IAC ツールを選択する場合、Terraform には欠点があります。 Terraform は単純ですが、新しい言語であるため、使用されている他のプログラミング言語とは異なるまったく新しい言語で開発者をトレーニングする必要があります。 さらに重要なことに、Terraform でのデータ操作は、他のプログラミング言語ほど単純ではありません。 たとえば、リストとオブジェクトを繰り返し処理して値を変換することは、特に初心者にとっては簡単ではありません。

個人的には、使いやすさを考えると、Terraform よりも AWS CDK の方が好みです。 Terraform を使用する場合、目的の結果を得るために回避策や複雑なスクリプトを使用しなければならないことがありました。 データを制御できることと、AWS CDK 言語でデータを簡単に操作できることは、AWS CDK にとって大きなメリットです。

#2。 範囲

Terraform はマルチクラウド IAC ツールです。つまり、Terraform を AWS だけでなく、Azure や GCP などの他のクラウド プロバイダーでも使用できます。 Terraform は、マルチクラウド デプロイを作成し、アプリケーションに任意の数のクラウド プロバイダーを用意するための優れたツールです。

クラウド プロバイダーのサービスの問題により、広く使用されているグローバル プラットフォームがダウンすることがありました。 今日では、アプリケーションに複数のクラウド プロバイダーを用意することは賢明な判断です。

AWS CDK は IAC 向けの AWS サービスです。 CDK は強力で成熟している可能性がありますが、AWS クラウドにのみ限定されています。

IAC ツールの適用範囲を考慮すると、Terraform が 2 つの中で明らかに優れています。 開発者がすべてのクラウド プラットフォームに対して 1 つのツールを使用することは非常に理にかなっています。

#3。 パフォーマンス

通常、パフォーマンスは、適切な IAC ツールを選択する際の最も重要な基準ではありませんが、大規模なプロジェクトでは重要になる場合があります。 Terraform は AWS SDK を使用してリソースをデプロイしますが、CDK コードは最初に CloudFormation テンプレートに変換されてから適用されます。

特に CDK がコードを CloudFormation テンプレートに変換するのに時間がかかるため、Terraform は AWS CDK よりもわずかに高速に動作します。

#4。 モジュール性

Terraform と AWS CDK の両方を使用してモジュールを作成できます。 Terraform には、モジュールのネイティブ サポートがあります。 独自のモジュールを作成し、プライベート モジュール レジストリでホストして、組織内で使用することができます。 Terraform には、公開モジュールをホストおよび使用するための公開モジュール レジストリもあります。

AWS CDK では、再利用可能な関数やクラスを作成し、このコードを組織内で共有して同じ結果を得ることができます。 これは、他の AWS IAC ツールと同様に、AWS CDK の大きな利点です。CloudFormation では、コードをモジュールとして作成して再利用することはできません。 CloudFormation でネストされたスタックを使用してこの要件を達成できますが、AWS CDK を使用する方がはるかに適切な代替手段です。

全体として、両方のツールはこの点で似ています。

#5。 コントロールとガバナンス

最終的に、AWS コンソールへのすべてのアクセスは、AWS の ID 管理サービスである IAM によって制御されます。 AWS CDK と Terraform の両方で IAM ポリシーを使用して、特定のアクションを許可および拒否できます。 IAM を使用すると、アカウントで実行できるアクションをきめ細かく制御できます。

IAM を使用してアカウント リソースへのアクセスを制御するだけでなく、Terraform はコード フレームワークとしてポリシーSentinelを提供します。 Sentinel を使用すると、きめ細かいポリシーを記述して、Terraform を介してユーザーのアクションを正しく制御できます。

結論

AWS CDK は内部で CloudFormation を使用しているため、CloudFormation と Terraform の記事を参照して、AWS CDK と Terraform の違いをよりよく理解することをお勧めします。

全体として、AWS CDK と Terraform はどちらも成熟した強力なツールです。 データ操作に関しては、Terraform にはわずかな欠点があります。 ただし、私の経験では、Terraform の作成に慣れると、回避策を使用してデータ変換を実行するのが簡単になります。 マルチクラウド運用の場合、Terraform は当然の選択です。 ただし、AWS をクラウド プロバイダーとして使用する場合は、AWS CDK が優れた代替手段です。