Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Lambda python脚本将现有aws资源导入terraform远程状态_Python_Git_Amazon Web Services_Aws Lambda_Terraform - Fatal编程技术网

如何使用Lambda python脚本将现有aws资源导入terraform远程状态

如何使用Lambda python脚本将现有aws资源导入terraform远程状态,python,git,amazon-web-services,aws-lambda,terraform,Python,Git,Amazon Web Services,Aws Lambda,Terraform,有点背景: 有两个用Python编写的Lambda函数,一个创建重复的生产环境,另一个创建切换 需要这个新的env来验证新的EC2实例(属于新的自动缩放组(ASG)中的新目标组(TG))是否可以容纳健康的应用程序 在我验证应用程序是否已启动并运行后,另一个Lambda函数将根据CloudWatch事件触发器自动执行,该触发器执行切换(新的ASG和TG替换当前的ASG和TG) 负载平衡器与SSL侦听器保持相同 成功完成后,启动清理过程,移除现在的旧ASG和TG 所有这些工作都没有任何问题。然而

有点背景:

  • 有两个用Python编写的Lambda函数,一个创建重复的生产环境,另一个创建切换
  • 需要这个新的env来验证新的EC2实例(属于新的自动缩放组(ASG)中的新目标组(TG))是否可以容纳健康的应用程序
  • 在我验证应用程序是否已启动并运行后,另一个Lambda函数将根据CloudWatch事件触发器自动执行,该触发器执行切换(新的ASG和TG替换当前的ASG和TG)
  • 负载平衡器与SSL侦听器保持相同
  • 成功完成后,启动清理过程,移除现在的旧ASG和TG
所有这些工作都没有任何问题。然而,我正在努力更新terraform远程状态文件,以包含新的ASG和TG信息。 因为这是由Lambda执行的,所以我在Lambda执行中没有terraform存储库(CodeCommit repo),在那里我可以进入文件夹并执行terraform导入资源

我能做的步骤是:

  • 从S3下载远程状态文件
  • 使用terraform rm state资源删除旧的ASG和TG资源信息
  • 此时,我希望执行terraform导入资源id,但由于我不在terraform文件夹中(我通常从该文件夹运行此命令),因此它找不到tf.state,因此无法执行导入

    我所尝试的:

    • 安装git将repo克隆到Lambda中的/tmp/上
      • /tmp/max是512MB,我的回购协议是3GB,所以很遗憾我不能这么做
      • 而且,每次下载一个巨大的回购协议只是为了导入两个资源,这也有点毫无意义
    • 试图通过Python更新远程状态文件,其中包含关于ASG和TG的所有必要字段,但我对需要更新的内容感到困惑。而且,我相信我会用这个来创造更多的困难
    有没有人经历过这样的事情?我曾试图在网上找到与此相关的任何东西,但没有成功。 我确信现在有人试图在terraform之外创建一些AWS/Azure/GCP资源,然后导入此资源,但不是使用terraform代码所在的存储库。或者我是第一个尝试这样大胆任务的人:)