- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
《Terraform 101 从入门到实践》这本小册在 南瓜慢说官方网站 和 GitHub 两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看.
Terraform支持的公有云有很多,如AWS、Azure、Google、Alibaba等。将Terraform应用于公有云,才最能发挥其强大的功能.
首先我们需要初始化一个GCP项目。GCP给开发者提供了免费试用的服务,我们可以在不花钱的情况下学习GCP的功能.
要使用GCP,我们需要创建一个项目,它所有的资源都是在项目之下管理的:
在实际开发中,我们不能使用自己的账号在做操作,最好的方式是创建一个服务账号(Service Account),这应该也是所有云平台都推荐的方式。创建位置如下:
输入账号名字:
选择角色,为了方便,我直接选择Owner,会拥有所有权限,但实际应用肯定不能这样,要做好隔离:
对于Service Account,不是通过用户名密码来授权的,而是通过密钥文件,创建如下:
选择新建一个密钥,并格式为json。创建后,会自动下载key文件.
Key文件拿到后,我们可以设置环境变量: GOOGLE_APPLICATION_CREDENTIALS :
$ export GOOGLE_APPLICATION_CREDENTIALS=/Users/larry/Software/google-cloud-sdk/pkslow-admin-for-all.json
激活Service Account:
$ gcloud auth activate-service-account admin-for-all@pkslow.iam.gserviceaccount.com --key-file=${GOOGLE_APPLICATION_CREDENTIALS}
设置SDK的项目ID:
$ gcloud config set project pkslow
检查一下设置是否正确:
$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* admin-for-all@pkslow.iam.gserviceaccount.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
$ gcloud config list
[core]
account = admin-for-all@pkslow.iam.gserviceaccount.com
disable_usage_reporting = True
project = pkslow
Your active configuration is: [default]
SDK设置好后,就可以使用了,我们使用它来创建Pub/Sub试试。创建主题和订阅:
$ gcloud pubsub topics create pkslow-test
Created topic [projects/pkslow/topics/pkslow-test].
$ gcloud pubsub subscriptions create pkslow-sub --topic=pkslow-test
Created subscription [projects/pkslow/subscriptions/pkslow-sub].
检查是否创建成功:
$ gcloud pubsub topics list
---
name: projects/pkslow/topics/pkslow-test
$ gcloud pubsub subscriptions list
---
ackDeadlineSeconds: 10
expirationPolicy:
ttl: 2678400s
messageRetentionDuration: 604800s
name: projects/pkslow/subscriptions/pkslow-sub
pushConfig: {}
topic: projects/pkslow/topics/pkslow-test
在浏览器查看,发现已经成功创建了:
我们需要安装GCP的Terraform插件来管理GCP资源:
# 设置插件目录
$ export TERRAFORM_PLUGIN=/Users/larry/Software/terraform/plugins
# 创建目录
$ mkdir -p ${TERRAFORM_PLUGIN}/registry.terraform.io/hashicorp/google/4.0.0/darwin_amd64
$ cd ${TERRAFORM_PLUGIN}/registry.terraform.io/hashicorp/google/4.0.0/darwin_amd64
# 下载
$ wget https://releases.hashicorp.com/terraform-provider-google/4.0.0/terraform-provider-google_4.0.0_darwin_amd64.zip
# 解压
$ unzip terraform-provider-google_4.0.0_darwin_amd64.zip
需要提供Terraform代码理管理Pub/Sub,更多细节请参考: Terrafrom GCP . 。
版本文件version.tf
terraform {
required_version = "= 1.0.11"
required_providers {
google = {
source = "hashicorp/google"
version = "= 4.0.0"
}
}
}
主文件main.tf
provider "google" {
project = "pkslow"
}
resource "google_pubsub_topic" "pkslow-poc" {
name = "pkslow-poc"
}
resource "google_pubsub_subscription" "pkslow-poc" {
name = "pkslow-poc"
topic = google_pubsub_topic.pkslow-poc.name
labels = {
foo = "bar"
}
# 20 minutes
message_retention_duration = "1200s"
retain_acked_messages = true
ack_deadline_seconds = 20
expiration_policy {
ttl = "300000.5s"
}
retry_policy {
minimum_backoff = "10s"
}
enable_message_ordering = true
}
指定插件目录初始化:
$ terraform init -plugin-dir=${TERRAFORM_PLUGIN}
使变更生效,就会在GCP上创建对应的资源:
$ terraform apply -auto-approve
如果没有发生错误,则意味着创建成功,我们检查一下:
$ gcloud pubsub topics list
---
name: projects/pkslow/topics/pkslow-poc
$ gcloud pubsub subscriptions list
---
ackDeadlineSeconds: 20
enableMessageOrdering: true
expirationPolicy:
ttl: 300000.500s
labels:
foo: bar
messageRetentionDuration: 1200s
name: projects/pkslow/subscriptions/pkslow-poc
pushConfig: {}
retainAckedMessages: true
retryPolicy:
maximumBackoff: 600s
minimumBackoff: 10s
topic: projects/pkslow/topics/pkslow-poc
注意:我们并没有提供任何密码或密钥,那Terraform怎么可以直接操作我的GCP资源呢?因为它会根据环境变量 GOOGLE_APPLICATION_CREDENTIALS 来获取.
我们通过gcloud来发送消息到Pub/Sub上:
$ gcloud pubsub topics publish pkslow-poc --message="www.pkslow.com"
messageIds:
- '3491736520339885'
$ gcloud pubsub topics publish pkslow-poc --message="Larry Deng"
messageIds:
- '3491738650256958'
$ gcloud pubsub topics publish pkslow-poc --message="Hi, pkslower"
messageIds:
- '3491739306095970'
从Pub/Sub拉取消息:
$ gcloud pubsub subscriptions pull pkslow-poc --auto-ack
我们还能在GCP界面上监控对应的队列,十分方便:
管理Terraform状态文件的最佳方式是通过云端的统一的存储,如谷歌云就用GCS.
首先要创建一个Bucket:
$ gsutil mb -p pkslow -l us-west1 -b on gs://pkslow-terraform
Creating gs://pkslow-terraform/...
$ gsutil ls gs://
gs://pkslow-terraform/
然后在Terraform文件中配置对应的信息:
terraform {
backend "gcs" {
bucket = "pkslow-terraform"
prefix = "state/gcp/pubsub"
}
}
初始化后,就会在Bucket上创建对应的目录:
$ terraform init -plugin-dir=${TERRAFORM_PLUGIN}
变更生效:
$ terraform apply -auto-approve
我们在浏览器查看一下,发现已经成功状态了对应的状态文件:
通过远程的云端,不仅可以存入状态文件,也可以从状态文件读取数据,如一些输出变量。比如模块A创建了一个VM,而我们可能通过这种方式获取它的IP,以便在其它模块使用。大致的配置如下:
data "terraform_remote_state" "foo" {
backend = "gcs"
config = {
bucket = "terraform-state"
prefix = "prod"
}
}
resource "template_file" "bar" {
template = "${greeting}"
vars {
greeting = "${data.terraform_remote_state.foo.greeting}"
}
}
最后此篇关于《Terraform101从入门到实践》Terraform在公有云GCP上的应用的文章就讲到这里了,如果你想了解更多关于《Terraform101从入门到实践》Terraform在公有云GCP上的应用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在评估 GCP 的 stackdriver 以跨多个微服务进行日志记录。 其中一些服务部署在本地,其中一些在 AWS/GCP 上。 我们的服务是基于 .NET 或 nodejs 的应用程序,我们投
我处于必须与 GCP 服务器建立 rabbitMQ 连接(我是消费者)的情况。我的代码也在 GCP 机器上。因此双方(一个是 MQ 生产者,另一个是我)决定创建一个本地网络连接,而不是进行外部 IP
我是 GCP 的新手。“GCP 服务”和“GCP 资源”之间的差异让我感到困惑。我认为 GCP 资源是物理 Assets ,例如计算机、硬盘驱动器、虚拟资源、CPU 和 RAM 等。但是 GCP 服务
Google 云平台多久更新(刷新)GCP 控制台上显示的结算费用?有固定的延迟还是实时的? 最佳答案 计费费用每天更新,发票每月生成。也可以通过编程方式按需检查使用情况,按照说明-> https:/
我在 GCP 存储桶中有以下格式的数据: gs://bucket/my_table/data_date=2021-03-26/000 gs://bucket/my_table/data_date=20
我使用 Terraform 在 GCP 中创建了一个服务帐户和一个自定义角色。如何将此自定义角色附加到服务帐户?我可以使用 GCP Console 来做到这一点,但这不是这里的需要,因为我必须使用 T
我正在学习 GCP,遇到了 Kuberflow 和 Google Cloud Composer。 据我了解,似乎两者都用于编排工作流,使用户能够在 GCP 中安排和监控管道。 我能弄清楚的唯一区别是
我们在 gcp 中需要 ufw 吗?还是 gcp 提供的防火墙足够好? 最佳答案 根据您想要实现的目标,您可以选择在 VM 实例级别或 GCP 级别使用防火墙。 出于安全原因,Google Cloud
我正在寻找一种方法来了解我为 GCP 虚拟机实例支付了多少费用。我有 4 个实例,当我转到计费帐户 -> 报告时,我通常会看到 Compute Engine 上特定项目的价格。 我的实例有窗口和许可以
我有一个已经发布到 Play 商店的 react-native 应用程序。在上次更新中,我遇到了这个错误,并且在描述中谷歌说 com.--.MainApplication.onCreate 我有一个由
我正在玩 spring gcp 项目。我的first example with GCP bucket工作正常并使用我在属性文件中指出的正确Google帐户: spring.cloud.gcp.cred
场景:存储在 GCP 存储桶中的图像文件需要通过 POST 发送到第三方 REST 端点 问题:这真的是最好的模式吗?有没有更有效、更简洁的方法? 我们有移动应用将图像上传到 GCP 存储桶。当图像上
我正在尝试使用Simba JDBC从本地连接GCP BigQuery,但收到错误。之前我遇到了服务帐户角色权限问题,这些问题已通过为服务帐户添加必要的角色来解决。服务帐户需要角色权限,但我仍收到错误
我的项目有一个依赖项,需要 python v3.6+。因此,它会在通过 pip 在 python 3 内核中安装时抛出错误,因为 AI Platform Notebooks 默认附带 v3.5。如何使
尝试在本地运行“java cloud run hello word sample”Cloud Run:在本地运行 我一直在努力 Enabling GCP auth addon... Failed to
尝试在本地运行“java cloud run hello word sample”Cloud Run:在本地运行 我一直在努力 Enabling GCP auth addon... Failed to
通过在 application.properties 文件中指定文件位置来传递服务帐户 key 文件(从 GCP 控制台生成)似乎很简单。但是,我尝试了以下所有选项: 1. spring.cloud.
我正在尝试从在 Google Cloud 上运行的常规 VM 实例(即 ubuntu-1904)上的私有(private) GCP 容器注册表中提取 docker 容器,但出现以下错误: user@t
我正在使用 zsh,并且我已经安装了 gcloud,以便通过我的 Mac 上的本地终端与 GCP 进行交互。我遇到了这个错误“zsh:找不到匹配项:apache-beam[gcp]”。但是,当我在 G
我有一个 Spring boot 项目,应该使用 spring-cloud-gcp-starter-sql-postgresql 连接 Cloud SQL 实例,以避免在项目中显式使用 IP . 到目
我是一名优秀的程序员,十分优秀!