【问题标题】:Update terraform resource after provisioning配置后更新 terraform 资源
【发布时间】:2021-03-03 12:17:25
【问题描述】:

所以我最近问了一个关于how to provision instances that depend on each other 的问题。我得到的答案是我可以实例化这 3 个实例,然后有一个 null resource 和一个 remote-exec 配置器来更新每个实例。

它工作得很好,除了为了工作我的实例需要配置为允许 ssh。由于它们位于私有子网中,我首先需要在公共实例中允许 ssh,然后引导我的 3 个实例。此引导操作需要在引导完成后真正不需要的 4 个实例上允许 ssh。这还不错,因为我仍然可以将流量限制在已知 ip/子网,但我仍然认为值得询问是否有一些方法可以避免这个问题。

我可以在单个 terraform 计划中更新正在运行的实例的安全组吗?示例:使用 security_group X 实例化 3 个实例,通过 ssh 配置它们,然后使用 security_group Y 更新实例,从而禁止使用 ssh。如果是这样,怎么做?如果没有,是否有其他解决此问题的方法?

谢谢。

【问题讨论】:

  • 你能用run command替换ssh吗?这是做这些事情的正确方法,它不需要任何互联网连接,只要您的实例可以由 ssm 管理。
  • 我从未使用过 ssm,所以它对我来说有点新,但快速阅读它似乎确实可行。如果我理解正确,我会将remote-exec 替换为local-exec,然后使用aws-cli 直接引导实例?如果是这样,我认为这对我的用例来说是完美的!
  • 是的,因为 terraform 不支持运行命令。或者,您可以使用 aws_lambda_invocation 通过 lambda 调用它,以将所有内容保存在 aws。
  • 再次感谢您的帮助 :) 我明天会测试这两个选项,但我很有信心它们会起作用!我会及时通知你
  • 没问题。如果您不介意,我会提供更多信息的答案。

标签: amazon-web-services terraform terraform-provider-aws


【解决方案1】:

基于 cmets。

您可以使用AWS Systems Manager Run Command,而不是ssh

AWS Systems Manager Run Command 可让您远程安全地管理托管实例的配置。 Run Command 使您能够自动执行常见管理任务并大规模执行临时配置更改。

这需要让 AWS Systems Manager (SSM) 识别您的实例,这需要三件事:

  • 到 SSM 服务的网络连接。由于您的实例位于私有子网中,因此它们必须使用 NAT 网关或 VPC interface endpoints for SSM 连接到 SSM 服务。
  • SSM 代理已安装并正在运行。这通常不是问题,因为 AWS 上的大多数官方 AMI 已经设置好了。
  • 具有AmazonSSMManagedInstanceCore AWS 托管策略的实例角色。

由于 run-command 是 not supported by terraform,您要么必须使用 local-exec 通过 AWS CLI 运行命令,要么通过 lambda 函数使用 aws_lambda_invocation

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2019-11-17
    • 2017-11-11
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2021-07-30
    • 2021-07-05
    相关资源
    最近更新 更多