首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用terraform脚本的pubsub主题和订阅之间的依赖关系

使用terraform脚本的pubsub主题和订阅之间的依赖关系
EN

Stack Overflow用户
提问于 2021-07-21 15:28:10
回答 2查看 129关注 0票数 0

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

代码语言:javascript
复制
  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"
#}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-21 22:17:49

Terraform将尝试按照正确的顺序创建资源,但会回答你的问题,你要寻找的是模块依赖"depends_on“。

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

示例:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2021-07-21 19:54:59

您可以在您的文件系统上创建一个简单的pubsub主题和一个带有此代码片段的订阅(只需为具有足够权限的服务帐户添加.json即可):

代码语言:javascript
复制
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中的主题,您只需使用以下链接:

代码语言:javascript
复制
topic = google_pubsub_topic.TERRAFORM_TOPIC.name

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68465539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档