簡體   English   中英

AWS 步驟 Function:檢查 null

[英]AWS Step Function: check for null

步驟 Function 定義如下:

{
  "StartAt": "Decision_Maker",
  "States": {
    "Decision_Maker":{
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.body.MyData",
          "StringEquals": "null", //that doesn't work :(
          "Next": "Run_Task1"
        }],
        "Default": "Run_Task2"
    },
    "Run_Task1": {
      "Type": "Task",
      "Resource": "url_1",
      "Next": "Run_Task2"
    },
    "Run_Task2": {
      "Type": "Task",
      "Resource": "url_2",
      "End": true
    }
  }
}

基本上它是兩個任務之間的選擇。 輸入數據是這樣的:

{
    "body": {
        "prop1": "value1",
        "myData": {
            "otherProp": "value"
        }
    }
}

問題是有時 JSON 中沒有 myData。 所以輸入可能是這樣的:

{
    "body": {
        "prop1": "value1",
        "myData": null
    }
}

如何檢查 myData 是否為 null?

截至 2020 年 8 月,亞馬遜狀態語言現在有一個isNullisPresent選擇規則。 使用這些,您可以本機檢查null或選擇 state 內的 state 輸入中是否存在密鑰。

例子:

{ "Variable": "$.possiblyNullValue", "IsNull": true }

https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-choice-state.html#amazon-states-language-choice-state-rules

順序很重要。 首先設置 " IsPresent": false ,然后設置"IsNull": true ,最后是標量比較。

    "Check MyValue": {
      "Comment": "Check MyValue",
      "Type": "Choice",
      "Default": "ContinueWithMyValue",
      "Choices": [
        {
          "Or": [
            {
              "Variable": "$.MyValue",
              "IsPresent": false
            },
            {
              "Variable": "$.MyValue",
              "IsNull": true
            },
            {
              "Variable": "$.MyValue",
              "BooleanEquals": false
            }
          ],
          "Next": "HaltProcessing"
        },
        {
          "Variable": "$.MyValue",
          "BooleanEquals": true,
          "Next": "ContinueWithMyValue"
        }
      ]
    },

根據我的經驗,選擇類型不能處理空值。 最好的方法可能是在第一個 state 中使用 lambda 預處理您的輸入,並將事件格式化為“null”。 下面的代碼片段可能會有所幫助。

def lambda_handler(event, context):
if event['body']['MyData']:
    return event
else:
    event['body']['MyData']="null"
    return event

注意:這也處理空字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM