配置后更新 Terraform 资源

Update terraform resource after provisioning

所以我最近问了一个关于 的问题。我得到的答案是我可以实例化 3 个实例,然后有一个 null resource 和一个 remote-exec 供应商来更新每个实例。

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

我可以在单个 Terraform 计划中更新 运行 个实例的安全组吗?示例:使用 security_group X 实例化 3 个实例,通过 ssh 提供它们,然后使用 security_group Y 更新实例,从而禁止 ssh。如果是这样,如何?如果没有,这个问题还有其他解决办法吗?

谢谢。

根据评论。

您可以使用 AWS Systems Manager Run Command:

而不是 ssh

AWS Systems Manager Run Command lets you remotely and securely manage the configuration of your managed instances. Run Command enables you to automate common administrative tasks and perform ad hoc configuration changes at scale.

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

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

因为 运行-命令是 not supported by terraform, you either have to use local-exec to run the command through AWS CLI, or through lambda function using aws_lambda_invocation