【はじめてのTerraform】 環境構築とEC2のセットアップ

インフラのコード化。皆さんついていけていますか?
「今だに手順書を作成して、その手順通りにインフラを構築してる。。」そんな方は、必見です。インフラをコードで管理することで環境を一定に保つことができ、管理コストが下がるので是非試してみて下さい。
今回は、クラウドのリソースを管理することができるTerraformの環境構築と簡単なEC2のセットアップを解説していきます。

awscliのセットアップ

Terraformを使用するにあたり、awscliのセットアップが必要です。今回は、pythonの仮想環境であるvirtualenvを使用して環境構築していきたいと思います。

1.仮想環境を作成します。

$ mkdir venv

# 仮想環境の構築
$ virtualenv venv

# 仮想環境の有効化
$ . venv/bin/activate

2.awscliをインストールします。

(venv)$ pip install awscli

3.awscliでアカウント認証を行います。

(venv)$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

以上でawscliのセットアップが完了です。
後続の作業は、virtualenv環境で行います。

Terraformのインストール

下記ページから該当するOSのパッケージをダウンロードして下さい。
Terraformインストールページ

ZIPファイルがダウンロードできるので、それを解凍するとterraformが取り出せます。
後の作業で楽にするためにPATHに追加しておくことをお勧めします。

$ vi ~/.bash_profile
# -------------------------
# 以下を記載します。
# export PATH=$PATH:[terraformが格納されたディレクトリ]
# -------------------------

PATHが通ったらバージョンの確認ができるか試してみて下さい。

(venv)$ terraform -version
Terraform v0.11.11

Terraformの初期化を行います。

(venv)$ terraform init

TerraformでEC2インスタンスを構築してみる

定義ファイルの作成

Terraformで使用する定義ファイルを作成していきます。内容は、下記の通り。

[variable.tf]

provider "aws" {
  region = "us-east-1"
}

[practice-ec2.tf]

resource "aws_instance" "proctice-ec2" {
  count = 1

  instance_type = "t2.micro"

  # Ubuntu Server 18.04 LTS
  ami = "ami-0ac019f4fcb7cb7e6"

  tags {
    Name = "${format("practice-%02d", count.index + 1)}"
  }
}

コードのチェック

作成したコードをterraform planコマンドを使用してチェックすることができます。構文に問題等があればここでエラーがでます。

(venv)# terraform plan
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.proctice-ec2
      id:                           <computed>
      ami:                          "ami-0ac019f4fcb7cb7e6"
      〜


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.

インスタンスを作成

チェックも正常に完了したので、作成したコードで実際にEC2インスタンスを作成していきます。

(venv)$ terraform apply
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.proctice-ec2
      id:                           <computed>
      ami:                          "ami-0ac019f4fcb7cb7e6"
      〜

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

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

aws_instance.proctice-ec2: Creating...
  ami:                          "" => "ami-0ac019f4fcb7cb7e6"
  arn:                          "" => "<computed>"
  〜

aws_instance.proctice-ec2: Still creating... (10s elapsed)
aws_instance.proctice-ec2: Still creating... (20s elapsed)
aws_instance.proctice-ec2: Still creating... (30s elapsed)
aws_instance.proctice-ec2: Still creating... (40s elapsed)
aws_instance.proctice-ec2: Creation complete after 49s (ID: i-06e8e8fd522099aaf)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
(venv)$ 

インスタンスを削除

(venv)$ terraform destory
aws_instance.proctice-ec2: Refreshing state... (ID: i-06e8e8fd522099aaf)

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

Terraform will perform the following actions:

  - aws_instance.proctice-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: yes

aws_instance.proctice-ec2: Destroying... (ID: i-06e8e8fd522099aaf)
aws_instance.proctice-ec2: Still destroying... (ID: i-06e8e8fd522099aaf, 10s elapsed)
aws_instance.proctice-ec2: Still destroying... (ID: i-06e8e8fd522099aaf, 20s elapsed)
aws_instance.proctice-ec2: Still destroying... (ID: i-06e8e8fd522099aaf, 30s elapsed)
aws_instance.proctice-ec2: Still destroying... (ID: i-06e8e8fd522099aaf, 40s elapsed)
aws_instance.proctice-ec2: Still destroying... (ID: i-06e8e8fd522099aaf, 50s elapsed)
aws_instance.proctice-ec2: Destruction complete after 1m0s

Destroy complete! Resources: 1 destroyed.
(venv)$ 

以上で、Terraformの環境構築とEC2インスタンスのセットアップが完了です。
AWSの無料期間を利用すれば、個人でも練習することができるため是非お試し下さい。

arrow_back

Previous

【GraphQL】必要最小限で使い方を覚える

Next

IAMを使いこなすためのはじめの一歩
arrow_forward