在2021年5月,AWS宣布了其服务AWS App Runner
的一般性,被描述为“ 在AWS 中构建和运行容器化Web应用程序的最简单方法”。当时,该服务极为有限(不支持VPC连接性),并且只支持了几个运行时间。
02年后,该服务已经发展并支持许多功能。
在本文中,您将看到什么是批评者,以及如何帮助您在几分钟内部署Fastapi Web应用程序。
为什么要批准?
在AWS上部署Web应用程序时,您有几种方法,具体取决于应用程序的要求,团队功能,预算和各种限制。
但是,无论选择哪种部署方法,都需要进行一些强制性配置,以确保应用程序高度可用。
这通常属于必须设置的operations team (ops)
的责任:
- 负载平衡
- 目标组
- Scaling
- 安全组
- 域
- 证书
- 可观察性(监视,记录,指标)
- 以及更多。
尽管这种复杂性,开发人员只是想部署其应用程序并专注于其开发。该观察结果使AWS提供了一项完全管理的服务,以简化应用程序的部署:批准者。
定义
官方页面状态 - AWS应用程序Runner是一种完全管理的容器应用程序服务,可让您在没有事先基础架构或集装箱经验的情况下构建,部署和运行容器化Web应用程序和API服务 。
此刻,您可能想知道批准者是否是:
- 平台作为服务(PAAS)?
- 容器作为服务(CAAS)?
- 新的无服务器服务?
- 托管服务
- 或一次全部?
让我们尝试了解服务的运作方式。这可能会帮助我们回答这个问题。
操作模式
在引擎盖下,批准者创建一个ECS群集,并使用Fargate轻松运行您的容器,从而节省了时间和精力。
有些人可能认为牺牲粒度是妥协,但简单和速度的好处是不可否认的。 App Runner ,使用内置的continuous integration
并与CloudWatch集成,以进行日志和监视,消除了对其他第三方服务的需求。
使用应用程序跑步者简化您的容器管理,并专注于最重要的业务!
在配置App Runner方面,您可以从“ 手动>和自动”中选择两个选项。
manual mode
是那些更喜欢对配置过程更具控制权的人的理想选择。使用此模式,您可以使用AWS管理控制台或CLI配置应用程序的环境变量,网络和其他设置。
另一方面,对于那些更喜欢更不动的方法的人来说,automatic mode
很有趣。使用此模式,App Runner自动从其源代码加载应用程序配置,使您可以专注于项目的其他方面。
除了配置模式外,App Runner还提供两种操作模式 - 容器模式和构建模式。
建议使用 Container Mode
用于从容器注册表(例如Amazon ECR或Docker Hub)运行预构建的容器。使用此模式,您可以快速部署和扩展应用程序,而不必担心基础架构。
Build Mode
非常适合从源代码构建和部署应用程序。使用此模式,App Runner会自动从源代码,依赖项和构建指令构建您的应用程序,从而易于部署和管理您的应用程序。
您是否喜欢使用预构建的容器或通过源代码构建应用程序,App Runner提供灵活的选项以满足您的需求。
App Runner在行动中
现在,我们已经完整概述了该服务,让我们使用build
和automatic
模式进行练习。
在previous article中,我设置了一个具有FastAPI框架的基本Python API。我将在本文其余部分重复使用代码。
import fastapi, uvicorn
from starlette.requests import Request
import prometheus_client
import os
api = fastapi.FastAPI()
...
if __name__ == "__main__":
print("Starting webserver...")
uvicorn.run(
api,
host="0.0.0.0",
port=int(os.getenv("PORT", 8080)),
debug=os.getenv("DEBUG", False),
log_level=os.getenv('LOG_LEVEL', "info"),
proxy_headers=True
)
AWS控制台提供了您部署所需的一切。您应该看到这样的页面:
单击创建一个应用程序跑步服务按钮,您现在有:
一段时间以来,认可者仅支持Github as Source code repository
。因此,单击添加新的按钮以添加新的存储库。
打开一个新窗口。为您的连接设置名称,然后单击“安装”按钮。
确实,AWS将安装Github connect
,您将能够选择要部署的存储库和分支。该连接可以用于您所有其他服务的连接。
不要忘记检查存储库AWS连接器可以访问。
在此步骤中,您应该将所有字段填写如下:
在下一页上,是时候配置您的构建设置了。
在您项目的根部添加配置文件apprunner.yaml
,其中包含以下内容:
version: 1.0 # version of the specification
runtime: python3 # runtime to use
build:
commands:
build:
- pip install -r requirements.txt # install dependencies
env: # define environment variables
- name: PORT
value: '8080'
run:
command: python app.py # command to run fastapi
network:
port: 8080 # port AppRunner will expose
在下一页上,您可以启用各种选项使您的服务脱颖而出:
-
自动缩放:通过设置请求数,并发,etc.
来定义服务的缩放行为
-
健康检查:配置负载平衡器在您的应用程序跑步服务实例上执行的健康检查(请求的路径,连续的健康检查失败的数量等)。我们服务的健康检查路径是
/ping
。 -
安全:调用AWS服务的自定义实例角色
-
网络:公共,私人终点,自定义VPC等。
-
可观察性:用AWS X-Ray.
跟踪
最后一页是评论,并创建页面。您将可以在部署前最后一次检查您的设置。如果一切都很好,请单击“创建和部署”按钮,这将触发部署过程:
批准者将需要几分钟的时间来部署您的应用程序。之后,状态变成运行,一条消息表示您的应用程序正在运行。
恭喜,您钉了它!
测试连续部署
在自动模式下,存储库上的每个推动都会触发您的服务部署。让我们测试它!
打开app.py文件并添加以下代码:
...
@api.get('/hello')
def hello(request: Request):
REQUESTS.labels(endpoint='/hello').inc()
return "Hello World!"
...
提交您的更改并推动它们。
如果您返回AWS控制台,则应看到服务状态的状态从运行到进行中的操作。这表明检测变化和正在进行的重新部署。
几分钟后,您的应用程序应该再次运行,现在应该可用新端点:
真棒!我们的自动部署是完全运行的。
如果您喜欢命令行,请随时查看AWS CLI Docs页。
结论
总而言之,AWS评估师肯定是 您应该考虑快速有效地部署下一个FastApi服务的服务。它以开发人员为中心且易于设置。
在过去几个月中,已经完成了与AWS生态系统集成的大量努力,并且在大多数用例中,该服务现已准备就绪。享受!
今天全部!
如果您对批准者有任何疑问或经验,请随时在评论部分中分享它们。
我很高兴收到您的来信。