我有個問題。我熟悉 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 實作嗎?
uj5u.com熱心網友回復:
您應該從 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 如何在事件通過各種 State 時對其進行操作機器任務。請記住,它被稱為狀態機,因為它“維護任務之間的資料狀態” - 但您可以使用三個 Path 變數來操縱該狀態
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/350306.html
標籤:Python 亚马逊网络服务 aws-lambda aws-step-functions
上一篇:為什么它在本地而不是遠程作業?
