You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存AWS EC2实例创建步骤?免费层用户自动化重建咨询

一键创建数据工程EC2实例方案(AWS免费套餐适配)

针对你频繁销毁重建实例的需求,最实用的方案是用AWS CloudFormation(或Terraform)+ 用户数据脚本,将基础设施定义和工具自动化安装打包,实现一键创建/销毁。以下是具体实现步骤:

核心思路

用基础设施即代码(IaC)工具定义EC2实例的配置(实例类型、安全组、镜像等),同时通过用户数据(User Data)脚本在实例启动时自动安装MySQL、PostgreSQL、Anaconda、VNC等工具,全程无需手动操作。


方案一:AWS CloudFormation(AWS原生免费工具)

1. 编写CloudFormation模板(YAML)

将以下内容保存为data-eng-ec2.yml,注意替换模板中的区域AMI、自定义密码等参数:

AWSTemplateFormatVersion: '2010-09-09'
Description: Data Engineering EC2 Instance (Free Tier Eligible - t2.micro)

Resources:
  DataEngEC2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      # 替换为你所在区域的Ubuntu 22.04 LTS AMI,可在EC2控制台AMI搜索中获取
      ImageId: ami-0c7217cdde317cfec
      SecurityGroups: [!Ref DataEngSecurityGroup]
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          # 系统更新
          apt update -y && apt upgrade -y

          # 安装MySQL并设置密码
          debconf-set-selections <<< 'mysql-server mysql-server/root_password password your-mysql-pass'
          debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password your-mysql-pass'
          apt install -y mysql-server
          systemctl enable --now mysql

          # 安装PostgreSQL并设置密码
          apt install -y postgresql postgresql-contrib
          systemctl enable --now postgresql
          sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'your-postgres-pass';"

          # 安装Anaconda
          wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh -O /tmp/anaconda.sh
          bash /tmp/anaconda.sh -b -p /opt/anaconda3
          echo 'export PATH="/opt/anaconda3/bin:$PATH"' >> /home/ubuntu/.bashrc
          source /home/ubuntu/.bashrc

          # 安装VNC Server和XFCE桌面
          apt install -y xfce4 xfce4-goodies tightvncserver
          # 初始化VNC配置
          su - ubuntu -c "tightvncserver :1"
          su - ubuntu -c "tightvncserver -kill :1"
          # 替换默认启动脚本为XFCE
          su - ubuntu -c "echo '#!/bin/bash
          xrdb $HOME/.Xresources
          startxfce4 &' > ~/.vnc/xstartup"
          su - ubuntu -c "chmod +x ~/.vnc/xstartup"
          # 设置VNC密码
          su - ubuntu -c "echo 'your-vnc-pass' | vncpasswd -f > ~/.vnc/passwd"
          su - ubuntu -c "chmod 600 ~/.vnc/passwd"
          # 设置VNC开机自启
          su - ubuntu -c "echo '@tightvncserver :1' >> ~/.config/autostart/tightvnc.desktop"

          # 清理临时文件
          rm /tmp/anaconda.sh
          apt autoremove -y
          apt clean

  DataEngSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow SSH and VNC access
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          # 生产环境建议替换为你的公网IP,例如192.168.1.1/32
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 5901
          ToPort: 5901
          CidrIp: 0.0.0.0/0

Outputs:
  InstancePublicIP:
    Description: 实例公网IP
    Value: !GetAtt DataEngEC2.PublicIp

2. 一键创建/销毁实例

  • 创建实例:用AWS CLI执行以下命令(替换区域为你的AWS区域):
    aws cloudformation create-stack --stack-name DataEngEC2 --template-body file://data-eng-ec2.yml --region us-east-1
    
  • 销毁实例:
    aws cloudformation delete-stack --stack-name DataEngEC2 --region us-east-1
    

方案二:Terraform(跨云IaC工具)

如果你习惯用Terraform,可使用以下简化配置:

provider "aws" {
  region = "us-east-1"
}

# 定义安全组
resource "aws_security_group" "data_eng_sg" {
  name        = "data-eng-sg"
  description = "Allow SSH and VNC"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 5901
    to_port     = 5901
    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"]
  }
}

# 定义EC2实例
resource "aws_instance" "data_eng_ec2" {
  ami           = "ami-0c7217cdde317cfec" # Ubuntu 22.04 us-east-1
  instance_type = "t2.micro"
  vpc_security_group_ids = [aws_security_group.data_eng_sg.id]

  user_data = base64encode(<<-EOF
              #!/bin/bash
              # 此处粘贴和CloudFormation中相同的安装脚本
              EOF
              )

  tags = {
    Name = "DataEngEC2"
  }
}

# 输出实例公网IP
output "instance_public_ip" {
  value = aws_instance.data_eng_ec2.public_ip
}
  • 创建实例:
    terraform init
    terraform apply
    
  • 销毁实例:
    terraform destroy
    

关键注意事项

  1. 确保使用t2.micro实例类型,符合AWS免费套餐额度(每月750小时免费)
  2. 安全组中的0.0.0.0/0仅用于测试,生产环境务必限制为你的公网IP
  3. 首次启动实例后,需等待5-10分钟让所有工具安装完成,再尝试连接VNC
  4. Anaconda安装链接若失效,可替换为Anaconda官网最新的Linux下载链接

内容的提问来源于stack exchange,提问作者Gregory Lyzander Mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:55:15