2017-09-29 38 views
1

我正在尝试使用terraform订阅Aws AmazonIpSpaceChanged SNS主题。不过,我不断收到以下错误使用terraform订阅AmazonIpSpaceChanged的SNS主题

SNS主题订阅AWS

resource "aws_sns_topic_subscription" "aws_ip_change_sns_subscription" { 
    topic_arn = "arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged" 
    protocol = "lambda" 
    endpoint = "${aws_lambda_function.test_sg_lambda_function.arn}" 
} 

错误:

* module.test-lambda.aws_sns_topic_subscription.aws_ip_change_sns_subscription: 1 error(s) occurred: 

* aws_sns_topic_subscription.aws_ip_change_sns_subscription: Error creating SNS topic: InvalidParameter: Invalid parameter: TopicArn 
     status code: 400, request id: 3daa2940-8d4b-5fd8-86e7-7b074a16ada9 

我尝试同样使用AWS CLI和它第一次失败时,我没有”包括选项 - 地区我们东1。但一旦包含它,它就可以认购。

任何想法?

回答

0

你topic_arn是硬编码到区域us-east-1

arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged 

所以,当你有AWS_DEFAULT_REGION或类似的配置,并点到另一个区域,你的代码将失败。

这就是如果你提名该地区的原因,代码运行良好。

为了避免会有限制,如地区,帐户ID,你可以这样做:

data "aws_caller_identity" "current" {} 

variable "region" { 
    type = "string" 
    default = "us-east-1" 
} 

resource "aws_sns_topic_subscription" "aws_ip_change_sns_subscription" { 
    topic_arn = "arn:aws:sns:${var.region}:${data.aws_caller_identity.current.account_id}:AmazonIpSpaceChanged" 
    protocol = "lambda" 
    endpoint = "${aws_lambda_function.test_sg_lambda_function.arn}" 
} 

就这样,你应该罚款,更灵活地在其他地区和其他AWS帐号以及运行它。

+0

你是对的。如果我在我们东1运行terraform代码,它运行良好。理想情况下,情况并非如此,地形应该有办法解决这个问题。谢谢。 – Bond

+0

我更新了答案,现在这对你有意义吗? – BMW

+0

谢谢@宝马。问题在于SNS主题是亚马逊可用于订阅IP更改的唯一主题。 AFAIK,其他地区没有其他话题。 – Bond