【问题标题】:How to have multiple providers dependent upon environment?如何让多个提供者依赖于环境?
【发布时间】:2019-04-20 04:25:13
【问题描述】:

我有两种不同的 AWS 配置。在开发笔记本电脑上,开发人员在 shared_credentials_file 内使用 mfa-secured profile

在 jenkins 上,我们导出环境变量,然后承担角色。

这意味着提供程序块看起来非常不同。在根级别,它们共享相同的backend.tf

我知道我可以使用不同的提供程序拥有两个不同的根,但是有没有办法让我不必复制 backend.tf 和其他根文件?

【问题讨论】:

  • 为什么不在运行 terraform 之前创建一个与 jenkins 机器同名的配置文件。这样您就不必更改地形代码。 aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID --profile $PROFILE_NAME aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY --profile $PROFILE_NAME aws configure set aws_session_token $AWS_SESSION_TOKEN --profile $PROFILE_NAME
  • 提供者别名有帮助吗?

标签: terraform terraform-provider-aws


【解决方案1】:

我理解你的意思,但不建议这样做。在运行 terraform 命令之前,使用系统环境变量进行 aws 配置。

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN (optional)
AWS_DEFAULT_REGION
AWS_DEFAULT_PROFILE (optional)

https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html

【讨论】:

  • 我已经在 jenkins 上使用了 env vars,但不是在本地,因为在自动化中我们扮演一个角色,而在本地我们使用开发者的 creds 文件。此外,出于安全原因,开发人员必须在每次运行后导出凭据并取消设置,因为 env var 凭据的优先级将取代特权较低的服务使用的其他身份验证方式。我想我们也可以让开发人员担任这个角色,但我们也使用 mfa,这将是一个需要每个人都参与的流程变更
【解决方案2】:

我认为最有意义的解决方案是将本地开发人员和 jenkins 自动化放在两个单独的环境目录中,每个目录都有自己的 aws.tf 和后端工作区。

这是有道理的,因为开发人员不应该弄乱自动化创建的资源,对 jenkins 后端的任何操作都应该由 jenkins 完成,否则开发人员可能会覆盖 jenkins 放置的资源,反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2018-07-03
    • 2019-06-07
    相关资源
    最近更新 更多