【问题标题】:How do I run a shell script which is in ec2 instance from lamda step function?如何从 lamda step 函数运行 ec2 实例中的 shell 脚本?
【发布时间】:2019-03-13 18:59:49
【问题描述】:

我创建了一个三步函数 1.创建一个ec2实例 2.生成APK 3.关机

第一个和第三个函数可以正常工作,但是在第二个函数中,我需要运行一个位于 ec2 实例中的 shell 脚本来生成 apk。 那么如何从 step 函数运行这个脚本呢?

【问题讨论】:

  • 脚本从 Lambda 触发这一事实与从 Internet 上的任何位置触发它没有什么不同。您将需要从您的实例中提供一种机制,以允许从外部触发脚本。或者,最好将脚本转换成可以在 Lambda 下运行的东西。
  • 根据文档,我在创建实例时发送带有 shell 脚本的 .txt 文件 instance = EC2.run_instances( ImageId=AMI, InstanceType=INSTANCE_TYPE, KeyName="./automatebuild.pem", MinCount =1, # boto 需要,尽管这很明显。 MaxCount=1, InstanceInitiatedShutdownBehavior='terminate', # make shutdown in script terminate ec2 UserData="./init.txt" ) 创建实例后脚本未执行
  • 在 EC2 控制台中,选择实例,转到实例设置,然后查看/更改用户数据。确认您的 init.txt 文件的内容正在出现。它应该以#! 开头。如果用户数据不存在,您可能需要以不同的方式将其传递给run_instances 命令(而不是通过文件名)。文档实际上声明它需要一个字符串,而不是文件名,因此您的代码需要读取文件的内容并将其传递给该参数。
  • 脚本在做什么?
  • 我已经开发了白标安卓应用,所以当用户点击“提交”按钮时,应该创建 ec2 实例,然后运行一个脚本,该脚本将创建、构建和生成一个 apk,然后关闭机器

标签: amazon-ec2 aws-step-functions


【解决方案1】:

你基本上有两个选择:

  1. 在第 2 步中创建一个 lambda 函数,用于通过 ssh 连接到之前生成的 ec2 实例。但是,如果在调用 lambda 函数时实例没有完全启动,则会出现错误。

  2. 在 ebs 上创建一个新的自定义映像,它会在启动时执行您的脚本。这只会将问题从解决方案 1 推迟到执行关闭命令之前,但如果您放弃使用步进函数的想法,您可以将关闭命令附加到脚本中。

我从未使用过步进函数,但据我了解,它们并非旨在处理高延迟服务,例如 ec2。

【讨论】:

  • 感谢您的回复。我使用的是 boto3,所以您有任何参考代码如何从 step 函数 (python) 进行 ssh
  • 我没有任何示例代码,但我刚刚找到了this
  • 我需要更多帮助...如何在 step 函数中导入 .pem 文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2020-09-29
  • 2016-10-26
相关资源
最近更新 更多