我对Terraform很陌生。我如何使用Terraform来配置EC2实例来托管一个烧瓶web应用程序?
我也想知道怎么做?(也请链接到文件。)
谢谢。
发布于 2022-08-15 12:35:25
我认为你最好把你的烧瓶装起来。所以:
我不会告诉你这个,但基本上你应该创建一个Dockerfile,并在此基础上创建一个图像。然后把它推到任何你喜欢的回购(例如码头枢纽)。
下面是一个示例,它将创建和配置一个EC2服务器,在其上安装Docker,然后从您的映像中运行一个容器(在本例中为Nginx)
provider "aws" {
region = "eu-central-1"
}
variable vpc_cidr_block {}
variable subnet_1_cidr_block {}
variable avail_zone {}
variable env_prefix {}
variable instance_type {}
variable ssh_key {}
variable my_ip {}
data "aws_ami" "amazon-linux-image" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-gp2"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
output "ami_id" {
value = data.aws_ami.amazon-linux-image.id
}
resource "aws_vpc" "myapp-vpc" {
cidr_block = var.vpc_cidr_block
tags = {
Name = "${var.env_prefix}-vpc"
}
}
resource "aws_subnet" "myapp-subnet-1" {
vpc_id = aws_vpc.myapp-vpc.id
cidr_block = var.subnet_1_cidr_block
availability_zone = var.avail_zone
tags = {
Name = "${var.env_prefix}-subnet-1"
}
}
resource "aws_security_group" "myapp-sg" {
name = "myapp-sg"
vpc_id = aws_vpc.myapp-vpc.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = [var.my_ip]
}
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
prefix_list_ids = []
}
tags = {
Name = "${var.env_prefix}-sg"
}
}
resource "aws_internet_gateway" "myapp-igw" {
vpc_id = aws_vpc.myapp-vpc.id
tags = {
Name = "${var.env_prefix}-internet-gateway"
}
}
resource "aws_route_table" "myapp-route-table" {
vpc_id = aws_vpc.myapp-vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.myapp-igw.id
}
# default route, mapping VPC CIDR block to "local", created implicitly and cannot be specified.
tags = {
Name = "${var.env_prefix}-route-table"
}
}
# Associate subnet with Route Table
resource "aws_route_table_association" "a-rtb-subnet" {
subnet_id = aws_subnet.myapp-subnet-1.id
route_table_id = aws_route_table.myapp-route-table.id
}
resource "aws_key_pair" "ssh-key" {
key_name = "myapp-key"
public_key = file(var.ssh_key)
}
output "server-ip" {
value = aws_instance.myapp-server.public_ip
}
resource "aws_instance" "myapp-server" {
ami = data.aws_ami.amazon-linux-image.id
instance_type = var.instance_type
key_name = "myapp-key"
associate_public_ip_address = true
subnet_id = aws_subnet.myapp-subnet-1.id
vpc_security_group_ids = [aws_security_group.myapp-sg.id]
availability_zone = var.avail_zone
tags = {
Name = "${var.env_prefix}-server"
}
user_data = <资料来源:
https://devops.stackexchange.com/questions/16440
复制相似问题