依次运行2条指令,并根据Python Lambda中的条件执行第二条指令



我需要在Python中的Lambda函数中顺序执行两个任务。但由于执行是异步的,我必须定期检查第一个任务的状态,只有在第一个任务具有可用状态后才运行第二个任务。我没能用下面的代码做到这一点。第二个任务从最后一行开始(create_access_key(。我找到了这个医生:https://docs.aws.amazon.com/lambda/latest/operatorguide/synchronous-waiting.html但我不想使用第二个Lambda函数来执行第二个简单任务。

if e.response["Error"]["Code"] == "NoSuchEntity":
client_sc = boto3.client('servicecatalog')
create_user = client_sc.provision_product(
ProductId='prod-9g59999d2djkg',
ProvisionedProductName='Create_User',
ProvisioningArtifactName='v1.1.002',
ProvisioningParameters=[
{
'Key':'iamUserName',
'Value':useriam
},
]
)
get_status = client_sc.describe_provisioned_product(Id=pp_id)
status = status['ProvisionedProductDetail']['Status']
print (status)
while describe_status != 'AVAILABLE':
time.sleep(20)
if describe_status == 'AVAILABLE':
create_access_key = client_iam.create_access_key(UserName=useriam) #second task

在AWS CLI将wait命令添加到各种服务之前,您所做的几乎与bash脚本中试图创建CLI调用序列所使用的模式完全相同。原始轮询。

中记录的Boto3中存在waiters

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/clients.html

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/servicecatalog.html#ServiceCatalog.Client.get_waiter

但是ServiceCatalog客户端没有现成的:

import boto3
# boto3.__version__ = '1.24.43'
sc = boto3.client('servicecatalog')
sc.waiter_names
[]

因此,滚动您自己的(就像您在示例代码中所做的那样(可能是最好的选择。

我知道你不想添加第二个lambda函数,但也许Step函数是一个有用的替代方案?

这个lambda是否被点击web ui中的按钮的人调用,因此需要返回一个完成的结果?如果没有,也许有可能将其视为一系列事件和信息?

最新更新