本教程介绍如何使用 Cloud Deployment Manager 部署 Python Bookshelf 示例应用。
借助 Deployment Manager,您可以通过声明性的可重复流程,创建必要的 Google Cloud 资源,实现一步部署。 借助 Deployment Manager,您可以更新部署、跟踪随时间的修改、使用 Jinja 或 Python 创建模板,以及对模板进行参数化以便在类似部署中使用同一模板。
目标
- 克隆并配置 Bookshelf 示例应用。
- 创建 Deployment Manager 配置和模板。
- 创建 Deployment Manager 部署。
- 使用 Deployment Manager 部署 Bookshelf 示例应用。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
在系统上安装 Python(
pip
和virtualenv
)。如需查看说明,请参阅为 Google Cloud 设置 Python 开发环境。
创建 Cloud Storage 存储分区
以下说明详细介绍了如何创建 Cloud Storage 存储分区。 存储分区是 Cloud Storage 中用于存放数据的基本容器。
在终端窗口中,创建一个 Cloud Storage 存储分区,其中 YOUR_BUCKET_NAME 表示存储分区的名称:
gsutil mb gs://YOUR_BUCKET_NAME
如需在 Bookshelf 应用中查看上传的图片,请将该存储分区的默认访问控制列表 (ACL) 设置为
public-read
:gsutil defacl set public-read gs://YOUR_BUCKET_NAME
克隆示例应用
示例应用可在 GitHub 上的 GoogleCloudPlatform/getting-started-python
下找到。
克隆代码库:
git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
转到示例目录:
cd getting-started-python/7-gce
配置应用
打开
config.py
进行修改。将
PROJECT_ID
的值设置为您的项目 ID。将值
CLOUD_STORAGE_BUCKET
设置为您的 Cloud Storage 存储分区的名称。
保存并关闭
config.py
。
在本地计算机上运行应用
创建一个独立的 Python 环境,并安装依赖项:
Linux/macOS
virtualenv -p python3 env source env/bin/activate pip install -r requirements.txt
Windows
virtualenv -p python3 env env\scripts\activate pip install -r requirements.txt
运行应用:
python main.py
在浏览器中,输入以下地址:
要停止本地网络服务器,请按 Control+C。如果您要退出虚拟环境,请输入 deactivate
。
部署示例应用
将代码推送到代码库
您可以通过多种方式将代码添加到正在运行的 Compute Engine 实例。其中一种方法是使用 Cloud Source Repositories。 每个项目都包含可供 Compute Engine 实例使用的 Git 代码库。然后,您的实例可以在启动过程中拉取应用代码的最新版本。这样,当您更新应用时,就不需要配置新映像或实例;您只需重启现有实例或创建一个新实例,因此使用 Git 代码库非常方便。
首次使用 Git 时,请使用
git config --global
设置您的身份。在 Cloud Console 中,创建代码库:
然后,将您的应用代码推送到您项目的代码库,其中
[YOUR_PROJECT_ID]
是您的项目 ID,[YOUR_REPO]
是代码库的名称:git commit -am "Updating configuration" git config credential.helper gcloud.sh git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO] git push cloud master
创建部署
提交配置并将代码上传到 Cloud Source Repositories 后,您就可以使用 Deployment Manager 来创建部署:
转到
deployment_manager
目录:cd getting-started-python/7-gce/gce/deployment_manager
创建部署:
gcloud deployment-manager deployments create my-deployment --config config.yaml
查看所有部署的列表:
gcloud deployment-manager deployments list
获取部署的描述和其所创建的资源:
gcloud deployment-manager deployments describe my-deployment
查看您的应用
创建转发规则后,可能需要几分钟时间,您的配置传播才能完成,流量开始路由到您的实例。
如需检查进度,请执行以下操作:
gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
当至少有一个实例报告
HEALTHY
时,获取负载平衡器的转发 IP 地址:gcloud compute forwarding-rules list --global
您的转发规则 IP 地址位于
IP_ADDRESS
列中。在浏览器中,输入列表中的 IP 地址。
您的应用现在正在 Google Cloud 上运行。
理解代码
配置部署
您可以查看如何在 config.yaml
中配置部署:
配置文件将模板文件作为资源导入,并使用它来定义名为 bookshelf
的资源。该模板接受多个属性作为参数。如需详细了解如何创建 Deployment Manager 配置文件,请参阅创建配置。
配置部署模板的架构
查看架构文件 bookshelf.jinja.schema
,该文件定义并记录部署应在其配置文件中提供的参数。如需详细了解配置架构,请参阅使用架构。
配置部署模板
模板定义创建自动扩缩、负载平衡的托管实例组所需的一些资源。如需了解所创建的资源的完整说明,请参阅模板中的注释并查看 Compute Engine 上的 Bookshelf 教程。
请注意,Deployment Manager 提供了一种以声明方式定义资源的方法,但是指定资源的大多数配置都是由其 API 定义的。例如,可以在 Compute Engine API 参考文档的实例模板资源定义中找到实例模板资源的大多数配置选项。
该模板是使用 Jinja 模板语言编写的。您可以使用 Jinja 或 Python 编写 Deployment Manager 模板。其中,Jinja 有更具声明式的优点,它比 Python 更具可读性、更容易理解。对于一些复杂的部署,Python 的完整表现力可能会让事情变得更简单些。在本示例中,使用 Jinja 足以创建所需的资源。
在模板中,系统会自动设置某些环境变量,您可以使用 env
字典访问这些变量。在本示例中,部署名称被引用作为在命名所创建的资源时可重复使用的名称。如需详细了解可用的环境变量,请参阅 Deployment Manager 文档中的使用环境变量部分:
该模板使用 Compute Engine 教程中使用的相同启动脚本。 脚本内容插入到模板中,Jinja 缩进指令正确缩进内容:
在 Deployment Manager Jinja 模板中,您还可以引用在模板中其他位置创建的资源。在以下示例中,后端服务使用托管实例组的引用来获取它应指向的实例组:
可在模板中使用 config.yaml
中指定的属性:
清理
为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
若要避免产生费用,最简单的方法是删除您为本教程创建的项目。
要删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除部署
如需删除部署,请输入以下命令。此命令会删除负载平衡器以及与您的部署关联的所有 Compute Engine 实例:
gcloud deployment-manager deployments delete my-deployment
后续步骤
探索有关 Google Cloud 的参考架构、图表、教程和最佳实践。查看我们的云架构中心。
了解其他 Google Cloud 服务。