terraform 创建ec2
时间: 2023-11-19 19:09:54 浏览: 38
好的,下面是使用 Terraform 创建 EC2 实例的步骤:
1. 确认你的 AWS 凭证已经配置好,并且你已经安装了 Terraform。
2. 创建一个新的 Terraform 配置文件,命名为 `main.tf`。
3. 在 `main.tf` 文件中,添加以下代码来配置 provider 和 IAM 角色:
```
provider "aws" {
region = "us-west-2"
}
data "aws_iam_policy_document" "ec2_role" {
statement {
effect = "Allow"
actions = [
"ec2:DescribeInstances",
"ec2:DescribeImages",
"ec2:DescribeRegions",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVolumes",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RunInstances",
"ec2:TerminateInstances"
]
resources = ["*"]
}
}
resource "aws_iam_role" "ec2_role" {
name = "ec2_role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
}
]
})
inline_policy {
name = "ec2_policy"
policy = data.aws_iam_policy_document.ec2_role.json
}
}
```
这里我们配置了 AWS provider 的区域为 `us-west-2`,并创建了一个名为 `ec2_role` 的 IAM 角色,其中包含了创建 EC2 实例所需的权限。
4. 在 `main.tf` 文件中,添加以下代码来创建 EC2 实例:
```
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
key_name = "my_key_pair"
vpc_security_group_ids = [aws_security_group.web.id]
user_data = <<-EOF
#!/bin/bash
echo "Hello, World!" > index.html
nohup busybox httpd -f -p 80 &
EOF
tags = {
Name = "web"
}
}
resource "aws_security_group" "web" {
name_prefix = "web"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
```
这里我们创建了一个名为 `web` 的 EC2 实例,使用了 AMI ID 为 `ami-0c55b159cbfafe1f0` 的 Amazon Linux 2 镜像,实例类型为 `t2.micro`,并指定了一个名为 `my_key_pair` 的 SSH 密钥对,以便我们可以通过 SSH 访问该实例。
此外,我们还创建了一个名为 `web` 的安全组,允许从任意 IP 地址访问该实例的 80 端口,以便我们可以通过 Web 浏览器访问该实例。
5. 在命令行中执行以下命令初始化 Terraform 环境:
```
terraform init
```
6. 执行以下命令检查 Terraform 配置文件是否正确:
```
terraform validate
```
7. 执行以下命令预览将要创建的资源:
```
terraform plan
```
8. 执行以下命令创建资源:
```
terraform apply
```
9. 等待 Terraform 完成创建 EC2 实例的工作。
10. 执行以下命令销毁创建的资源:
```
terraform destroy
```
以上就是使用 Terraform 创建 EC2 实例的步骤。