使用 Terraform 和 AWS 创建 EC2 实例并进行 ping 通信的初学者须知

总结

    • Terraformを使用してEC2インスタンスを1つ作成することが今回のゴール

 

    • ping疎通を可能にするため、ICMP通信を許可するセキュリティグループを付与する

 

    作業環境はMac

安装Terraform

$ brew install terraform

操作步骤 ​​xù)

    1. 在AWS控制台上创建IAM用户并获取访问密钥和秘密密钥

 

    1. 为IAM用户分配”AmazonEC2FullAccess”策略。如果不分配此策略,将无法通过Terraform创建EC2实例

 

    1. 创建用于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に同時入門する
广告
将在 10 秒后关闭
bannerAds