基础设施即代码(IaC)极大地改变了开发人员和运营团队配置和管理基础设施的方法,实现了自动化、一致性和可扩展性。最近,我完成了一个重要的项目,将工作负载从本地迁移到AWS云。在这个过程中,我学到了很多,并且掌握了一些迫不及待想与大家分享的技能。
为了记录并反思这些经历,我打算开始一个新系列,重点介绍从这些项目中学到的关键洞察和技能。
项目 #01:在 AWS 上使用 Terraform 部署 NGINX 服务器
这是一个简单的项目,用来展示如何使用Terraform在AWS上轻松部署一个NGINX服务器。它展示了自动化和可重复的流程如何简化基础设施部署的过程,同时确保一致性和可靠性的同时。
点击可查看
这里是如何建立基础设施的分解说明:
10.0.0.0/16
的VPC。定义了一个安全组来允许:
入站的80端口流量(HTTP)。
入站的443端口流量(HTTPS)。
#!/bin/bash sudo apt-get update -y # 更新软件包列表 sudo apt-get install -y nginx # 安装 Nginx sudo systemctl start nginx # 启动 Nginx sudo systemctl enable nginx # 设置 Nginx 开机自启动
全屏模式。退出全屏。
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仓库并进入特定的项目目录的。
全屏 退出全屏
建开心!