用Terraform在AWS上搭建简单NGINX服务器指南

2024/12/13 21:03:06

本文主要是介绍用Terraform在AWS上搭建简单NGINX服务器指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基础设施即代码(IaC)极大地改变了开发人员和运营团队配置和管理基础设施的方法,实现了自动化、一致性和可扩展性。最近,我完成了一个重要的项目,将工作负载从本地迁移到AWS云。在这个过程中,我学到了很多,并且掌握了一些迫不及待想与大家分享的技能。

为了记录并反思这些经历,我打算开始一个新系列,重点介绍从这些项目中学到的关键洞察和技能。

项目 #01:在 AWS 上使用 Terraform 部署 NGINX 服务器

这是一个简单的项目,用来展示如何使用Terraform在AWS上轻松部署一个NGINX服务器。它展示了自动化和可重复的流程如何简化基础设施部署的过程,同时确保一致性和可靠性的同时。

VPC(虚拟私有云)如图所示
点击可查看

项目步骤如下:

这里是如何建立基础设施的分解说明:

1.: 搭建网络架构

  • 创建了一个CIDR块为10.0.0.0/16VPC
  • 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 命令在不再需要时确保所有资源都被安全且系统化地删除了。

……

重要项目文件

  1. 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

全屏模式 退出全屏

  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
    }

全屏模式, 退出全屏

  1. 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 服务器。

建开心!



这篇关于用Terraform在AWS上搭建简单NGINX服务器指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程