概要
- Terraformを使用してEC2インスタンスを1つ作成することが今回のゴール
- ping疎通を可能にするため、ICMP通信を許可するセキュリティグループを付与する
- 作業環境はMac
Terraformインストール
$ brew install terraform
手順
- AWSコンソールにて、IAMユーザーを作成し、アクセスキーとシークレットキーを取得
- IAMユーザに「AmazonEC2FullAccess」ポリシーを付与。これを付与しないと、TerraformからEC2インスタンスを作成できない
- Terraform用のファイルを作成(EC2インスタンス作成とセキュリティグループの作成および付与を定義)
- Terraformの実行
Terraform用のファイルを作成
- 手順1,2は省略する。
- 設定ファイル"sample.tf"にEC2インスタンス作成とセキュリティグループの作成および付与を定義
- 変数用ファイル"terraform.tfvars"にアクセスキーとシークレットキーを定義
sample.tf
variable "access_key" {}
variable "secret_key" {}
variable "region" {
default = "us-west-2"
}
provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
}
resource "aws_security_group" "web-sg" {
name = "web-sg"
ingress {
from_port = 8 // ICMP Type "Echo Request"
to_port = 0 // ICMP Type "Echo Reply"
protocol = "icmp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "web" {
ami = "ami-db710fa3"
instance_type = "t2.micro"
security_groups = ["${aws_security_group.web-sg.name}"]
}
terraform.tfvars
access_key = "XXXX"
secret_key = "XXXX"
sample.tfの"web"インスタンスへのセキュリティグループの付与は、以下のように直接セキュリティグループ名を与えるとエラーになるので注意。
security_groups = "web-sg"
このようなエラーとなる。
* aws_instance.web1: 1 error(s) occurred:
* aws_instance.web1: Error launching instance, possible mismatch of Security Group IDs and Names. See AWS Instance docs here: https://terraform.io/docs/providers/aws/r/instance.html.
AWS Error: Value () for parameter groupId is invalid. The value cannot be empty
セキュリティグループのICMP許可の定義のfrom_portとto_portは、ICMP Typeを表している。(通常はポート番号)
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html
ICMP Type 一覧: http://www.infraexpert.com/info/5.0adsl.htm
Terraformの実行
以下のコマンドを実行すると、設定ファイルに定義したインスタンスとセキュリティグループが作成される。
$ terraform apply
.
.
.
aws_instance.web: Still creating... (10s elapsed)
aws_instance.web: Still creating... (20s elapsed)
aws_instance.web: Still creating... (30s elapsed)
aws_instance.web: Creation complete after 31s (ID: XXXXXX)
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.