使用 Terraform 和 AWS 创建 EC2 实例并进行 ping 通信的初学者须知
总结
-
- Terraformを使用してEC2インスタンスを1つ作成することが今回のゴール
-
- ping疎通を可能にするため、ICMP通信を許可するセキュリティグループを付与する
- 作業環境はMac
安装Terraform
$ brew install terraform
操作步骤 xù)
-
- 在AWS控制台上创建IAM用户并获取访问密钥和秘密密钥
-
- 为IAM用户分配”AmazonEC2FullAccess”策略。如果不分配此策略,将无法通过Terraform创建EC2实例
-
- 创建用于Terraform的文件(定义EC2实例的创建和分配安全组)
- 执行Terraform
创建用于Terraform的文件
-
- 手順1,2は省略する。
-
- 設定ファイル”sample.tf”にEC2インスタンス作成とセキュリティグループの作成および付与を定義
- 変数用ファイル”terraform.tfvars”にアクセスキーとシークレットキーを定義
示例.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 = terraform 配置文件
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 类型(通常是端口号)。
https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html
ICMP类型列表: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.
请看这个问题的一个例子。
-
- Terraform Guides – Getting Started > Build Infrastructure
-
- Terraform Guides – Getting Started > Input Variables
- TerraformとAWSに同時入門する