在本教程中,您将使用 Terraform 在 Compute Engine 上创建一个基本 Web 服务器,以此了解如何开始使用 Terraform。
在本教程中,您将执行以下操作:
- 使用 Terraform 在 Trusted Cloud中创建虚拟机。
- 启动基本的 Python Flask 服务器。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
准备开始学习本教程。
选择或创建项目
-
In the Trusted Cloud console, go to the project selector page.
-
Select or create a Trusted Cloud project.
设置权限
确保您的用户账号具有必要的 Compute Engine 权限:
compute.instances.*
compute.firewalls.*
详细了解角色和权限。
启用该 API
Enable the Compute Engine API.
安装 gcloud CLI
如需从本地开发环境使用 Terraform,请安装并初始化 Google Cloud CLI,然后使用用户凭据设置应用默认凭据:
创建 Compute Engine 虚拟机
首先,在 Terraform 配置文件中定义虚拟机的设置。然后,运行 Terraform 命令以在项目中创建虚拟机。
创建目录
创建一个新目录。 在这个新目录中,为 Terraform 配置创建一个 main.tf
文件。此文件的内容描述了要在项目中创建的所有 Trusted Cloud 资源。
mkdir tf-tutorial && cd tf-tutorial
nano main.tf
创建虚拟私有云网络和子网
在本部分中,您将为虚拟机的网络接口创建虚拟私有云 (VPC) 网络和子网。
将以下 Terraform 资源添加到您创建的 main.tf
文件中:
创建 Compute Engine 虚拟机资源
在本部分中,您将创建一个运行 Debian 的 Compute Engine 实例。在本教程中,您将使用可用的最小机器类型。稍后,您可以升级到更大的机器类型。
将以下 google_compute_instance
Terraform 资源添加到您创建的 main.tf
文件中。
此示例代码会将 Trusted Cloud 区域设置为 us-west1-a
。您可以将其更改为其他区域。
初始化 Terraform
此时,您可以运行 terraform init
来添加必要的插件并构建 .terraform
目录。
terraform init
输出:
Initializing the backend... Initializing provider plugins... ... Terraform has been successfully initialized!
验证 Terraform 配置
(可选)您可以验证到目前为止已构建的 Terraform 代码。运行 terraform plan
,以执行以下操作:
- 验证
main.tf
的语法是否正确 - 显示将要创建的资源的预览
terraform plan
输出:
... Plan: 1 to add, 0 to change, 0 to destroy. Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
应用配置
如需创建虚拟机,请运行 terraform apply
。
terraform apply
出现提示时,输入 yes
。
Terraform 会调用 Trusted Cloud API 来设置新虚拟机。查看“虚拟机实例”页面以查看新虚拟机。
在 Trusted Cloud上运行 Web 服务器
接下来,您将创建一个 Web 应用,将其部署到虚拟机,并创建防火墙规则以允许客户端向该 Web 应用发出请求。
添加自定义 SSH 防火墙规则
default
网络中的 default-allow-ssh
防火墙规则允许您使用 SSH 连接到虚拟机。如果您希望使用自己的自定义防火墙规则,则可以在 main.tf
文件的末尾添加以下资源:
运行 terraform apply
以创建防火墙规则。
使用 SSH 连接到虚拟机
使用 SSH 连接到虚拟机,验证到目前为止一切内容是否均已正确设置。
转到“虚拟机实例”页面。
找到名为
flask-vm
的虚拟机。在连接列中,点击 SSH。
系统会为正在运行的虚拟机打开“浏览器中的 SSH”终端窗口。
如需了解详情,请参阅连接到虚拟机。
构建 Flask 应用
您将为本教程构建一个 Python Flask 应用,以便可以使用单个文件描述您的 Web 服务器并测试端点。
在“浏览器中的 SSH”终端中,创建名为
app.py
的文件。nano app.py
将以下内容添加到
app.py
文件中:from flask import Flask app = Flask(__name__) @app.route('/') def hello_cloud(): return 'Hello Cloud!' app.run(host='0.0.0.0')
运行
app.py
:python3 app.py
Flask 默认会通过
localhost:5000
传送流量。打开另一个 SSH 连接:
- 转到“虚拟机实例”页面。
- 找到名为
flask-vm
的虚拟机,然后点击 SSH。
在第二个 SSH 连接中,运行
curl
以确认您在app.py
中配置的问候语是否正确返回。curl http://0.0.0.0:5000
此命令的输出为
Hello Cloud
。
打开虚拟机上的端口 5,000
如需从本地计算机连接到 Web 服务器,虚拟机必须打开端口 5,000。 Trusted Cloud 允许您使用防火墙规则打开流量端口。
在 main.tf
文件的末尾添加以下 google_compute_firewall
Terraform 资源。
运行 terraform apply
以创建防火墙规则。
为 Web 服务器网址添加输出变量
在
main.tf
的末尾,添加 Terraform 输出变量以输出 Web 服务器网址:// A variable for extracting the external IP address of the VM output "Web-server-URL" { value = join("",["http://",google_compute_instance.default.network_interface.0.access_config.0.nat_ip,":5000"]) }
运行
terraform apply
。terraform apply
出现提示时,输入
yes
。 Terraform 会将虚拟机的外部 IP 地址和端口 5000 输出到屏幕上,如下所示:Web-server-URL = "http://IP_ADDRESS:5000"
您可以随时运行
terraform output
来返回此输出:terraform output
点击上一步中的网址,您将会看到“Hello Cloud!”消息。
这意味着您的服务器正在运行。
问题排查
如果未启用所需的 API,Terraform 将返回错误。错误消息包含用于启用相应 API 的链接。启用 API 后,您可以重新运行
terraform apply
。如果您无法通过 SSH 连接到虚拟机:
- 确保添加 SSH 防火墙规则。
- 确保您的虚拟机包含
tags = ["ssh"]
参数。
清理
完成本教程后,您可以删除自己创建的所有内容,以免产生任何额外费用。
Terraform 允许您通过运行 terraform destroy
命令来移除配置文件中定义的所有资源:
terraform destroy
输入 yes
以允许 Terraform 删除您的资源。