如何保存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
关键注意事项
- 确保使用
t2.micro实例类型,符合AWS免费套餐额度(每月750小时免费) - 安全组中的
0.0.0.0/0仅用于测试,生产环境务必限制为你的公网IP - 首次启动实例后,需等待5-10分钟让所有工具安装完成,再尝试连接VNC
- Anaconda安装链接若失效,可替换为Anaconda官网最新的Linux下载链接
内容的提问来源于stack exchange,提问作者Gregory Lyzander Mohan
相关产品推荐
相关产品推荐

