簡體   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