#0.はじめに
Terraformを触ってEC2インスタンスを構築したので、その備忘録としてき書きました。ドがつくほど初心者なので、間違えていることを言っていたらご指摘ください。
また今回はセットアップ中心なのでGUIの操作も多いですが、今後はどんどんTerraformの本来の力を発揮させていきたいと思います。
#1.Terraformとは
TerraformはHashiCorp社が開発したOSSでインフラの構築を自動化するCIツールです。VirtualBoxにVMを構築する際にその自動化を行うVagrantもHashiCorp社が手がけている。
1-1.何をするのか
インフラの構築や変更、バージョニングを行う際に、処理をコード化して実行するためのツールで、下記のようなメリットがある。
- コンソール画面からいちいち必要事項をポチポチしなくて済む
- 同じ構成のリソースを複製する場合に即時行える
- 履歴が残る(コンソール画面からだと残すのが難しい)
1-2.対象インフラ
まだ試していないけど、次のようなインフラの構築を管理できるらしい(参考)。
- 仮想マシン
- ストレージ
- ネットワーク
- ロードバランサー
- DNS
- データベース
- SaaS
#2.とりあえず触ってEC2を構築してみる
早く触ってみたいという思いもあり、EC2インスタンス、作成してみました。
###2-1.準備
MacOSでHomebrewが入っていたので、下記コマンドでインストールできました。
brew cask install terraform
###2-2.AWSコンソール側での準備
ざっと下記の手順でAWSコンソール画面側で準備しました。
1.IAM(AWS Identity and Access Management)でユーザー作成
2.作成したユーザーにEC2インスタンスを作成できる権限を付与
3.AWSのCLIをインストールし、アクセスキー等必要な認証情報を保管
#####2-2-1.IAM(AWS Identity and Access Management)でユーザー作成
- まずIAM管理画面にアクセスします。
#####2-2-2.作成したユーザーにEC2インスタンスを作成できる権限を付与
- グループを作成します。
- 作成したグループに権限を付与します。今回はAmazonEC2FullAccessを付与しました。
- あとは作成したユーザーを先ほど作成したグループに帰属させて、ユーザー作成します。作成してから得られたアクセスキーとシークレットアクセスキーはcsv ダウンロードするなどして控えます。
#####2-2-3.AWSのCLIをインストールし、アクセスキー等必要な認証情報を保管
- AWSのCLIインストールはこちらのサイトを参考にしました。下記のコマンドが実行できればOKです。
$ aws --version
aws-cli/1.16.96 Python/2.7.10 Darwin/17.4.0 botocore/1.12.86
- aws configure でアクセスキーなど先ほど控えたものを記入します。regionはどこでも大丈夫です。東京だったらap-northeast-1。私の場合output formatはjsonにしました。
$ aws configure
AWS Access Key ID:
長くなりましたがこれで準備完了です。
###2-3.EC2インスタンス構築
適当なフォルダを作り、ec2.tfファイルとvariables.tfを編集します。
resource "aws_instance" "fukkui" {
count = 2
ami = "ami-0d7ed3ddb85b521a6" # Amazon Linux 2 AMI (HVM), SSD Volume Type
instance_type = "t2.micro"
tags {
Name = "${format("fukkui-%02d", count.index + 1)}"
}
}
amiのidや、instance_typeはAWSコンソールからEC2のインスタンスを作成する画面で確認できます。コード作成はこちらの記事を参考にしました。
provider "aws" {
region = "ap-northeast-1"
}
書くまでもないですが構成はこんな感じです。
$ tree
.
├── ec2.tf
└── variables.tf
続いてterraform initを実行します。
$ terraform init
・
・
Terraform has been successfully initialized!
・
実行前にterraform planでチェックできます。
$ terraform plan
・
・
Plan: 2 to add, 0 to change, 0 to destroy.
・
・
問題なければ実際にAMIを作成します。
$ terraform apply
・
・
aws_instance.fukkui[0]: Creation complete after 34s (ID: i-0ed880dc87ef1df93)
aws_instance.fukkui[1]: Creation complete after 34s (ID: i-0bbde800bac609a7d)
terraform showでインスタンスの状態を確認できます。
$ terraform show
aws_instance.fukkui.0:
・
・
aws_instance.fukkui.1:
・
・