Terraform 如何将aws提供程序凭据传递给null_资源本地执行提供程序?

Terraform 如何将aws提供程序凭据传递给null_资源本地执行提供程序?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,有没有人想出一个像样的方法 简而言之,您有一个提供程序“aws”,通过env vars或profile配置,有或没有sts,这无关紧要。也许你有几个 现在您需要调用awscli,因为aws提供程序中没有很好地实现某些功能。在我的例子中,我需要生成一些敏感信息,并将其直接上传到一个S3存储桶中,而我不希望这些信息出现在状态文件中。在任何情况下,它都是s3sync,因此动作是幂等的 但是,似乎无法将提供者凭据(永久、环境变量、配置文件到临时sts)传递到null\u资源子句: provider "a

有没有人想出一个像样的方法

简而言之,您有一个
提供程序“aws”
,通过env vars或profile配置,有或没有
sts
,这无关紧要。也许你有几个

现在您需要调用
aws
cli,因为aws提供程序中没有很好地实现某些功能。在我的例子中,我需要生成一些敏感信息,并将其直接上传到一个S3存储桶中,而我不希望这些信息出现在状态文件中。在任何情况下,它都是
s3sync
,因此动作是幂等的

但是,似乎无法将提供者凭据(永久、环境变量、配置文件到临时sts)传递到
null\u资源
子句:

provider "aws" {
  # set using explicit setting or profile or however
  alias = "myaws"
}

resource "null_resource" "cli" {
  provisioner "local-exec" {
    command = "aws <do something>"
    environment {
      # happy to pass AWS_PROFILE or AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY here...
      # if there were a way to retrieve it from the "myaws" provider
    }
  }
}
提供程序“aws”{
#使用显式设置或配置文件或
alias=“myaws”
}
资源“null_”资源“cli”{
供应人“本地执行官”{
command=“aws”
环境{
#很高兴在此传递AWS\u配置文件或AWS\u访问密钥\u ID/AWS\u机密\u访问密钥。。。
#如果有办法从“myaws”提供程序检索它
}
}
}

Python+boto3可能比AWS CLI更好地满足您的需要。或者我需要一个剧本。或者其他二进制文件。上述任何一项仍然需要一个null_资源本地exec,它具有相同的提供程序凭据传递问题。您如何获取AWS提供程序的凭据?你扮演一个角色吗?如果是这样的话,为什么不通过AWS CLI来承担这个角色呢?@deitch No Python+Boto3不会有这个问题,因为它具有对凭据的内在支持,因此不会从Terraform传递。CLI也有,就像大多数SDK一样。在tf中,我可能直接传递了cred,可能通过env vars使用了cred,可能使用了profile,可能承担了角色,可能有多组cred/角色。tf中aws资源的美妙之处在于,没有人需要知道,它只需要获得正确的信誉就可以采取行动。外部子命令也应该能够执行同样的操作。