aws beanstalk 使用docker平台部署beanstalk应用程序

news2024/11/19 1:36:41

参考资料

  • 使用 Docker 平台分支

之前的文章分享过如何使用eb cli工具创建application和eb环境,本文介绍beanstalk支持的docker容器部署

关于beanstalk环境创建相关的资源和部署逻辑,参考之前的文章《aws beanstalk 使用eb cli配置和启动环境》

$ eb init
Select a platform branch.
1) Docker running on 64bit Amazon Linux 2
2) ECS running on 64bit Amazon Linux 2
$ eb create
# 扩容实例
$ eb scale 1 test-beandocker-env

beanstalk的docker平台支持两个分支

  • 在 64AL2 上运行的 Docker
  • 在 64AL2 上运行的 ECS

可以使用Dockerfile启动docker环境

如果使用的是 docker compose,eb会使用 docker-compose.yml 文件来提取和运行您的映像

否则eb会改用 Dockerrun.aws.json,可以理解为aws的docker-compose

使用eb cli过程中几个好用的命令

# 登录实例
$ eb ssh
Select an instance to ssh into
1) i-09xxxxxxxe1c7
2) i-09xxxxxx08d18

# 下载当前应用zip
$ eb labs download
Downloading application version...
Application version downloaded to: /home/ec2-user/xxxxxx

# 生成cw logs配置到.ebextension文件夹下
$ eb labs setup-cloudwatchlogs

# 在本地运行测试容器,实际就是使用docker-compose
$ eb local run --port 5000
# 注意:使用以上命令无法启动docker-compose.yaml应用
# ERROR: NotFoundError - The EB CLI cannot find Dockerfile or the Dockerrun.aws.json file in the application root directory

关于eb的部署权限和实例配置文件

在使用 Elastic Beanstalk 控制台或 EB CLI 启动环境时,Elastic Beanstalk 创建一个名为 aws-elasticbeanstalk-ec2-role 的默认实例配置文件,并为其分配具有默认权限的托管式策略

所有 Amazon Linux 2 平台版本都会在环境创建期间默认启用增强型运行状况。实例需要正确权限来收集和报告增强型运行状况信息

eb提供了三种托管策略

  • AWSElasticBeanstalkWebTier,上传日志到s3和调试信息到xray
  • AWSElasticBeanstalkWorkerTier :日志上传、调试、指标发布和工作程序实例任务
  • AWSElasticBeanstalkMulticontainerDocker :ecs相关权限,附加在ecs实例上
  • (可选)AmazonSSMManagedInstanceCore:ssm托管

docker环境的beanstalk

docker环境的部署文件支持

  • Dockerrun.aws.json
  • docker-compose.yml
  • dockerfile

支持本地测试

eb local run --port 5000

使用dockerfile部署,将Dockerfileapplication.py文件复制到项目根目录

$ cat Dockerfile
FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip install Flask==1.0.2
EXPOSE 5000
CMD ["python", "application.py"]

$ cat application.py
from flask import Flask

# Print a nice greeting
def say_hello(username = "World"):
    return '<p>Hello %s!</p>\n' % username

# Some bits of text for the page
header_text = '''
    <html>\n<head> <title>EB Flask Test</title> </head>\n<body>'''
instructions = '''
    <p><em>Hint</em>: This is a RESTful web service! Append a username
    to the URL (for example: <code>/Thelonious</code>) to say hello to
    someone specific.</p>\n'''
home_link = '<p><a href="/">Back</a></p>\n'
footer_text = '</body>\n</html>'

# Elastic Beanstalk looks for an 'application' that is callable by default
application = Flask(__name__)

# Add a rule for the index page
application.add_url_rule('/', 'index', (lambda: header_text +
    say_hello() + instructions + footer_text))

# Add a rule when the page is accessed with a name appended to the site
# URL
application.add_url_rule('/<username>', 'hello', (lambda username:
    header_text + say_hello(username) + home_link + footer_text))

# Run the application
if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production application.
    application.debug = True
    application.run(host="0.0.0.0")

$ eb deploy

使用docker-compose.yml文件部署,将docker-compose.yml文件复制到项目根目录,创建新的service使用ecr的远程镜像

注意:需要提前安装docker-compose,ec2实例需要去往ecr拉取镜像的权限

$ cat docker-compose.yml
version: '3.8'
services:
  beanstalk-flask:
    image: "xxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/beanstalk-flask"
    ports:
      - "80:5000"
$ eb deploy

使用Dockerrun.aws.json文件(v1单容器版本)部署

$ cat Dockerrun.aws.json
{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "username/beanstalk-flask",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ]
}

$ eb deploy

此外使用v1单容器的Dockerrun.aws.json,可以不指定image键,但需要提供dockerfile文件(间接指定image),该构建行为最终会在eb实例上进行

查看托管环境的docker容器

$ sudo usermod -a -G docker $USER
$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS      NAMES
65fd847eef7d   59f502b87637   "python application.…"   50 seconds ago   Up 49 seconds   5000/tcp   interesting_robinson

对于私有仓库拉取镜像的配置,需要在Dockerrun.aws.json额外添加以下配置,s3文件为~/.docker/config.json文件内容

$ cat Dockerrun.aws.json
{
  "AWSEBDockerrunVersion": "1",
  "Authentication": {
    "Bucket": "DOC-EXAMPLE-BUCKET",
    "Key": "mydockercfg"
  },
 ...
}

ecs托管环境的beanstalk

2022 年 7 月 18 日 开始Elastic Beanstalk 将基于 Amazon Linux AMI (AL1) 的所有平台分支的状态设置为已停用

ecs托管环境的部署文件支持

  • Dockerrun.aws.json 文件是特定于eb的部署文件,分为v1和v2版本,v2版本的部署文件增加了多多容器的支持(只支持ecs托管docker环境)。
  • docker-compose.yml
  • dockerfile(不支持),因此使用的image需要预构建并推送

eb托管的ecs环境执行创建集群,任务定义和创建任务(无服务)等操作。为了充分利用odcker环境,eb托管的ec2实例可以并行运行多个eb应用。创建的ecs资源有:集群群,任务定义,任务,容器代理 ,数据卷

ecs环境中的每个实例运行相同的容器组,在Dockerrun.aws.json文件中定义,示例文件如此链接,定义了多容器任务(和ecs任务定义类似)。与 Dockerrun.aws.json 一起存档的源代码将部署到 Amazon EC2 容器实例中,并且可在 /var/app/current/ 目录中进行访问

如果需要拉取私有仓库image需要配置authentication参数,但是镜像存储在ecr中除外(需要为实例配置权限AmazonEC2ContainerRegistryReadOnly

无法在本地进行测试,报错如下

$ eb local run --port 5000
ERROR: NotSupportedError - You can use "eb local" only with preconfigured, generic and multicontainer Docker platforms.

登录实例产看容器

在这里插入图片描述

在ecs控制台上看到单独启动一个任务,没有创建服务
在这里插入图片描述

除了部署和配置方式不同,其他和ecs任务一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指南帮手——协议栈

通过 DNS 获取到 IP 后&#xff0c;就可以把 HTTP 的传输工作交给操作系统中的协议栈。协议栈的内部分为几个部分&#xff0c;分别承担不同的工作。上下关系是有一定的规则的&#xff0c;上面的部分会向下面的部分委托工作&#xff0c;下面的部分收到委托的工作并执行。应用程序…

PyTorch源码编译(windows)

1.打开pytorch源码仓库: https://github.com/pytorch/pytorch#from-source2.PyTorch用途与安装方法:3.Python与编译器版本要求 (Python3.7或者更高,编译器要求支持C17)4.如果要支持CUDA编程,要安装NVIDIA CUDA 11或者更高版本, 安装NVIDIA cuDNN v7或者更高版本注:CUDA不支持Ma…

使用 Flask 快速部署 PyTorch 模型

对于数据科学项目来说&#xff0c;我们一直都很关注模型的训练和表现&#xff0c;但是在实际工作中如何启动和运行我们的模型是模型上线的最后一步也是最重要的工作。 今天我将通过一个简单的案例&#xff1a;部署一个PyTorch图像分类模型&#xff0c;介绍这个最重要的步骤。 …

用一串Python代码爬取网站数据

如觉得博主文章写的不错或对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注、点赞、收藏、评论。 目录一.编码问题二、文件编码三、基本方法四、登录五、断线重连六、正则匹配Excel操作转换网页特殊字符一.编码问题 因为涉及到中文&#xff0c;所以必然地涉及…

MV*系列架构模型

下文仅代表个人理解&#xff0c;可能会有偏差或错误&#xff0c;欢迎评论或私信讨论。 MVC 从软件架构模型角度 MVC 是比较“古老”的架构模型&#xff0c;后面的 MV* 都是基于它进行拓展。MVC 出现的意义是为了提高程序的可维护性与拓展性。在 View 层与 Model 层中添加了 C…

如何分享让人眼前一亮的代码

作为一名软件工程师&#xff0c;会经常需要在工作和写作中粘贴代码片段以作示例&#xff0c;如果不关注代码的格式随手一粘&#xff0c;别人看到的画风就可能是这样&#xff1a;那么&#xff0c;该如何才能快速且优雅地分享代码片段呢&#xff1f;Raycast ray.so 或许是一个值…

2020-12-31 学习74HC595真值表与时序图

考资料教你74hc595时序图怎么看知识详解 - 电子常识 - 电子发烧友网 74HC595是串行输入并行/串行输出的移位锁存器。SHCP是移位脉冲&#xff0c;前沿&#xff08;上升沿&#xff09;有效&#xff0c;STCP是锁存脉冲&#xff0c;前沿有效&#xff0c;DS是输入信号&#xff0c;M…

动态规划算法刷题笔记【线性dp】

递推 斐波那契(Fibonacii)数列的递推公式&#xff1a;F(n) F(n -1) F(n - 2) 错排问题&#xff1a;F(n) (n-1) * [F(n-1)F(n-2)] 解释 例题 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 10 级的台阶总共有多少种跳法 思路 要想跳到第…

代码随想录算法训练营第4天 24.两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交

代码随想录算法训练营第4天 24.两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交 两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部…

C++中的多态

目录 多态的定义及实现 多态的构成条件 虚函数 虚函数重写 虚函数重写的两个例外&#xff1a; override 和 final(C11) 重载、覆盖(重写)、隐藏(重定义)的对比 抽象类 多态的原理 虚函数表 多态的概念&#xff1a;字面的意思就是多种形态&#xff0c;完成某个行为&…

利用MDK的FLM文件生成通用flash驱动

文章目录前言一、FLM文件是什么&#xff1f;二、FLM文件结构1.FlashPrg.c2.FlashPrg.c三、解析FLM文件1.解析flm文件四、设计flash驱动抽象层五、快速使用前言 在进行Flash操作时&#xff0c;一般我们需要设计一套Flash抽象层&#xff0c;至少要包括flash的init&#xff0c;re…

C++STL之stack容器和优先级队列底层详解

一&#xff1a;stack容器1.1&#xff1a;容器适配器概念&#xff1a;容器适配器是用特定类封装作为其底层的容器&#xff0c;并提供一组特定的成员函数来访问元素&#xff0c;stack的底层容器可以是任意的类模板&#xff0c;或者一些其他的容器类&#xff0c;这些容器类应该支持…

JavaScript详解

目录 1.JavaScript基础知识 1.1 JavaScript概述 1.1.1 JavaScript历史 1.1.2 JavaScript是什么 1.1.3 JavaScript的作用 1.1.4 HTML/CSS/JS的关系 1.1.5 基本特点 1.1.6 浏览器执行JS简介 1.1.7 JavaScript脚本语言的组成 1.2 JavaScript使用方法 1.3 JavaScript输…

论文创新及观点2

题目 Zero-Shot Visual Recognition using Semantics-Preserving Adversarial Embedding Networks 摘要 基于visual-semantic embedding&#xff0c;的ZSL方法存在信息损失(semantic loss),的问题&#xff0c;在训练过程中&#xff0c;如果某些语义信息对分类的区分性不大&a…

「项目管理」如何做好研发FO角色?

角色定位 FO &#xff08;Feature Owner&#xff09;&#xff0c;项目某一阶段/版本迭代生命周期的总负责人。基于从需求发起、研发接入、上线等项目过程阶段&#xff0c;可以根据职责本位不同来推荐具体项目成员、干系人担任FO角色&#xff0c;前端、 客户端 、服务端、测试、…

Spring事务和事务传播机制

⭐️前言⭐️ 事务是作为一名后端程序员&#xff0c;必须去要了解清楚的东西&#xff0c;因为它决定了程序的正常运行以及与程序运行效率之间的权衡&#xff0c;这篇文章我们就来了解一下Spring事务和事务传播机制。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &am…

【阶段三】Python机器学习08篇:机器学习项目实战:决策树分类模型

本篇的思维导图: 决策树模型简介 决策树模型的基本原理是通过对一系列问题进行if/else的推导,最终实现相关决策。 下图所示为一个典型的决策树模型——员工离职预测模型的简单演示。该决策树首先判断员工满意度是否小于5,若答案为“是”,则认为该员工会离…

07、ThingsBoard本地打镜像上传到harbor

1、Harbor是什么? Harbor是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。 2、安装Harbor 2.1、下载地址 Tags g…

【看表情包学Linux】探讨项目构建问题 | Makefile | 依赖关系与依赖方法 | 伪目标 PHONY

&#x1f923; 爆笑教程 &#x1f449; 《看表情包学Linux》&#x1f448; 猛戳订阅 &#x1f525; &#x1f4ad; 写在前面&#xff1a;本章我们要学习的是 makefile。会不会写 makefile&#xff0c;从一个侧面说明一个人是否具备完成大型工程的能力。一个工程中的源文件不计…

学计算机专业的你后悔了吗?

先说结论&#xff1a;不后悔。当年高考的时候&#xff0c;老师和我们说&#xff0c;将来环境、船舶、园林专业肯定特别吃香&#xff0c;填志愿的时候记得都选上。现在来看&#xff0c;这几个专业妥妥的天坑专业&#xff0c;前段时候还认识一个船舶专业的博士报培训班转计算机&a…