将地理位置API自动部署到Google Cloud的Cloud使用CDKTF和BASH脚本运行
#python #serverless #fastapi #googlecloud

介绍

本文提供了将GeOlocation API部署到您自己的Google Cloud Project中的分步指南。本文将重点侧重于使用自动化工具和脚本在将FastApi Python Web应用程序部署到Google Cloud的Cloud Run(无服务器容器平台)中。

有关所使用的设计和技术堆栈的更多信息,请参阅构建地理位置API。在本文中,我们将专注于部署。

作为一个概述,该项目具有五个不同的组件:

  • 处理Web请求和查询IP地址的FastAPI应用程序从MaxMind Geolite2数据库中检索地理位置数据。
  • 一个自动下载Geolite2数据库并构建轻量级Docker Image的过程。
  • cloudbuild.yaml文件定义了构建管道的必要步骤,其中包括构建docker映像并部署新的修订云运行。
  • CDKTF(用于Terraform的云开发套件)应用程序,该应用程序部署了地理位置API所需的云基础架构。
  • 一个设置云外壳VM环境的deploy.sh shell脚本。

出于部署的目的,我们只会执行deploy.sh Shell脚本,该脚本将负责设置我们的环境并部署我们的CDKTF应用程序。但是,在运行脚本之前,我们需要先手动做一些事情。请继续阅读以了解更多信息。

随附YouTube视频

如果您想观看视频而不是阅读一篇长文章,这是YouTube视频,伴随着此内容。

现场演示

探索在我的Google Cloud平台上托管的地理位置API的实时演示,作为云运行修订版on this page运行。输入有效的公共IP地址,无论是IPv4还是IPv6,以检索其详细信息。如果不提供输入,API将返回您自己的IP地址的详细信息。

部署步骤概述

  • 我们将从获得MaxMind开发人员帐户开始以获取许可证密钥。该密钥将在我们的Dockerfile中使用以下载最新的Geolite2数据库。
  • 我们将登录到我们的Google云平台创建一个项目并使用Google Cloud Shell部署所需的组件。
  • 我们将分配GitHub存储库以能够连接到云构建触发器。
  • 我们将把我们的github存储库连接到云构建触发器以将其用作源。
  • 我们将使用.env文件自定义和配置我们的环境。
  • 我们将使用deploy.sh Shell脚本准备Google Cloud Shell Console VM并部署我们的FastAPI应用程序。

让我们首先浏览此列表中的每个项目,一次。

创建一个MaxMind开发人员帐户

要在我们的容器中设置自动数据库更新,我们需要创建一个MaxMind帐户并获得许可证密钥。为此:

  1. 访问MaxMind网站和sign up以获取一个帐户以访问Geolite2数据库。
  2. 检查您的电子邮件中是否有验证链接。单击链接为您的帐户设置密码。
  3. 登录到您的MaxMind帐户。您将通过电子邮件收到验证代码。复制并粘贴验证代码以完成身份验证过程。
  4. 在您的帐户仪表板上,单击左侧栏中的“ 管理许可密钥”。
  5. 单击“ 创建新许可证密钥”,然后输入您的许可证密钥的名称。
  6. 单击“ 创建”以生成许可证密钥。

我们很快就需要保持许可键窗口。

创建 Google Cloud Project

我们开始之前,请确保您已登录到Google Cloud帐户并拥有有效的计费帐户。您可能会因使用Google Cloud Services服务而受到费用,但是Google Cloud的免费层足以测试我们的部署而不会产生任何费用。

免费层包含一组Google Cloud Services,您可以免费使用,并具有一定的使用限制。如果您超出了使用限制,则将为额外的用法收取费用。

免费层是尝试Google Cloud Services并测试我们的部署而不会产生任何费用的好方法。

如果您不想继续使用该服务,我们的CDKTF实现使仅在一个命令中删除已部署的资源非常容易。

  1. 转到Google Cloud Console
  2. 单击 按钮中的签名。
  3. 输入您的Google帐户电子邮件地址和密码。
  4. 单击 按钮中的签名。

登录后,您将被带到Google Cloud Platform控制台。从这里,您可以开始使用Google Cloud Services。

创建一个新的Google Cloud项目,用于部署我们的地理位置服务,请按照以下步骤:

  1. 单击选择项目按钮位于GCP控制台的左上角。
  2. 单击“ 新项目”以创建一个新项目。
  3. 在“ 项目名称”字段中,输入“ geolocation ”。
  4. 记下Google Cloud分配的随机项目ID。这是在全球范围内必须是唯一的,因此Google云将随机数分配给名称。
  5. 单击“ 创建。”
  6. 单击选择项目按钮,然后选择新创建的项目以使其成为活动项目。

您还可以通过单击位于GCP控制台左上角的选择项目下拉按钮,然后选择项目。

要了解有关在Google Cloud平台上创建项目的更多信息,请遵循此guide

叉子和克隆git存储库

我们需要分配Git repository,因为云构建仅允许从我们自己的GitHub帐户连接到存储库,即使存储库是公开的。分叉存储库会在我们自己的帐户中创建它的副本,然后我们可以克隆到我们的云外壳环境中。克隆存储库后,我们可以将其连接到我们的云构建触发器。

这是对所涉及步骤的更详细说明:

  1. 转到GitHub repository
  2. 单击页面右上角的 fork 按钮。
  3. 这将在我们自己的github帐户中创建存储库的副本。
  4. 一旦存储库分配了,请单击 clone 按钮。
  5. 在带有HTTPS的克隆中
  6. 在我们的云外壳环境中打开终端窗口。
  7. 键入以下命令以克隆存储库:git clone <URL>

用我们在步骤5中复制的URL替换<URL>

存储库将被克隆到我们的云外壳环境中。

连接git存储库

在此步骤中,我们对github存储库进行身份验证并将其连接到CloudBuild Trigger。

要将我们的github存储库连接到云构建,请按照以下步骤:

  1. 转到 Repositories 页面 Google Cloud Console
  2. 滚动到页面底部,然后单击连接存储库
  3. 区域留作作为全局,并确保选择 github
  4. 单击继续
  5. 如果您尚未登录到GitHub,则会提示您这样做。
  6. 登录后,请单击 googlecloudbuild授权Google Cloud Build
  7. 单击连接连接您的存储库。

尚未创建触发器。我们将使用CDKTF进行。

创建.env文件

我们的CDKTF堆栈取决于.env文件的值以设置我们的基础架构

要设置.env文件,请按照以下步骤:

  1. 单击激活页面顶部的云外壳按钮。
  2. 等待云外壳会话打开。
  3. 单击“ 打开编辑器”打开文件编辑器。
  4. 复制example_env.txt文件的内容。
  5. 创建一个新文件并粘贴复制的内容。
  6. 将文件作为.env保存在克隆存储库的根目录中。
  7. 找到Google分配给您的项目ID的随机数字ID并将其设置为RANDOM_ID变量。
  8. 将您首选的Google Cloud区域设置为可变REGION_PREFERRED
  9. 将您的分叉git存储库的URL设置为可变GIT_SOURCE_REPOSITORY
  10. 如果您将从前端使用此API,请相应地设置FASTAPI_CORS_ORIGINS变量。
  11. 查找MaxMind帐户的帐户ID和许可证密钥,并分别为GEOIPUPDATE_ACCOUNT_IDGEOIPUPDATE_LICENSE_KEY环境变量分配这些值。

请确保在相等符号或变量值之后删除任何不需要的空间。

我们的.env文件现在已配置,我们准备部署我们的云运行服务。

运行deploy.sh脚本

在最后一步中,我们执行了deploy.sh脚本。为了详细了解我们的脚本的作用,请参阅构建GeOlocation API视频。从部署的角度来看,在新鲜和干净的云外壳环境中,我们的脚本将首先准备我们的云外壳VM,然后部署我们的CDKTF堆栈。

最初开始从事该项目时,我开始记录撰写详细指南的步骤,以设置云外壳VM以部署我们的微服务。但是,我意识到,这项工作的大部分都可以轻松自动化,并且简单的外壳脚本对参与的每个人都更加有益和用户友好。

因此,我继续创建了一个外壳脚本,该脚本处理我们的基础CDKTF堆栈的设置和部署。然后,我们必须手动触发构建,然后才能部署第三个也是最终的CDKTF堆栈才能部署我们的云运行服务。

在此版本的脚本中,我使用pyenv在全球设置Python版本,并且在特定时间点上有几个手动步骤要按确切顺序采取。这使得很难理解和故障排除。因此,我花了更多时间来重构和使脚本更好,结果是完全自动化的端部部署我们的微服务地理位置API。

要执行我们的脚本,请确保您在项目root Directory中并运行./deploy.sh脚本。

# make sure we are in the right directory
cd ~/geolocation
./deploy.sh

如果提示,请选择Authorize继续。

现在,坐下来观看我们的云外壳VM设置,我们的云运行服务在云运行中构建,测试和部署。

这个脚本实际上做了很多工作,要了解更多,请观看我的视频构建GeOlocation API,我可以在其中浏览代码并深入研究各种工具如何一起工作,以及该外壳脚本如何将所有内容整合在一起。设置VM,构建容器映像然后部署云运行修订大约需要12分钟。

终点线:完成部署旅程

在此阶段,我们应该为我们的地理位置服务进行运行的云运行修订。您可以检查我们部署的云运行服务here的状态。单击“服务链接”以打开云运行页面并访问服务托管的URL。

此外,请检查是否为每周配置的时间表触发我们的云构建here。因此,每周,我们的云构建都会通过更新的MaxMind Geolite2数据库触发并重建图像,并部署新的云运行修订版。

在这里需要做很多工作,但是从现在开始,自动化将接管。现在,我们可以在需要地理位置信息的任何数量的应用程序中使用此API。我们不必担心将数据库保持最新或服务的可扩展性。设计由设计运行的云将根据需求根据需求旋转尽可能多的容器,当没有需求时,云运行将终止所有容器并将服务缩小到零。我们仅在集装箱服务请求的时间内被收费。

感谢您的阅读。希望这个对你有帮助。我知道有很多可以改进的地方。您的反馈和建议对我来说非常重要。请花点时间发表评论。