有点背景:
- 有两个用Python编写的Lambda函数,一个创建重复的生产环境,另一个创建开关。
- 需要这个新的环境来验证新的EC2实例(属于新的Autoscaling组(ASG)中的新目标组(TG))可以容纳正常的应用程序。
- 在我确认该应用程序已启动并运行之后,将基于CloudWatch Event触发器自动执行另一个Lambda函数,该函数会进行切换(新的ASG和TG替换了当前的ASG和TG)。
- 负载均衡器与SSL侦听器保持不变。
- 成功完成此操作后,将启动清理过程,删除旧的ASG和TG。
所有这些都可以正常工作。但是,我正在努力如何更新terraform远程状态文件以包含新的ASG和TG信息。
由于这是由Lambda执行的,因此我在Lambda执行中没有terraform存储库(CodeCommit回购),可以在其中进入文件夹并执行terraform导入资源
我能够执行的步骤是:
- 从S3下载远程状态文件
- 通过使用terraform rm状态资源删除旧的ASG和TG资源信息
这时我想执行terraform导入资源resource-id,但是由于我不在terraform文件夹中,因此通常无法从该文件夹运行此命令,因此它找不到tf.state,因此无法执行导入
我尝试过的事情:
- 安装git将存储库克隆到Lambda中的/ tmp /上
- / tmp /最大值为512MB,我的存储库为3GB,所以我不能这样做
- 此外,每次都下载一个庞大的存储库以导入两个资源将是毫无意义的
- 试图通过Python使用有关ASG和TG的所有必填字段来更新远程状态文件,但是我对确切需要更新的内容感到困惑。另外,我相信我会为此创造更多的努力。
有人经历过这样的事情吗?我试图在网上找到与此相关的任何内容,但没有运气。
我敢肯定,现在有人尝试在terraform之外创建一些AWS / Azure / GCP资源,然后导入该资源,但是没有使用terraform代码所在的存储库。或者我是第一个尝试如此大胆的任务的人:)