

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Terraform の開始方法: AWS CDK と AWS CloudFormation の専門家向けのガイダンス
<a name="introduction"></a>

*Amazon Web Services (AWS)、Steven Guggenheimer*

*2024 年 3 月* ([ドキュメント履歴](doc-history.md))

クラウドリソースのプロビジョニングの経験が の領域のみにある場合 AWS、 [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)および 以外の Infrastructure as Code (IaC) ツールの使用経験が限られている可能性があります[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。実際、Hashicorp Terraform などの同様のツールにはまったく慣れていない場合があります。ただし、クラウドジャーニーをより深く進めるほど、Terraform に遭遇することが避けられないようになります。その中核となる概念に精通することが決定します。

Terraform、 AWS CDK、および CloudFormation は同様の目標を達成し、多くの主要な概念を共有しますが、いくつかの違いがあります。Terraform に初めて近づいている場合は、これらの違いに備えていない可能性があります。結局のところ、 AWS CDK スタックと CloudFormation スタックはすべて 内をベースとしているため、その方法では AWS アカウント、維持するほとんどのリソースと直接的な関係があります。Terraform は、単一のクラウドプロバイダーの環境には基づいていません。これにより、さまざまなプロバイダーを柔軟にサポートできますが、リモートロケーションまでリソースを維持する必要があります。

このガイドは、Terraform の背後にある主要な概念をわかりやすく説明し、発生する IaC チャレンジの処理に役立ちます。Terraform がプロバイダー、モジュール、状態ファイルなどの概念を使用してリソースをプロビジョニングする方法に焦点を当てています。また、Terraform の概念と、 AWS CDK および CloudFormation が同様のオペレーションを実行する方法とは対照的です。

**注記**  
は、開発者がプログラムによるコーディング言語を使用して CloudFormation スタックをデプロイする AWS CDK のに役立ちます。を実行すると`cdk synth`、コードは CloudFormation テンプレートに変換されます。その時点から、プロセスは AWS CDK と CloudFormation の間で同じです。簡潔にするために、このガイドは通常 CloudFormation 用語の AWS IaC プロセスを参照しますが、比較は に似ています AWS CDK。

## CloudFormation と Terraform の用語
<a name="cf-nshort-and-terraform-terminology"></a>

Terraform と AWS CDK および CloudFormation を比較する場合、IaC コア概念の説明に使用される用語が一貫していないため、IaC コア概念の照合が困難になる可能性があります。以下に、これらの用語と、このガイドでそれらの用語がどのように参照されるかを示します。
+ **スタック*** – **スタック*は CI/CD パイプラインにデプロイされ、単一のユニットとして追跡可能な IaC です*。 *この用語は CloudFormation で一般的ですが、Terraform はこの用語を実際には使用しません。Terraform スタックは、すべての子モジュールを含むデプロイされたルートモジュールです。ただし、*モジュール*という用語との混同を避けるために、このガイドでは*スタック*という用語を使用して両方のツールの単一のデプロイを記述します。
+ **状態** - *状態*は、現在追跡されているすべてのリソースと、IaC デプロイスタック内の現在の設定です*。*[Terraform の状態とバックエンドについて](states-and-backends.md) セクションで説明されているように、Terraform は CloudFormation よりも *状態*という用語を使用します。これは、状態の維持は Terraform でより目立つが、状態の追跡と更新は CloudFormation にとって同様に重要であるためです。
+ **IaC ファイル – ** *IaC ファイルは*、Infrastructure as Code (IaC) 言語を含む単一のファイルです*。*CloudFormation は、単一の CloudFormation ファイルを*テンプレート*として参照します。ただし、Terraform の[テンプレート](https://developer.hashicorp.com/terraform/language/expressions/strings#string-templates)と[テンプレートファイルは](https://developer.hashicorp.com/terraform/language/functions/templatefile)まったく異なります。Terraform の CloudFormation テンプレートに相当するものは、*設定ファイル*と呼ばれます。このガイドの混乱を最小限に抑えるために、 *ファイル*または *IaC ファイル*という用語は、CloudFormation テンプレートと Terraform 設定ファイルの両方を参照するために使用されます。

次の表は、CloudFormation と Terraform で使用される用語を比較したものです。このテーブルの目的は、類似点を表示することです。これらは one-to-one の比較ではありません。各概念は、CloudFormation と Terraform で少なくともわずかに異なります。概念については、このガイドの関連するセクションで詳しく説明します。


****  

| CloudFormation 用語 | Terraform 用語 | このガイドのセクション | 
| --- | --- | --- | 
| CDK インターフェイス (IBucket など) | データソース | [Terraform データソースについて](data-sources.md) | 
| [変更セット] | プラン | [Terraform モジュールについて](modules.md) | 
| 条件関数 | 条件式 | [Terraform 関数、式、メタ引数について](functions-expressions.md) | 
| DependsOn 属性 | depends\_on メタ引数 | [Terraform 関数、式、メタ引数について](functions-expressions.md) | 
| 組み込み関数 | 関数 | [Terraform 関数、式、メタ引数について](functions-expressions.md) | 
| モジュール | モジュール | [Terraform モジュールについて](modules.md) | 
| アウトプット | 出力値 | [Terraform 変数、ローカル値、出力について](variables-locals-outputs.md) | 
| パラメータ | [変数] | [Terraform 変数、ローカル値、出力について](variables-locals-outputs.md) | 
| レジストリ | プロバイダー | [Terraform プロバイダーについてプロバイダー](providers.md) | 
| テンプレート | 設定ファイル | すべて | 