AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)

目标

需要使用AWS Elastic Beanstalk 部署一个Python的Flask Web应用,并且使用CodePipeline作为CI/CD工作流。

eb部署图

前提

假设你已经有一个能够正常运行的Python的Flask Web应用项目代码,而且需要对已有Flask工程做一些调整。由于AWS Elastic Beanstalk是使用gunicorn服务器运行Python Web项目的。类似如下命令:

bash 复制代码
gunicorn --bind 127.0.0.1:8000 --workers=1 --threads=15 application:application

也就说eb通过gunicorn找application模块(application.py)里面的application来进行运行的。所以运行的Flask代码主类,需要是application.py这个文件名,而且,还需要使用application变量名,来初始化Flask,类似如下代码:

python 复制代码
application = Flask(__name__)

安全组

从上面gunicorn运行命令可以知道,gunicorn只许可本机访问,那就只能通过80端口访问了。所以这个安全组放行Nginx的80端口,类似如下图:

这个22端口,是方便跳板机访问调试用的。

dev-ec2角色

GetSecretValue自定义读取secret策略,内容如下:

json 复制代码
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": "arn:aws-cn:secretsmanager:*:234243512234:secret:*"
        }
    ]
}

aws-elasticbeanstalk-service-role角色

aws-elasticbeanstalk-service-role角色概要如下:

AWS Elastic Beanstalk

打开AWS Elastic Beanstalk主页,开始创建Flask Web应用程序,如下图:

设置应用名称,以及使用Python环境如下图:

设置ec2运行角色,如下图:

接下来进行网络设置,如下图:

设置LB,如下图:

配置监控系统和环境变量,如下图:

这里主要设置两个环境变量,其中FLASK_PROFILE是自定义的环境变量:dev,TZ是时区环境变量,这里为东八区:Asia/Shanghai。最后,审计一次,点击创建即可,如下图:

等待一段时间,EB就自动准备好后,就可以开始配Code Pipeline的CI/CD工作流了。

CodePipeline

打开CodePipeline主页,开始创建流水线,如下图:

设置工作流名称,如下图:

记住这里的角色名称为AWSCodePipelineServiceRole-cn-north-1-dev-flask,后续,还需要手工修改该角色权限策略。设置代码源阶段,如下图:

设置完代码库之后,下面跳过构建阶段,Python应用可以直接发源代码部署的(感觉有点猛)。如下图:

下面开始部署阶段设置,如下图:

最后审计没问题后,直接点击创建管道即可。如下图:

第一次创建管道,在部署阶段,会出现如下错误:

这里需要给之前的AWSCodePipelineServiceRole-cn-north-1-dev-flask角色,添加一个自定义策略dev-flask-codepipeline,内容如下:

json 复制代码
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticbeanstalk:*",
                "ec2:*",
                "elasticloadbalancing:*",
                "autoscaling:*",
                "cloudwatch:*",
                "s3:*",
                "sns:*",
                "cloudformation:*",
                "rds:*",
                "sqs:*",
                "ecs:*",
				"logs:*"
            ],
            "Resource": "*"
        }
    ]
}

现在AWSCodePipelineServiceRole-cn-north-1-dev-flask角色权限策略状态,如下图:

设置完成后,再次重试CI/CD工作流,就没有问题了。如下图效果:

也可以登录EC2里面直接看实例效果,登录EC2命令如下:

bash 复制代码
aws ssm start-session --target i-xxxxx

查看日志文件,命令如下:

bash 复制代码
sudo tail -f /var/log/web.stdout.log

效果如下:

参考

相关推荐
前端世界4 分钟前
用Python手写一个能识花的感知器模型——Iris分类实战详解
开发语言·python·分类
少林and叔叔13 分钟前
基于yolov5.7.0的人工智能算法的下载、开发环境搭建(pycharm)与运行测试
人工智能·pytorch·python·yolo·目标检测·pycharm
合作小小程序员小小店35 分钟前
旧版本附近停车场推荐系统demo,基于python+flask+协同推荐(基于用户信息推荐),开发语言python,数据库mysql,
人工智能·python·flask·sklearn·推荐算法
动能小子ohhh44 分钟前
Langchain从零开始到应用落地案例[AI智能助手]【3】---使用Paddle-OCR识别优化可识别图片进行解析回答
人工智能·python·pycharm·langchain·ocr·paddle·1024程序员节
互联网中的一颗神经元1 小时前
小白python入门 - 9. Python 列表2 ——从基础操作到高级应用
java·开发语言·python
Serendipity_Carl2 小时前
爬虫数据清洗可视化案例之全球灾害数据
爬虫·python·pycharm·数据可视化·数据清洗
B站计算机毕业设计之家2 小时前
计算机视觉:YOLO实现目标识别+目标跟踪技术 pyqt界面 OpenCV 计算机视觉 深度学习 计算机(建议收藏)✅
python·opencv·yolo·计算机视觉·目标跟踪·口罩识别
AI小云3 小时前
【Python高级编程】类属性与类方法
人工智能·python
B站计算机毕业设计之家3 小时前
深度学习:YOLOv8人体行为动作识别检测系统 行为识别检测识系统 act-dataset数据集 pyqt5 机器学习✅
人工智能·python·深度学习·qt·yolo·机器学习·计算机视觉
墨利昂3 小时前
Pytorch常用API(ML和DL)
人工智能·pytorch·python