如何使用Lambda python脚本将已经存在的AWS资源导入terraform远程状态

时间:2020-09-03 14:28:14

标签: python git amazon-web-services aws-lambda terraform

有点背景:

  • 有两个用Python编写的Lambda函数,一个创建重复的生产环境,另一个创建开关。
  • 需要这个新的环境来验证新的EC2实例(属于新的Autoscaling组(ASG)中的新目标组(TG))可以容纳正常的应用程序。
  • 在我确认该应用程序已启动并运行之后,将基于CloudWatch Event触发器自动执行另一个Lambda函数,该函数会进行切换(新的ASG和TG替换了当前的ASG和TG)。
  • 负载均衡器与SSL侦听器保持不变。
  • 成功完成此操作后,将启动清理过程,删除旧的ASG和TG。

所有这些都可以正常工作。但是,我正在努力如何更新terraform远程状态文件以包含新的ASG和TG信息。 由于这是由Lambda执行的,因此我在Lambda执行中没有terraform存储库(CodeCommit回购),可以在其中进入文件夹并执行terraform导入资源

我能够执行的步骤是:

  1. 从S3下载远程状态文件
  2. 通过使用terraform rm状态资源删除旧的ASG和TG资源信息

这时我想执行terraform导入资源resource-id,但是由于我不在terraform文件夹中,因此通常无法从该文件夹运行此命令,因此它找不到tf.state,因此无法执行导入

我尝试过的事情:

  • 安装git将存储库克隆到Lambda中的/ tmp /上
    • / tmp /最大值为512MB,我的存储库为3GB,所以我不能这样做
    • 此外,每次都下载一个庞大的存储库以导入两个资源将是毫无意义的
  • 试图通过Python使用有关ASG和TG的所有必填字段来更新远程状态文件,但是我对确切需要更新的内容感到困惑。另外,我相信我会为此创造更多的努力。

有人经历过这样的事情吗?我试图在网上找到与此相关的任何内容,但没有运气。 我敢肯定,现在有人尝试在terraform之外创建一些AWS / Azure / GCP资源,然后导入该资源,但是没有使用terraform代码所在的存储库。或者我是第一个尝试如此大胆的任务的人:)

0 个答案:

没有答案