基础设施即代码(IaC)极大地改变了开发人员和运营团队配置和管理基础设施的方法,实现了自动化、一致性和可扩展性。最近,我完成了一个重要的项目,将工作负载从本地迁移到AWS云。在这个过程中,我学到了很多,并且掌握了一些迫不及待想与大家分享的技能。
为了记录并反思这些经历,我打算开始一个新系列,重点介绍从这些项目中学到的关键洞察和技能。
项目 #01:在 AWS 上使用 Terraform 部署 NGINX 服务器
这是一个简单的项目,用来展示如何使用Terraform在AWS上轻松部署一个NGINX服务器。它展示了自动化和可重复的流程如何简化基础设施部署的过程,同时确保一致性和可靠性的同时。
点击可查看
项目步骤如下:
这里是如何建立基础设施的分解说明:
1.: 搭建网络架构
- 创建了一个CIDR块为
10.0.0.0/16
的VPC。 - VPC中的公共子网允许实例访问互联网。
- 将一个互联网网关附加到VPC以实现外部通信。
- 创建了一个路由表,将流量通过互联网网关路由。
2. 设置安全组
-
定义了一个安全组来允许:
-
入站的80端口流量(HTTP)。
-
入站的443端口流量(HTTPS)。
- 出站流量未受限制,以便与外部资源通信。
3. 启动并部署 EC2 实例
- 启动了一个 t2.micro 实例,该实例使用了公开可用的 Ubuntu AMI。
- 该实例配置了公网 IP 地址以便外部访问。
- 一个 用户数据脚本 自动化了 NGINX Web 服务器的安装和设置过程:
#!/bin/bash
sudo apt-get update -y # 更新软件包列表
sudo apt-get install -y nginx # 安装 Nginx
sudo systemctl start nginx # 启动 Nginx
sudo systemctl enable nginx # 设置 Nginx 开机自启动
全屏模式。退出全屏。
4.: 验证部署情况
- Terraform 输出包括了 EC2 实例的公共 IP 地址。
- 可以通过浏览器导航到公共 IP 地址来访问默认的 NGINX 页面。
5. 清理计算资源
- Terraform 的
destroy
命令在不再需要时确保所有资源都被安全且系统化地删除了。
……
重要项目文件
providers.tf
文件:配置了 AWS 提供商并指定了 Terraform 版本:
terraform {
required_version = ">= 1.7.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
# 需要的terraform版本为1.7.5或更高版本
# 需要的提供者包括hashicorp提供的aws服务,版本号为5.0或接近的版本
# 配置aws提供者,指定区域为us-east-1
全屏模式 退出全屏
network.tf文件
:定义了VPC、子网、Internet网关、路由表以及它们之间的关联:
locals {
common_tags = {
project = "project01"
}
}
resource "aws_vpc" "project01-vpc" {
cidr_block = "10.0.0.0/16"
tags = merge(local.common_tags, {
Name = "project01-vpc"
})
}
resource "aws_subnet" "public-subnet" {
vpc_id = aws_vpc.project01-vpc.id
cidr_block = "10.0.0.0/24"
tags = merge(local.common_tags, {
Name = "public-subnet"
})
}
resource "aws_internet_gateway" "project01-igw" {
vpc_id = aws_vpc.project01-vpc.id
tags = merge(local.common_tags, {
Name = "project01-igw"
})
}
resource "aws_route_table" "project01-rtb" {
vpc_id = aws_vpc.project01-vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.project01-igw.id
}
tags = merge(local.common_tags, {
Name = "project01-rtb"
})
}
resource "aws_route_table_association" "public" {
subnet_id = aws_subnet.public-subnet.id
route_table_id = aws_route_table.project01-rtb.id
}
全屏模式, 退出全屏
compute.tf
:创建了EC2实例和安全组,
资源 "aws_security_group" "nginx-server-sg" {
描述 = "允许HTTP(端口80)和HTTPS(端口443)的安全组"
名称 = "nginx-server-sg"
vpc_id = aws_vpc.project01-vpc.id
# 允许端口80上的HTTP入站流量
ingress {
from_port = 80
to_port = 80
协议 = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# 允许端口443上的HTTP入站流量
ingress {
from_port = 443
to_port = 443
协议 = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# 允许所有出站流量
egress {
from_port = 0
to_port = 0
协议 = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
标签 = merge(local.common_tags, {
名称 = "nginx-server-sg"
})
}
资源 "aws_instance" "nginx-server" {
ami = "ami-0866a3c8686eaeeba"
associate_public_ip_address = true
instance_type = "t2.micro"
subnet_id = aws_subnet.public-subnet.id
vpc_security_group_ids = [aws_security_group.nginx-server-sg.id]
root_block_device {
delete_on_termination = true
volume_size = 10
volume_type = "gp3"
}
用户数据 = <<-EOF
#!/bin/bash
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
EOF
标签 = merge(local.common_tags, {
名称 = "project01-nginx-server"
})
生命周期 {
创建前销毁 = true
}
}
切换到全屏模式,并退出全屏
结论
这个项目提供了一个一窥如 Terraform 这样的基础设施即代码(IaC)工具的能力。虽然它并不完美,也不全面,但它作为一个起点,为探索 IaC 如何简化和自动化基础设施的管理提供了一个基础。希望这个项目能激发你的灵感,鼓励你更深入地了解 IaC 的实践。
你的反馈非常重要,请随时都可以分享你的想法,真的很想听听你的想法!
试试看
- 使用以下命令: 克隆代码库:
克隆代码库:
运行以下命令克隆仓库并进入项目目录:
git clone https://github.com/bokal2/terraform-projects.git
cd project01
这些命令是用来克隆一个GitHub仓库并进入特定的项目目录的。
全屏 退出全屏
- 按照 README 中的步骤,您可以搭建自己的 NGINX 服务器。
建开心!
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦