为什么我的 AWS Lambda 函数不等待 SSM 发送命令(在 EC2 上远程运行 Shell 脚本)完成?

Why my AWS Lambda function doesn't wait for SSM Send Command (which runs Shell script remotely on EC2) to complete?

我在 Lambda 函数中有以下 python 代码:

print("Executing shell script-")
response = ssm_client.send_command(
    InstanceIds=ec2_instance,
    DocumentName="AWS-RunShellScript",
    Parameters={
        "commands": [f"sh /bin/test/publishImage.sh -c {ecr} -r {ecr_repo} -r {region} -e {environment}"]
    },
    OutputS3BucketName="deploymentlogs",
    OutputS3Region=region
)
print("Done - Executing shell script.")

并且当 Lambda returns 立即执行时,状态代码为 200,只需几秒钟,而 publishImage.sh 脚本需要大约 3 分钟才能完成执行。

我希望 Lambda 在 publishImage.sh 脚本完成执行后 return,无论成功或失败。

我怎样才能做到这一点?请帮忙

谢谢

这是预料之中的,因为 send_command 不会等待远程主机上的命令完成。

如果您希望 lambda 函数等到 shell 脚本完成 运行,您将需要实施某种等待逻辑来检查命令的状态。您可以使用 get_command_invocation 函数检查远程命令执行的状态。