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...