1 简介
Terraform是治理许多平台的基础设施的工具,如AWS、GCP和Azure。这篇文章将解说如何通过Terraform来治理GCP Pub/Sub。
创立GCP我的项目请参考:初始化一个GCP我的项目并用gcloud拜访操作
2 Terraform创立Pub/Sub
2.1 下载Terraform插件
咱们须要装置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
2.2 筹备Terraform代码
须要提供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}
2.3 初始化和变更
指定插件目录初始化:
$ 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: 20enableMessageOrdering: trueexpirationPolicy: ttl: 300000.500slabels: foo: barmessageRetentionDuration: 1200sname: projects/pkslow/subscriptions/pkslow-pocpushConfig: {}retainAckedMessages: trueretryPolicy: maximumBackoff: 600s minimumBackoff: 10stopic: projects/pkslow/topics/pkslow-poc
留神:咱们并没有提供任何明码或密钥,那Terraform怎么能够间接操作我的GCP资源呢?因为它会依据环境变量GOOGLE_APPLICATION_CREDENTIALS来获取。
3 发送和接管音讯
咱们通过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界面上监控对应的队列,非常不便:
4 代码
代码在 GitHub上: https://github.com/LarryDpk/p...