当前位置: 首页 > news >正文

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

目标

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

eb部署图

eb部署Python Web应用

前提

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

gunicorn --bind 127.0.0.1:8000 --workers=1 --threads=15 application:application

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

application = Flask(__name__)

安全组

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

dev-ec2角色

dev-ec2角色概要
GetSecretValue自定义读取secret策略,内容如下:

{"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角色概要如下:
eb服务角色权限策略

AWS Elastic Beanstalk

打开AWS Elastic Beanstalk主页,开始创建Flask Web应用程序,如下图:
开始EB应用创建
设置应用名称,以及使用Python环境如下图:
eb基本环境配置
设置ec2运行角色,如下图:
设置ec2角色
接下来进行网络设置,如下图:
vpc设置
设置LB,如下图:
负载均衡器设置
配置监控系统和环境变量,如下图:
配置环境变量
这里主要设置两个环境变量,其中FLASK_PROFILE是自定义的环境变量:dev,TZ是时区环境变量,这里为东八区:Asia/Shanghai。最后,审计一次,点击创建即可,如下图:
创建应用程序
等待一段时间,EB就自动准备好后,就可以开始配Code Pipeline的CI/CD工作流了。
EB准备OK

CodePipeline

打开CodePipeline主页,开始创建流水线,如下图:
CodePipeline开始创建CI/CD工作流
设置工作流名称,如下图:
设置工作流名称
记住这里的角色名称为AWSCodePipelineServiceRole-cn-north-1-dev-flask,后续,还需要手工修改该角色权限策略。设置代码源阶段,如下图:
设置代码库
设置完代码库之后,下面跳过构建阶段,Python应用可以直接发源代码部署的(感觉有点猛)。如下图:
跳过构建阶段
下面开始部署阶段设置,如下图:
部署设置
最后审计没问题后,直接点击创建管道即可。如下图:
创建管道
第一次创建管道,在部署阶段,会出现如下错误:
部署错误
这里需要给之前的AWSCodePipelineServiceRole-cn-north-1-dev-flask角色,添加一个自定义策略dev-flask-codepipeline,内容如下:

{"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工作流,就没有问题了。如下图效果:
CI/CD工作流最终效果
也可以登录EC2里面直接看实例效果,登录EC2命令如下:

aws ssm start-session --target i-xxxxx

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

sudo tail -f /var/log/web.stdout.log

效果如下:
ec2 web日志文件

参考

  • Platform specific options
  • Python + Flask Deploy to Amazon Web Services Elastic Beanstalk (CI/CD with Git)
http://www.xdnf.cn/news/882973.html

相关文章:

  • React Hooks 基础指南
  • Excel自动分列开票工具推荐
  • Excel-vlookup -多条件匹配,返回指定列处的值
  • 初探Service服务发现机制
  • 缓解停车难:4G地磁如何重构车位分配?
  • 前端开发面试题总结-CSS篇
  • 第11期_网站搭建_极简云 单码网络验证修复版本 虚拟主机搭建笔记
  • Linux下如何使用shell脚本导出elasticsearch中某一个index的数据为本地csv文件
  • SQL Server 2025 预览版新功能
  • 深入解析与解决方案:处理Elasticsearch中all found copies are either stale or corrupt未分配分片问题
  • minio入门学习
  • 探索未知惊喜,盲盒抽卡机小程序系统开发新启航
  • 【图像处理入门】5. 形态学处理:腐蚀、膨胀与图像的形状雕琢
  • 作为过来人,浅谈一下高考、考研、读博
  • Neovim - 常用插件,提升体验(三)
  • 2024年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 八:操作系统设备管理之缓冲、缓存与假脱机
  • PHP文件读取漏洞全面剖析:触发点与利用技术
  • SpringBoot项目移动之后无法运行
  • PPT转图片拼贴工具 v1.0
  • k8S 命令
  • Java原型模式深度解析:高效对象复制的艺术与实践
  • windows10 php报错
  • Vue 中组件命名与引用
  • DJango项目
  • uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
  • 苹果“Findmy”功能正式在韩国启用,结束多年缺席局面
  • 【学习笔记】MIME
  • 【Git系列】如何同步原始仓库的更新到你的fork仓库?
  • 【数据结构】5. 双向链表