Terraform WindowsとTerraform EC2の始め方

インフラストラクチャとしてのコード(IaC)の領域では、過去数年間で最も有用なツールの1つはHashiCorpのTerraform Windowsです。インフラストラクチャのバージョン管理、リソースの自動プロビジョニング、さまざまなクラウドベンダーでの実行能力は、どのDevOpsと自動化ワークフローにとっても非常に重要です。

Terraformの1つのユースケースは、CI/CDです。Terraformを使用すると、以下の作業を実行できます:

私の最新のビデオ

  • テスト環境の作成
  • アプリケーションのデプロイ
  • 統合テストの実行
  • テスト環境の破棄

これらのすべてのステップは自動的に実行されます。また、データセンターは必要ありません!

前提条件

この記事では、Terraform Windowsのセットアップと実行方法について説明します。一緒に進める場合は、以下の前提条件を満たしていることを確認してください。

  • A Windows 10 device
  • AWSアカウント
  • そのデバイスにAWS CLIがインストールされ、設定されていること。インストール方法はこちら、設定方法はこちらで学ぶことができます。
  • (オプション)Terraform拡張機能を備えたVisual Studio Code

Terraform Windowsアプリケーションのインストール

Terraformの機能を最大限に活用するには、まず選択したオペレーティングシステムにTerraformをインストールする必要があります。この記事では、Windowsに焦点を当てますが、Terraformは他のオペレーティングシステムでも実行できることを知っておいてください。Windows以外の場合は、インストールドキュメントを参照してください。

手動でインストールする場合

パッケージマネージャーを使用できない場合、またはインストールプロセスの動作を理解したい場合、Terraformを手動でインストールできます。バイナリをダウンロードし、それをシステムパス環境変数に追加することができます。これが難しそうに見える場合でも、次のセクションで簡単な方法があるので安心してください。

  1. Terraformの適切なバージョンをHashiCorpのダウンロードページからダウンロードします。私の場合、Windows 64ビット版です。
  2. Terraformの実行可能ファイルを配置するためのC:\ドライブにフォルダを作成します。私はインストーラをC:\toolsなどのサブフォルダに配置することをお勧めします。
  3. ダウンロードが完了したら、ファイルエクスプローラーでそれを探してください。zipファイルをステップ2で作成したフォルダに展開します。
  4. スタートメニューを開き、”environment”と入力すると、最初に表示されるのはシステム環境変数の編集オプションです。それをクリックすると、このウィンドウが表示されます。
System Properties

5. 下部の環境変数…をクリックすると、次のような画面が表示されます:

Windows environment variables

6. 「システムの環境変数」と書かれた下部のセクションの中で、Pathという名前の項目を見つけて編集をクリックします。すると、Windowsが必要とするバイナリの場所のリストが表示されます。

7. 新規をクリックし、terraform.exeが保存されているフォルダのパスをリストの一番下に追加します。完了時には、以下のようになります。

Editing the system path

8. 開いたメニューのそれぞれに対してOKをクリックし続け、メニューが表示されなくなるまで進めます。

9. 新しいパスがWindowsに認識されることを確認するために、新しいCMD/PowerShellプロンプトを開き、refreshenvと入力します。

10. terraform --versionと入力してインストールが成功したか確認します。バージョンが表示されれば、準備完了です。

簡単な方法

ふー、たくさんの作業でしたね!新しいソフトウェアをデバイスにインストールするたびにこれを行うのは大変です。代わりにパッケージマネージャを使用しましょう。Windowsで使用できるいくつかのパッケージマネージャがありますが、私のおすすめはChocolateyです。これは一行のコマンドでソフトウェアのインストール、削除、更新を簡単に行うことができ、Terraformも例外ではありません。

Chocolateyを使用してTerraformをインストールするには、以下の手順を実行します。

  1. 管理者としてCMD/PowerShellプロンプトを開き、インストールページからコマンドを使用してChocolateyをインストールします。
  2. それが完了したら、choco install terraformを実行します。必要に応じて、デバイスに自動的に同意するために末尾に-yを追加することもできます。

そのコマンドを実行すると、次のような結果が表示されます。

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3.   インストールが成功したかを確認するには、terraform --versionを入力します。

Linuxの方法

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

はい、それはまだ使えます。ただし、Windows 10の機能の1つであるWindows for Linux Subsystem、またはWSLを使用することもできます。これにより、Windows上でLinuxコマンドを実行できます。

  1. WSLをインストールします。ここでは、WSLのインストールとセットアップ方法について詳しく説明しませんが、一緒に進めるためにまだ設定されていない場合は、以下のTechSnipsのスニップを参照してください。

2.   WSLシェルでapt-get install unzipを実行します。これは後でTerraformバイナリを展開するために必要です。

3.   wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zipを実行してTerraformをダウンロードします。バージョンとアーキテクチャをデバイスに最適なもので置き換えてください。Terraformのリリースの完全なリストはこちらで確認できます。

4.   unzip terraform_0.12.6_linux_amd64.zip terraform を実行して、zip ファイルの内容を terraform という名前のフォルダに展開してください。

5.   ZIP ファイルが解凍されたら、システムパスからアクセス可能な場所に移動する必要があります。幸いにも、Linux にはデフォルトでバイナリを追加できるフォルダがあります。Terraform バイナリを mv terraform /usr/local/bin/ を実行してそこに移動してください。/usr/local/bin フォルダはシステムパスにすでに設定されています。

6.   インストールが成功したかどうかを確認するために、terraform --version を実行してください。

AWS Terraform EC2 インスタンスの自動化

Terraform をインストールしたので、使用を開始できます。この記事では、シンプルな AWS Terraform EC2 インスタンスの構築をデモンストレーションします。ただし、Terraform は数百種類の異なるインフラストラクチャをプロビジョニングできることを知っておいてください。

始めるには、Terraform EC2 スクリプトを実行するためのディレクトリが必要です。各環境ごとに別のディレクトリを持つことが重要です。この時点では、Terraform には実行する内容をフィルタリングする方法がありません。現在の作業ディレクトリのすべてのスクリプトが実行されます。

TF スクリプトのセットアップ

  1. 管理者として実行される cmd や PowerShell コンソールで、mkdir hello-terraform を実行してから cd ./hello-terraform を実行してください。
  2. ディレクトリを作成したら、Terraformスクリプトが必要になります。以下は使用できる例です。これはAWSのプロバイダを使用してAWSのインスタンスリソースを作成する典型的なTerraformスクリプトです。

スクリプト全体が必要な場合は、以下をコピーしてください。このスクリプトの動作を理解したい場合は、以下をお読みください。

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

上記のスクリプトをmain.tfという名前で作業ディレクトリに保存します。

TFスクリプトの理解

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

さらに進む前に、以下のブロックとその宣言に注目してください。

#Terraform HCL

このブロックは、Terraform EC2にどのプロバイダを使用するかを伝えています。主要なクラウドベンダーのプロバイダだけでなく、オンプレミスのベンダーのプロバイダもあります。より高度な場合は、自分でGolangを書くこともできます。

このブロックは、TerraformにAWSプロバイダを使用し、~/.aws/credentialsファイル内のdefaultプロファイルのアクセスキーを使用するよう伝えています。このファイルは、前提条件に記載されているように、aws configコマンドでAWS CLIをセットアップすると作成されます。

また、~/は現在のユーザーディレクトリの省略形です。Windowsの場合、これは$env:USERPROFILEまたは%USERPROFILE%と等価です。ただし、Terraformはその表記をサポートしていません(執筆時点では)。

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

以下のブロックは、Terraform EC2インスタンスの作成方法と構築内容について説明しています。 aws_instanceのTerraformドキュメントを参照すると、いくつかのパラメータが必須であることとオプションであることがわかります。この場合、必須パラメータはUbuntu 18.04 LTS用のAMI ID(ami-07d0cf3af28718ef8)とインスタンスタイプのt2.microです。

作成されるインスタンスにNameというキーとHelloTerraformという値のタグブロックを渡すことで、このタグも割り当てられます。これはオプションです。

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  AWS Terraform EC2インスタンスの構築:テスト
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

スクリプトが設定されたら、作業ディレクトリからterraform initを実行して呼び出します。これにより、すべての依存関係とプロバイダが.terraformというフォルダにダウンロードされます。うまくいけば、次のような結果が得られるはずです:

変更を行う前に、Terraform EC2ではterraform planを実行することで、作成される内容を確認することができます。以下はその出力です:

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# aws_instance.ubuntu が作成されます

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

AWS EC2インスタンスの構築:作成中

これで、terraform applyを実行して自分自身で実行する準備が整いました。以下は、terraform planと同様の出力ですが、変更を適用することを確認するためのプロンプトが追加されています。

「はい」と入力すると、Terraform EC2はアクセスキーを使用してAWS APIを呼び出し、Terraform EC2インスタンスのプロビジョニングを開始します。これには時間がかかる場合があります。完了すると、以下のような表示が表示されます:

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

AWS EC2インスタンスの破棄

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

テスト環境の使用が終わったら、インスタンスを破棄することができます。

コマンドプロンプト/PowerShellコンソールで、terraform destroyと入力します。applyコマンドと同様に、Terraformが破棄するリソースのリストが表示され、実際に破棄する前に確認が求められます。

「はい」と入力すると、Terraform EC2はインスタンスの破棄を開始し、完了したことを確認します。

Source:
https://adamtheautomator.com/terraform-windows/