AWS CLI 命令似乎无法在 Terraform 中运行

问题描述 投票:0回答:1

现在已经被困在这个问题上无数个小时了。

这个命令通过终端对我来说效果非常好:

aws ssm get-parameter --name "/something/i/know/exists" --query "Parameter.Value" --output text

输出:

subnet-whatIwouldExpect

但是将其设置为 Terraform 内的变量则完全是另一回事。

(我一直很高兴使用 Terraform 计划/应用/销毁等)

data "external" "ssm_parameter_value" {
  program = ["bash", "-c", <<-EOF
    result=$(aws ssm get-parameter --name "/something/i/know/exists" --query "Parameter.Value" --output text)
    echo "{\"result\": \"$result\"}"
  EOF
  ]
}

output "ssm_parameter_result" {
  value = data.external.ssm_parameter_value.result
}

当我尝试terraform刷新时,我得到:

ssm_parameter_result = tomap({
  "result" = ""
})

这非常令人沮丧,我不知道我做错了什么。

这是我的整个文件:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.34.0"
    }
  }
  
  required_version = ">= 0.14.9"
}

provider "aws" {
  region = "eu-west-2"
  default_tags {
    tags = local.common_tags
  }
}

data "aws_caller_identity" "current" {}

data "aws_region" "current" {}

# Execute AWS CLI command to get SSM parameter value
data "external" "ssm_parameter_value" {
  program = ["bash", "-c", <<-EOF
    result=$(aws ssm get-parameter --name "/something/i/know/exists" --query "Parameter.Value" --output text)
    echo "{\"result\": \"$result\"}"
  EOF
  ]
}

output "ssm_parameter_result" {
  value = data.external.ssm_parameter_value.result
}
amazon-web-services terraform aws-cli
1个回答
0
投票

没有理由只是为了在 Terraform 代码中查找 SSM 参数值而使用命令行并使用 AWS CLI 工具。这是一种非常复杂且容易出错的获取值的方法。

只需将您的

data "external" "ssm_parameter_value"
替换为以下内容:

data "aws_ssm_parameter" "my_parameter" {
  name = "/something/i/know/exists"
}

然后用

aws_ssm_parameter.my_parameter.value
引用该值,例如:

output "ssm_parameter_result" {
  value = aws_ssm_parameter.my_parameter.value
}
© www.soinside.com 2019 - 2024. All rights reserved.