テクノロジー クラウドコンピューティング 非公開: IaC ツールについて: AWS CDK と Terraform

IaC ツールについて: AWS CDK と Terraform

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

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

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

コードとしてのインフラストラクチャ (IAC または IAAC とも呼ばれます) は、この問題を解決します。 IAC を使用すると、リソースをコードとして定義し、このコードを使用してクラウド サービスをプロビジョニングできます。インフラストラクチャをコードとして使用すると、複数の開発者がインフラストラクチャで共同作業し、開発者による変更を追跡できるようになります。

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

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 の詳細については、関連記事「IAC ツールについて: CloudFormation と Terraform」を参照してください。

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

テラフォーム

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

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

AWS CDK

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

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

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

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 ツールの範囲を考慮すると、2 つのツールのうちでは Terraform が明らかに優れています。開発者がすべてのクラウド プラットフォームに対して 1 つのツールを使用できるようにすることは非常に合理的です。

#3. パフォーマンス

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

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

#4. モジュール性

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

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

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

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

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

IAM を使用してアカウント リソースへのアクセスを制御することに加えて、Terraform はコード フレームワークとしてのポリシー Sentinel を提供します。 Sentinel を使用すると、Terraform を介してユーザーのアクションを正しく制御するための詳細なポリシーを作成できます。

結論

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

全体として、AWS CDK と Terraform は両方とも成熟した強力なツールです。 Terraform には、データ操作に関して若干の欠点があります。ただし、私の経験では、Terraform の作成に慣れてくると、回避策の使用やデータ変換の実行が容易になります。マルチクラウド運用の場合、Terraform は明らかな選択肢です。ただし、クラウドプロバイダーとして AWS の使用を検討している場合は、AWS CDK が優れた代替手段となります。

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

「 IaC ツールについて: AWS CDK と Terraform」についてわかりやすく解説!絶対に観るべきベスト2動画

AWS CDKとGitHub Actionsで始めるInfrastructure as CodeのCI/CD #devio2022
[Japanese] AWSにおけるIaCを活かしたTerraformの使い方2選!〜循環型IaCとマルチクラウドチックなDR環境〜

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

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

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

コードとしてのインフラストラクチャ (IAC または IAAC とも呼ばれます) は、この問題を解決します。 IAC を使用すると、リソースをコードとして定義し、このコードを使用してクラウド サービスをプロビジョニングできます。インフラストラクチャをコードとして使用すると、複数の開発者がインフラストラクチャで共同作業し、開発者による変更を追跡できるようになります。

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

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 の詳細については、関連記事「IAC ツールについて: CloudFormation と Terraform」を参照してください。

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

テラフォーム

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

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

AWS CDK

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

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

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

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 ツールの範囲を考慮すると、2 つのツールのうちでは Terraform が明らかに優れています。開発者がすべてのクラウド プラットフォームに対して 1 つのツールを使用できるようにすることは非常に合理的です。

#3. パフォーマンス

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

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

#4. モジュール性

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

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

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

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

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

IAM を使用してアカウント リソースへのアクセスを制御することに加えて、Terraform はコード フレームワークとしてのポリシー Sentinel を提供します。 Sentinel を使用すると、Terraform を介してユーザーのアクションを正しく制御するための詳細なポリシーを作成できます。

結論

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

全体として、AWS CDK と Terraform は両方とも成熟した強力なツールです。 Terraform には、データ操作に関して若干の欠点があります。ただし、私の経験では、Terraform の作成に慣れてくると、回避策の使用やデータ変換の実行が容易になります。マルチクラウド運用の場合、Terraform は明らかな選択肢です。ただし、クラウドプロバイダーとして AWS の使用を検討している場合は、AWS CDK が優れた代替手段となります。

IaC ツールについて: AWS CDK と Terraform
IaC ツールについて: AWS CDK と Terraform

「 IaC ツールについて: AWS CDK と Terraform」についてわかりやすく解説!絶対に観るべきベスト2動画

AWS CDKとGitHub Actionsで始めるInfrastructure as CodeのCI/CD #devio2022
[Japanese] AWSにおけるIaCを活かしたTerraformの使い方2選!〜循環型IaCとマルチクラウドチックなDR環境〜