Terraform 基础设施即代码:AWS EC2 + RDS 自动化部署

一、核心概念

通过声明式配置文件描述基础设施,实现一键部署:

  1. EC2:计算资源,运行业务应用
  2. RDS:托管数据库服务,支持MySQL/PostgreSQL等
  3. 自动化依赖:自动处理网络配置、安全组规则等依赖关系

二、配置文件示例

创建 main.tf 文件,包含以下核心模块:

# 1. 配置AWS提供商
provider "aws" {
  region = "us-east-1"
}

# 2. 创建VPC网络
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

# 3. 安全组配置(允许HTTP/SSH)
resource "aws_security_group" "web_sg" {
  vpc_id = aws_vpc.main.id
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# 4. EC2实例部署
resource "aws_instance" "app_server" {
  ami           = "ami-0c55b159cbfafe1f0" # Ubuntu 20.04
  instance_type = "t3.micro"
  vpc_security_group_ids = [aws_security_group.web_sg.id]
  user_data     = file("init_script.sh") # 初始化脚本
}

# 5. RDS数据库部署
resource "aws_db_instance" "mysql_db" {
  allocated_storage    = 20
  engine               = "mysql"
  instance_class       = "db.t3.micro"
  username             = "admin"
  password             = "securepassword123"
  publicly_accessible  = false
  skip_final_snapshot  = true
  vpc_security_group_ids = [aws_security_group.web_sg.id]
}


三、部署流程
  1. 初始化环境

    terraform init
    

  2. 预览执行计划

    terraform plan
    

  3. 应用配置

    terraform apply  # 输入 yes 确认
    

  4. 验证资源

    • AWS控制台查看新建的EC2和RDS实例
    • 通过SSH连接EC2验证应用状态
  5. 销毁资源(避免持续计费)

    terraform destroy
    


四、关键注意事项
  1. 安全实践
    • 使用IAM角色替代硬编码密钥
    • 通过AWS Secrets Manager管理数据库密码
  2. 高可用配置
    • 为RDS启用多AZ部署
    • 使用Auto Scaling组扩展EC2
  3. 状态管理
    • 配置远程状态存储(如S3)
    terraform {
      backend "s3" {
        bucket = "my-tf-state"
        key    = "prod/terraform.tfstate"
        region = "us-east-1"
      }
    }
    

最佳实践:将代码拆分为模块(network/, compute/, database/),使用变量文件(terraform.tfvars)管理环境差异。

更多推荐