【初心者向け】MacにTerraformをインストールしてEC2を立ち上げてみる

インフラの構築自動化(コード化)ツールTerraformの入門記事です。

以前から気になっていたので書籍を購入して学習中です。
以下の書籍がわかりやすく、参考にしています。

AWSだけだとCloudFormationだけを学習していればいいですが、Azure、GCPなど他のパブリッククラウドでも利用が出来るのでマルチクラウド環境を触る場合は便利ですね。
今後インフラエンジニアはTerraformとAnsibleは必須な気がします。

入門編の本記事では、Mac(Catalina)にTerraformをインストールしてEC2の立ち上げと終了までをTerraform経由で行ってみたいと思います。

前提条件

  • AWS CLIが設定済み
  • Homebrewが導入済み

設定の概要

手順1
Terraformのインストール
HomebrewでTerraformをインストールします。
手順2
tfenvのインストール
Terraformのバージョン管理ツールをインストールします。
手順3
定義ファイルの作成
EC2をデプロイする定義ファイルを作成します。
手順4
リソースの作成
作成した定義ファイルを元にEC2をデプロイします。
手順5
リソースの削除
デプロイしたEC2を削除します。

TerraformをMacにインストールしてEC2を立ち上げる方法

Terraformのインストール

以下のコマンドを実行してAWS CLIが正常にセットアップされているか確認します。

aws sts get-caller-identity --query Account --output text

12桁の数字がAWSアカウントIDが表示されていれば正常にセットアップされています。

続いてTerraformをインストールします。
以下コマンドでインストールしてください。

brew install terraform

以下のような表示が出ましたらインストール完了です。

######################################################################## 100.0%

==> Pouring terraform-0.13.0_1.catalina.bottle.tar.gz

🍺  /usr/local/Cellar/terraform/0.13.0_1: 6 files, 67.5MB

以下コマンドを実行してインストールされたバージョンを確認します。

terraform --version

バージョンが表示されましたら正常にインストールが完了しております。

Terraform v0.13.0

tfenvのインストール

バージョンマネージャーのtfenvを導入します。
簡単にバージョンの切り替えが出来るので、チーム内でバージョンを合わせることが簡単に出来ます。

以下のコマンドを実行してインストールします。

brew install tfenv

下記エラーが表示されたらbrew unlink terraformを実行してください。
Terraformがインストールされている状態だとunlinkを行う必要があるとのことです。

Error: Cannot install tfenv because conflicting formulae are installed.

terraform: because tfenv symlinks terraform binaries

参考URL:Terraformのバージョン切り替えにtfenvを試してみる

以下のコマンドを実行してバージョンを確認します。

tfenv --version

tfenv 2.0.0

続いて以下のコマンドを実行してインストール出来るバージョンの一覧を確認します。

tfenv list-remote

0.13.0
0.13.0-rc1
0.13.0-beta3
0.13.0-beta2
0.13.0-beta1
0.12.29
0.12.28
0.12.27
…..

以下のコマンドを実行して指定したバージョンを導入します。

tfenv install 0.13.0

続いて以下のコマンドを実行して導入されているバージョン、使用するバージョンが確認できます。

tfenv list

以下のようにインストール可能な一覧が表示されます。

上記が出る時は、tfenv useでデフォルトで使用するバージョンを指定してください。

cat: /usr/local/Cellar/tfenv/2.0.0/version: No such file or directory

Version could not be resolved (set by /usr/local/Cellar/tfenv/2.0.0/version or tfenv use <version>)

tfenv-version-name failed

以下のコマンドを実行して使用するバージョンを指定します。

tfenv use 0.13.0

Switching default version to v0.13.0

Switching completed

一覧を以下のコマンドを実行して確認します。
「*」が付いているバージョンが利用するバージョンです。

tfenv list

* 0.13.0 (set by /usr/local/Cellar/tfenv/2.0.0/version)

  0.12.29

定義ファイルの作成

続いてTerraformで実行する定義ファイルを作成します。
フォルダを作成して.tfファイルを作成します。

mkdir terraform
cd terraform
touch main.tf

main.tfは以下の内容を記述してください。

resource "aws_instance" "example" {
ami = "ami-0c3fd0f5d33134a76"
instance_type = "t3.micro"
}

リソースの作成

以下のコマンドを実行してリソース作成に必要なバイナリファイルをダウンロードします。

terraform init

Terraform has been successfully initialized!」が表示されましたら成功です。

続いて以下のコマンドを実行して「実行計画」を出力します。

terraform plan

実行するリージョンを指定します。

provider.aws.region

  The region where AWS operations will take place. Examples

  are us-east-1, us-west-2, etc.

  Enter a value: ap-northeast-1

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_instance.example will be created

  + resource “aws_instance” “example” {

      + ami                          = “ami-0c3fd0f5d33134a76”

      + 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

      + host_id                      = (known after apply)

      + id                           = (known after apply)

      + instance_state               = (known after apply)

      + instance_type                = “t3.micro”

……..

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

————————————————————————

以下のコマンドを実行して計画されたプランを実行します。

 terraform apply

先ほどと同様にリージョンを指定します。

provider.aws.region

  The region where AWS operations will take place. Examples

  are us-east-1, us-west-2, etc.

  Enter a value: ap-northeast-1

An execution plan has been generated and is shown below.

Resource actions are indicated with the following symbols:

以下の表示がされましたら「yes」を入力してください。
リソースが作成されます。

Do you want to perform these actions?

  Terraform will perform the actions described above.

  Only ‘yes’ will be accepted to approve.

  Enter a value: yes

プランが実行されて以下のようにインスタンスが作成されます。

リソースの削除

削除は以下のコマンドを実行して削除します。

terraform destroy

以下の画面が表示されましたらリージョンを指定します。

provider.aws.region

  The region where AWS operations will take place. Examples

  are us-east-1, us-west-2, etc.

  Enter a value: ap-northeast-1

aws_instance.example: Refreshing state… [id=i-xxxxxxxxxxxx]

An execution plan has been generated and is shown below.

Resource actions are indicated with the following symbols:

 以下の画面が表示されましたら「yes」を入力して削除を実行します。

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: yes

aws_instance.example: Destroying… [id=xxxxxxxxxxxx]]

正常に削除が出来ました。

EC2だけしか作成しておりませんが、簡単につくれますね!
.tfファイルをサービス毎に作ればわかりやすいかもしれません。
次はVPCから作成してみようと思います!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です