使用terraform订阅AmazonIpSpaceChanged的SNS主题
问题描述:
我正在尝试使用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。但一旦包含它,它就可以认购。
任何想法?
答
你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帐号以及运行它。
你是对的。如果我在我们东1运行terraform代码,它运行良好。理想情况下,情况并非如此,地形应该有办法解决这个问题。谢谢。 – Bond
我更新了答案,现在这对你有意义吗? – BMW
谢谢@宝马。问题在于SNS主题是亚马逊可用于订阅IP更改的唯一主题。 AFAIK,其他地区没有其他话题。 – Bond