如何在不到5分钟的时间内与AWS一起在AWS上部署下一个FastApi应用程序?
#aws #python #fastapi #apprunner

在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集成,以进行日志和监视,消除了对其他第三方服务的需求。

使用应用程序跑步者简化您的容器管理,并专注于最重要的业务!

AppRunner Architecture

在配置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在行动中

现在,我们已经完整概述了该服务,让我们使用buildautomatic模式进行练习。

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控制台提供了您部署所需的一切。您应该看到这样的页面:

AppRunner Getting Started

单击创建一个应用程序跑步服务按钮,您现在有:

AppRunner Creation Page

一段时间以来,认可者仅支持Github as Source code repository。因此,单击添加新的按钮以添加新的存储库。

打开一个新窗口。为您的连接设置名称,然后单击“安装”按钮。

AppRunner Connection

确实,AWS将安装Github connect,您将能够选择要部署的存储库和分支。该连接可以用于您所有其他服务的连接。

不要忘记检查存储库AWS连接器可以访问。

AppRunner Integration

在此步骤中,您应该将所有字段填写如下:

AppRunner Service

下一页上,是时候配置您的构建设置了。

在您项目的根部添加配置文件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.

  • 跟踪

最后一页是评论,并创建页面。您将可以在部署前最后一次检查您的设置。如果一切都很好,请单击“创建和部署”按钮,这将触发部署过程:

AppRunner Deployment

批准者将需要几分钟的时间来部署您的应用程序。之后,状态变成运行,一条消息表示您的应用程序正在运行。

AppRunner Running

恭喜,您钉了它!

测试连续部署

在自动模式下,存储库上的每个推动都会触发您的服务部署。让我们测试它!

打开app.py文件并添加以下代码:

...

@api.get('/hello')
def hello(request: Request):
    REQUESTS.labels(endpoint='/hello').inc()
    return "Hello World!"
...

提交您的更改并推动它们。

如果您返回AWS控制台,则应看到服务状态的状态从运行进行中的操作。这表明检测变化和正在进行的重新部署。

AppRunner CICD

几分钟后,您的应用程序应该再次运行,现在应该可用新端点:

AppRunner Hello

真棒!我们的自动部署是完全运行的。

如果您喜欢命令行,请随时查看AWS CLI Docs页。

结论

总而言之,AWS评估师肯定是 您应该考虑快速有效地部署下一个FastApi服务的服务。它以开发人员为中心且易于设置。

在过去几个月中,已经完成了与AWS生态系统集成的大量努力,并且在大多数用例中,该服务现已准备就绪。享受!

今天全部!

如果您对批准者有任何疑问或经验,请随时在评论部分中分享它们。

我很高兴收到您的来信。