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

如何在AWS CDK部署的EC2实例启动时自动运行Flask应用?

解决Flask应用在EC2实例启动时自动运行的问题

核心问题分析

直接在UserData中执行python3 <filename>.py会导致进程在实例启动脚本执行完成后被终止——因为启动脚本的会话结束后,前台进程会被系统回收。此外还可能存在文件路径错误、Python依赖未安装、权限不足等隐性问题。

具体解决方案

1. 先确保应用环境和代码就绪

假设你的Flask代码文件是app.py,存放在实例的/home/ec2-user/目录下(可根据实际用户/路径调整),先在UserData中添加环境准备步骤:

# 安装Python3和pip
sudo yum install -y python3 python3-pip
# 安装Flask依赖
pip3 install flask
# 如果代码需从S3拉取,添加下载命令(按需启用)
# aws s3 cp s3://your-bucket/app.py /home/ec2-user/
# 给代码文件添加执行权限
chmod +x /home/ec2-user/app.py

2. 用systemd管理Flask进程

通过systemd创建后台服务,确保进程持续运行且开机自启,在UserData中添加以下脚本:

# 创建systemd服务配置文件
sudo tee /etc/systemd/system/flask-app.service > /dev/null <<EOF
[Unit]
Description=Flask Process Payload Service
After=network.target

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user
ExecStart=/usr/bin/python3 /home/ec2-user/app.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 重载systemd配置
sudo systemctl daemon-reload
# 设置服务开机自启
sudo systemctl enable flask-app.service
# 启动服务
sudo systemctl start flask-app.service

3. 调试与验证

如果服务启动失败,用以下命令排查问题:

# 查看服务当前状态
sudo systemctl status flask-app.service
# 实时查看服务日志
journalctl -u flask-app.service -f

4. 完整UserData脚本示例

整合所有步骤的完整脚本(按需调整路径/文件名):

#!/bin/bash
# 更新系统包
sudo yum update -y
# 安装Python环境和依赖
sudo yum install -y python3 python3-pip
pip3 install flask
# 下载应用代码(按需启用)
# aws s3 cp s3://your-bucket/app.py /home/ec2-user/
# 配置文件权限
chmod +x /home/ec2-user/app.py
# 创建并启动systemd服务
sudo tee /etc/systemd/system/flask-app.service > /dev/null <<EOF
[Unit]
Description=Flask Process Payload Service
After=network.target

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user
ExecStart=/usr/bin/python3 /home/ec2-user/app.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable flask-app.service
sudo systemctl start flask-app.service

关键注意事项

  • 路径准确性:务必保证ExecStart和WorkingDirectory中的路径与代码实际存放位置一致
  • 权限控制:使用实例普通用户(如ec2-user)运行服务,避免用root提升安全性
  • 日志排查:通过journalctl查看日志可快速定位问题,比如依赖缺失、端口占用、代码报错等

内容的提问来源于stack exchange,提问作者Mahesh Manjunath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:09:13