Python AppConfig

2024年8月29日 | 阅读 7 分钟

AWS Appconfig Python

  • 无需进行耗时的代码部署,您可以使用 AWS AppConfig 管理并快速部署应用程序配置。使用 AWS AppConfig,您可以创建应用程序配置,验证其语法或语义错误,并在应用程序运行期间以受控速率将其部署到您的目标。
  • 为了减少应用程序中断,如果在部署过程中遇到问题,AWS AppConfig 会回滚配置。部署完成后,您的应用程序必须轮询 AWS AppConfig 以获取最新的配置更新。
  • 您可以将 AWS AppConfig 帮助库(一个模型开源 Python 库)包含到您的代码中,以便在遵循最佳实践的同时轻松将 AWS AppConfig 与您的应用程序集成。

以下是高级步骤

  • 创建用于存储配置的“AWS AppConfig”资源。创建包含示例 AWS AppConfig 帮助库的 Python 程序。
  • 查看程序。
  • 要观察更改生效,请部署新的配置版本并测试应用程序。

前提条件

  • 一个设置了 AWS 账户和 AWS 凭证的命令行环境(通常在 /.aws/credentials 中)。
  • 已安装 Python 3。(Python 2 的支持已结束。AWS AppConfig 帮助库不支持它。)
  • 一个用于发出 HTTP 请求的设备。在命令行中,您可以例如使用 curl 或 httpie。如果您偏好图形用户界面,那么 Postman 或网络浏览器是一个值得信赖的选择。

如何创建 AWS AppConfig 资源

要保存应用程序的配置,首先构建 AWS AppConfig 资源。这些资源包括

  • 应用程序是为您的客户提供功能的逻辑代码片段。
  • 一个部署组,称为环境(例如,beta 或生产)。
  • 一个配置配置文件,授予 AWS AppConfig 访问您的配置数据的权限。

可以启动 AWS CloudFormation 模板来创建各种资源。确保您的命令行环境配置为使用 AWS 区域 us-east-1,该区域与模板所在的区域相同。

为了自行创建资源,必须遵循以下步骤

  • 登录 AWS 管理控制台,并确保您使用的 AWS 区域与命令行环境中定义的区域相同。
  • 在搜索框中,输入 AppConfig 以打开 AWS Systems Manager 控制台。
  • 如果 AWS AppConfig 欢迎屏幕打开,则选择“创建配置数据”。否则,选择“创建应用程序”。
  • 在“名称”字段中,键入 DemoApp,然后单击“创建应用程序”。
  • 在详细信息页面上选择“创建环境”。
  • 在“名称”字段中输入 prod,然后单击“创建环境”。
  • 从详细信息页面选择“开始部署”。
  • 选择它以创建配置配置文件。
  • 在“名称”中输入 main。
  • 选择“AWS AppConfig 托管配置”作为配置源。
  • 在“内容”下选择 JSON,键入以下 JSON,然后选择“下一步”。AWS AppConfig 将通过此配置向您的应用程序提供。
  • 在“添加验证器”页面上,您不应选择任何一个选项。选择它以创建配置配置文件。
  • 在“部署详细信息”下的“配置”中选择“主”。
  • 在“托管配置版本”下选择 1。
  • 从“部署策略”菜单中选择 AppConfig.AllAtOnce (快速)。
  • 选择“启动部署”。

当软件请求时,您的 JSON 文档将作为配置版本 1 交付。

如何创建 Python 应用程序

接下来编写 Python 程序。最好在虚拟环境空间中安装(Python)库。该解决方案利用 FastAPI 包提供 API 功能,以及 AWS AppConfig 实用程序和 unicorn 提供 HTTP 服务器。

注意:编写这些说明时已考虑到 Python 包安装程序 pip 和 python,因为它们都假定已安装 Python 3。可能需要使用 pip3 和 python3。

1. 创建一个用于构建和存储项目的文件夹。

2. 创建虚拟环境

3. 激活虚拟环境

注意:您必须在打开的每个新的终端窗口或 shell 中运行此命令。

在您的编辑器中,将以下文本保存为 appconfig-demo 文件夹中的 rqumnts.txt。

4. 安装库。

5. 在您的编辑器中创建一个新文件,包含以下内容,然后将其保存为 main.py 并放在 appconfig-demo 文件夹中。

此代码首先导入必要的库,然后创建 AppConfigHelper 类的实例。库已通过前三个给定值指示要从 AWS AppConfig API 获取配置。这些是您之前提供给应用程序、环境和配置文件的名称。最后一个值是 API 查询新配置修改之间的时间。

调用 API 时,库遵循 AWS AppConfig 的最佳实践。它提及了客户端 ID 和配置文档的最新接收版本。多亏了客户端 ID,AWS AppConfig 可以根据正在使用的部署策略按间隔交付配置。

由于配置的最后接收版本,API 可以快速通知您是否已拥有正确的配置版本。如果 API 请求中省略此值,AWS AppConfig 将返回完整的配置文件,从而产生额外费用。

客户端发送带有 Assuming-Modified-Since 标头的请求并获取 304 Not Modified 响应代码与此类似(如果您熟悉 HTTP 请求和缓存)。

该代码为 HTTP API 的 /process-string 路径创建了一个处理程序,该路径接受一个输入参数进行操作。处理程序调用的第一件事是 AppConfigHelper 实例的 update_config() 函数。如果自上次检查以来已超过 15 秒,库将调用 AWS AppConfig API 查看是否已添加任何新配置。

然后,处理程序检查接收到的配置中两个功能标志的值(由库作为配置属性提供),并根据需要修改输入文本。JSON 文件由帮助库自动处理。最后,结果返回到 FastAPI 和 unicorn,以便将其传输给请求者。

测试应用程序

现在启动应用程序并测试它,检查它是否根据您设置的功能标志反转输入字符串但不将其大写。

  1. 确保您的终端环境已配置为使用生成资源的同一 AWS 区域,并且具有必要的凭据。确保此终端中的虚拟环境已打开。
  2. 启动 Web 服务器
  1. 打开浏览器并输入 https://:8000/process-string/hello%20world 或使用 curl、httpie、postman 或其他协议
  2. 您应该收到一个 JSON 响应,其中包含结果“dlrow olleh”。

您的程序具有配置并按照指示反转输入,但它没有将其更改为全部大写字符。

部署启用全大写模式的配置更新

  1. 转到 AWS Systems Manager 控制面板并选择 AWS AppConfig 以编辑参数。
  2. 选择 DemoApp 程序。
  3. 应选择“配置配置文件”选项卡。
  4. 选择主(primary)配置文件。
  5. 从“托管配置版本”列表中选择“创建”。
  6. “创建托管配置版本”页面显示当前配置的内容。将 transform allcaps 设置为 true 而不是 false,然后单击“创建托管配置版本”。
  7. 主页重新加载后选择“开始部署”。
  8. 在“开始部署”屏幕上选择 prod 环境、新配置版本 (2) 和 AppConfig。快速(一次性)部署策略。
  9. 在单击“开始部署”之前,等待状态从“正在部署”变为“完成”。

现在,输出值必须大写并反转。在再次进行调整之前,等待 15 秒,以确保库检查是否有新的配置版本。

清理

尽管存储 AWS AppConfig 资源不收取任何费用,但如果您不再使用它们,您可能希望清除这些资源。

  1. 从 AWS Systems Manager 控制台选择 AWS AppConfig,然后转到 DemoApp 应用程序。
  2. 选择“版本”旁边的“删除”,然后再次选择“删除”以确认。
  3. 重复步骤 2,直到没有托管配置版本。
  4. 从页面顶部的面包屑中选择 DemoApp 链接。
  5. 选择 prod 环境,然后选择“删除”并再次选择“删除”以确认。
  6. 在“配置配置文件”选项卡上,选择主配置文件,单击“删除”,然后再次单击“删除”以确认。
  7. 选择“删除应用程序”,然后再次选择“删除”以确保删除。

结论

使用 AWS AppConfig 帮助模块,我们了解了如何将 AWS AppConfig 与 Python 应用程序结合使用。

其他一些功能,例如我们所说的语法配置和语义配置验证、部署速率控制、监控您的应用程序以及在出现错误时回滚,以及将配置更新动态部署到您的应用程序,可以通过使用上面给出的代码进行验证。


下一个主题Boto3 Python 模块