如何在aws中使用函数迭代器
How to use function iterator in aws
我有问题。我在 AWS 服务生态系统中广为人知。
我实际上想创建一个带有选择属性的阶跃函数。但是,我想根据我得到的值迭代 python 字典。
这是代码:
"getAssociatedAction":{
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"InputPath": "$.preprodResult",
"ResultPath": "$.dwResult",
"Next": "Insert update or delete"
},
"Insert update or delete":{
"Type": "Choice",
"Choices": [
{
"Variable": "$.dwResult.Payload",
"StringEquals": "insert",
"Next": "insert customer"
},
{
"Variable": "$.dwResult.Payload",
"StringEquals": "update",
"Next": "update customer"
},
{
"Variable": "$.dwResult.Payload",
"StringEquals": "delete",
"Next": "Delete customer"
}
]
},
"insert customer":{
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"InputPath": "",
"OutputPath": "",
"ResultPath": "$",
"End": true
},
def lambda_handler(event, context):
objects_list = getActionData(db_connection_dw)
for key, value in objects_list.items():
if value == 'insert':
action = "action"
return loads(json.dumps(action), object_hook=as_python_object)
elif value == 'update':
action = "update"
return loads(json.dumps(action), object_hook=as_python_object)
elif value == 'delete':
action = "delete"
return loads(json.dumps(action), object_hook=as_python_object)
这对 AWS Lambda 可行吗?
您应该从您的 lambda 任务中删除“InputPath”属性
这样做会导致传递到选择状态的事件(具有 $.dwResult
的键和 Payload
的子键)作为传入事件的一部分到您的 lambda。然后你可以用那个钥匙做任何你想做的事。 event['dwResult']['Payload]
您在这里过度设计了阶跃函数。如果它们都将以相同的 lambda 结束并且再次决定您在代码中对其进行的操作,则没有理由执行选择状态。选择任务的全部意义在于引导不同的路径与不同的任务相关联。您可以有 3 个不同的 lambda,一个用于您正在检查的每个操作,并且它们只有该给定操作的代码。这在首先要为给定操作执行大量任务并保持结构更干净的场景中很有用。如果任务只是针对每个操作的简单的一两行任务,那么它的工程量远远超过您的场景所需。
我建议研究 https://docs.aws.amazon.com/step-functions/latest/dg/input-output-example.html InputPath、ResultPath 和 OutputPath 在事件通过各种状态机任务时如何操纵事件。请记住,它之所以称为状态机,是因为它 'maintains the state of data between tasks' - 但您可以使用三个路径变量
来操纵该状态
我有问题。我在 AWS 服务生态系统中广为人知。 我实际上想创建一个带有选择属性的阶跃函数。但是,我想根据我得到的值迭代 python 字典。 这是代码:
"getAssociatedAction":{
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"InputPath": "$.preprodResult",
"ResultPath": "$.dwResult",
"Next": "Insert update or delete"
},
"Insert update or delete":{
"Type": "Choice",
"Choices": [
{
"Variable": "$.dwResult.Payload",
"StringEquals": "insert",
"Next": "insert customer"
},
{
"Variable": "$.dwResult.Payload",
"StringEquals": "update",
"Next": "update customer"
},
{
"Variable": "$.dwResult.Payload",
"StringEquals": "delete",
"Next": "Delete customer"
}
]
},
"insert customer":{
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"InputPath": "",
"OutputPath": "",
"ResultPath": "$",
"End": true
},
def lambda_handler(event, context):
objects_list = getActionData(db_connection_dw)
for key, value in objects_list.items():
if value == 'insert':
action = "action"
return loads(json.dumps(action), object_hook=as_python_object)
elif value == 'update':
action = "update"
return loads(json.dumps(action), object_hook=as_python_object)
elif value == 'delete':
action = "delete"
return loads(json.dumps(action), object_hook=as_python_object)
您应该从您的 lambda 任务中删除“InputPath”属性
这样做会导致传递到选择状态的事件(具有 $.dwResult
的键和 Payload
的子键)作为传入事件的一部分到您的 lambda。然后你可以用那个钥匙做任何你想做的事。 event['dwResult']['Payload]
您在这里过度设计了阶跃函数。如果它们都将以相同的 lambda 结束并且再次决定您在代码中对其进行的操作,则没有理由执行选择状态。选择任务的全部意义在于引导不同的路径与不同的任务相关联。您可以有 3 个不同的 lambda,一个用于您正在检查的每个操作,并且它们只有该给定操作的代码。这在首先要为给定操作执行大量任务并保持结构更干净的场景中很有用。如果任务只是针对每个操作的简单的一两行任务,那么它的工程量远远超过您的场景所需。
我建议研究 https://docs.aws.amazon.com/step-functions/latest/dg/input-output-example.html InputPath、ResultPath 和 OutputPath 在事件通过各种状态机任务时如何操纵事件。请记住,它之所以称为状态机,是因为它 'maintains the state of data between tasks' - 但您可以使用三个路径变量
来操纵该状态