【问题标题】:Dependency between pubsub topic and subscription using terraform script使用 terraform 脚本的 pubsub 主题和订阅之间的依赖关系
【发布时间】:2021-09-28 14:17:37
【问题描述】:

我正在使用一个 terraform 脚本来创建 pub 子主题和订阅。如果订阅需要订阅由同一脚本创建的主题,有没有办法创建一个依赖项,以便 terraform 仅在创建主题后才尝试创建 pub/sub 订阅? 我的主文件如下所示:

  version = ""

  project = var.project_id
  region  = var.region
  zone    = var.zone
}
    
# module "Dataflow" {
 #source = "../modules/cloud-dataflow"
#} 

module "PubSubTopic" {
 source = "../modules/pubsub_topic"
}

#module "PubSubSubscription" {
# source = "../modules/pubsub_subscription"
#}

#module "CloudFunction" {
# source = "../modules/cloud-function"
#}


【问题讨论】:

  • ../modules/pubsub_topic 和 ../pubsub_subscription 里面有什么?

标签: google-cloud-platform publish-subscribe google-cloud-pubsub terraform-provider-gcp


【解决方案1】:

Terraform 将尝试按照正确的顺序创建资源,但会回答您的问题以及您要查找的是模块依赖项“depends_on”。

例如,订阅模块只有在主题资源创建后才会创建。这样你应该在订阅模块上添加depends_on。

例子:

resource "aws_iam_policy_attachment" "example" {
  name       = "example"
  roles      = [aws_iam_role.example.name]
  policy_arn = aws_iam_policy.example.arn
}

module "uses-role" {
  # ...

  depends_on = [aws_iam_policy_attachment.example]
}

官方文档:https://www.terraform.io/docs/language/meta-arguments/depends_on.html

【讨论】:

    【解决方案2】:

    您可以在您的文件系统上使用这个 sn-p 创建一个简单的 pubsub 主题和订阅(只需为具有足够权限的服务帐户添加 .json):

    provider "google" {
      credentials = "${file("account.json")}" # Or use GOOGLE_APPLICATION_CREDENTIALS
      project     = "__your_project_id__"
      region      = "europe-west4" # Amsterdam
    }
    
    resource "google_pubsub_topic" "incoming_data" {
      name = "incoming-data"
    }
    
    resource "google_pubsub_subscription" "incoming_subs" {
      name = "Subscription_for_incoming_data"
      topic =  google_pubsub_topic.incoming_data.name
    
      # Time since Pubsub receives a message  to deletion.
      expiration_policy {
        ttl = "300000s"
      }
    
      # Time from client reception to ACK
      message_retention_duration = "1200s"
      retain_acked_messages      = false
      enable_message_ordering    = false
    }
    

    要将订阅与 terraform 中的主题链接,您只需将其链接到:

    topic = google_pubsub_topic.TERRAFORM_TOPIC.name
    

    请注意 Google 对主题和订阅标识符的要求。如果它们无效,terraform plan 将通过,但您将获得 Error 400 : You have passed an invalid argument to the service

    【讨论】:

      猜你喜欢
      • 2016-02-21
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2020-09-18
      相关资源
      最近更新 更多