Bon*_*ond 5 amazon-web-services terraform
我正在尝试使用 terraform 订阅 Aws AmazonIpSpaceChanged SNS 主题。但是,我不断收到以下错误
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}"
}
Run Code Online (Sandbox Code Playgroud)
错误:
* 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
Run Code Online (Sandbox Code Playgroud)
我使用 aws cli 尝试了同样的方法,但当我没有包含选项 --region us-east-1 时,它第一次失败了。但是一旦包含在内,它就可以很好地订阅。
有任何想法吗?
您的 topic_arn 被硬编码到 Region us-east-1
:
arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged
Run Code Online (Sandbox Code Playgroud)
因此,当您具有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}"
}
Run Code Online (Sandbox Code Playgroud)
这样,您应该可以更灵活地在其他区域和其他 aws 账户中运行它。
归档时间: |
|
查看次数: |
1408 次 |
最近记录: |