繁体   English   中英

如何等到EC2(在Lambda中创建)2/2状态检查在Python中使用Boto3和从Shell脚本调用Lambda函数通过

[英]How to wait untill EC2 (created in Lambda) 2/2 status check is passed in Python using Boto3 and Calling Lambda function from Shell script

我正在执行的用例是:

  1. 创建EC2实例
  2. 在那之后,直到该EC2实例启动并运行
  3. 通过在EC2实例中运行Shell脚本来部署构建
  4. 从shell脚本获取成功响应
  5. 终止实例
  6. 在实例终止并且运行shell脚本的响应是成功代码之后,我需要在Jenkins中运行不同的管道,这反过来又将调用创建EC2实例,依此类推。

等待的主要目的是:

  1. 如果我的lambda函数退出而不执行完整的代码,则将不会部署Build,并且将运行下一个jenkins管道(第6步),直到成功完成第一个部署,我才不需要这样做。
  2. 如果构建部署(第3步)中存在任何错误,它应该返回该错误,并且不应该运行我无法处理的下一个管道,因为在EC2实例运行之前就已很好地返回了响应代码。

我从外壳程序脚本(shellScript.sh)调用Lambda函数,并且要调用的命令在以下代码中,该代码来自AWS文档。

在Lambda函数中,我具有以下python代码,首先创建EC2实例,然后检测EC2是否正在运行以及2/2状态检查,但是当“实例状态”显示为运行时,它退出并向shell脚本返回200成功代码( Lambda仍会继续运行其他命令(此处未提及,并且EC2状态处于“初始化”状态)。

在EC2“状态检查”显示“通过2/2检查”之前,应该使用哪个API函数阻止? (我不希望我的Lambda函数退出,直到状态显示通过2/2检查为止。)

注意:打印响应的状态为“ ok”

我参考了下面的堆栈溢出链接并尝试了这些选项(如下面的代码所示),但对我而言不起作用。

如何阻止直到使用Python Boto3通过EC2状态检查?

ShellScript.sh:

aws lambda invoke --invocation-type RequestResponse --function-name <my-function-name> --payload '{"Key": "'$value'"}' /dev/stdout

Lambda_function.py:

    instance = EC2.run_instances(
        ImageId=<image-id>,
        InstanceType=<instance-type>,
        MinCount=1, 
        MaxCount=1,
        .......
    )
    instance_id = instance['Instances'][0]['InstanceId']
    ec2instance = ec2.Instance(id=instance_id)
    ec2instance.wait_until_running()
    waiter = EC2.get_waiter('instance_status_ok')
    waiter.wait(
        InstanceIds=[instance_id],
        WaiterConfig={
            'Delay': 15,
            'MaxAttempts': 40
        },
        IncludeAllInstances = True
    )
    response = EC2.describe_instance_status(
        InstanceIds=[instance_id],
        IncludeAllInstances=True
    )
    print(response)

boto3 wait_until_running无法正常工作

@ UNH实习生,

尝试附件中的链接,看看是否对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM