æ¬èšäºã¯ã2024 幎 11 æ 22 æ¥ã«å
¬éããã â Simplifying developer experience with variables and JSONata in AWS Ste⊠âã翻蚳ãããã®ã§ãã ãã®æçš¿ã¯ãUma Ramadoss (ãµãŒããŒã¬ã¹æ
åœ Principal Specialist SA) ãš Dhiraj Mahapatro ( Amazon Bedrock æ
åœ Principal Specialist SA) ã«ãã£ãŠå·çããããã®ã§ãã AWS Step Functions ã«ãããŠã倿°ãš JSONata ããŒã¿å€æãå°å
¥ãããŸããã倿°ã«ãããéçºè
㯠1 ã€ã®ã¹ããŒãã§ããŒã¿ãå²ãåœãŠããã®åŸã®ã¹ãããã§åç
§ã§ããããã«ãªããè€æ°ã®äžéã¹ããŒããçµç±ããŠããŒã¿ãåãæž¡ãå¿
èŠããªããªã£ããããã¹ããŒãã®ãã€ããŒã管çãç°¡çŽ ã«ãªããŸãããªãŒãã³ãœãŒã¹ã®ã¯ãšãªããã³å€æèšèªã§ãã JSONata ã«ãããæ¥ä»ãšæå»ã®æžåŒèšå®ãæ°åŠçæŒç®ãªã©ã®é«åºŠãªããŒã¿æäœãšå€æã§ããããã«ãªããŸããã ãã®èšäºã§ã¯ããããã®æ°æ©èœã®åŒ·åãªæ©èœã«ã€ããŠè©³ãã説æããŸããå
·äœçã«ã¯ã倿°ã䜿çšããã¹ããŒãéã®ããŒã¿å
±æãç°¡çŽ ã«ããæ¹æ³ãšãé«åºŠãª JSONata åŒã«ããããŒã¿æäœã®è€éãã軜æžããæ¹æ³ã«ã€ããŠæ·±ãæãäžããŠãããŸãã æŠèŠ ã客æ§ã¯ã AWS Lambda ã AWS Fargate ã Amazon Bedrock ãHTTP API çµ±åãªã©ãè€æ°ã®ãµãŒãã¹ãå«ãè€éãªã¯ãŒã¯ãããŒãæ§ç¯ããããã« Step Functions ãå©çšããŸãã ãããã®ã¯ãŒã¯ãããŒã®äžã§ãããŸããŸãªãµãŒãã¹ãšããåãããããã®ã¹ããŒããæ§ç¯ããå
¥åããŒã¿ãæž¡ããåºåãšããŠã¬ã¹ãã³ã¹ãåãåããŸãã Step Functions èªäœã®æ©èœãè¶
ãããæ¥ä»ãæå»ãæ°å€ã®æäœã«ã¯ Lambda 颿°ã䜿çšã§ããŸããããã®æ¹æ³ã§ã¯è€éã«ãªãã«ã€ããŠããã€ããŒãã®å¶éãããŒã¿å€æã®æéããããªãã¹ããŒã倿Žãªã©ã®èª²é¡ãçããŸãã ããã¯ããœãªã¥ãŒã·ã§ã³å
šäœã®ã³ã¹ãã«åœ±é¿ãäžããŸãã ãã®åé¡ã«å¯ŸåŠããããã«ã倿°ãš JSONata ã䜿çšããŸãã ãããã®æ°æ©èœã説æããããã«ã JSONPath ããã° ã§åãäžããä¿éºæ¥çã®é¡§å®¢ãªã³ããŒãã£ã³ã°ããã»ã¹ã®ãŠãŒã¹ã±ãŒã¹ãèããŠã¿ãŸãããã æœåšé¡§å®¢ã¯ããµã€ã³ã¢ããæã«ååãäœæãä¿éºãžã®é¢å¿äºé
ãªã©ã®åºæ¬æ
å ±ãæäŸããŸãã ãã® Know-Your-Customer (KYC) ããã»ã¹ã§ã¯ããããã®è©³çŽ°ãªæ
å ±ãå«ããã€ããŒããšãšãã« Step Functions ã¯ãŒã¯ãããŒãéå§ãããŸãã ã¯ãŒã¯ãããŒã§ã¯ãé¡§å®¢ã®æ¿èªãŸãã¯æåŠã倿ããéç¥ããŸãã { "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ {"category": "home", "type": "own", "yearBuilt": 2004, "estimatedValue": 800000}, {"category": "auto", "type": "car", "yearBuilt": 2012, "estimatedValue": 8000}, {"category": "boat", "type": "snowmobile", "yearBuilt": 2020, "estimatedValue": 15000}, {"category": "auto", "type": "motorcycle", "yearBuilt": 2018, "estimatedValue": 25000}, {"category": "auto", "type": "RV", "yearBuilt": 2015, "estimatedValue": 102000}, {"category": "home", "type": "business", "yearBuilt": 2009, "estimatedValue": 500000} ] } } åŸæ¥ã®ã¯ãŒã¯ãããŒå³ã¯æ°æ©èœãé©çšããåã®ã¯ãŒã¯ãããŒã瀺ããŠãããæ°ããã¯ãŒã¯ãããŒå³ã¯å€æ°ãš JSONata ãé©çšããŠæ§ç¯ãããã¯ãŒã¯ãããŒã瀺ããŠããŸãã ãã®ã¯ãŒã¯ãããŒã¯ã GitHub ãªããžã㪠㮠main ãã©ã³ã (åŸæ¥ã®ã¯ãŒã¯ãããŒ) ãš jsonata-variables ãã©ã³ã (æ°ããã¯ãŒã¯ãããŒ) ããã¢ã¯ã»ã¹ã§ããŸãã å³ 1 : åŸæ¥ã®ã¯ãŒã¯ãããŒ å³ 2: æ°ããã¯ãŒã¯ãã㌠ã»ããã¢ãã README ã®æé ã«åŸã£ãŠãã®ã¹ããŒããã·ã³ãäœæãããã¹ããå®äºãããåŸçä»ããè¡ã£ãŠãã ããã 倿°ã«ããããŒã¿å
±æã®ç°¡çŽ å 倿°ã䜿çšããããšã§ãåŸç¶ã®ã¹ããŒãã§åç
§ããã倿°ã«ãã¹ããŒãã®çµæã宣èšãŸãã¯ä»£å
¥ããããšãã§ããŸãã1 ã€ã®ã¹ããŒãã§ãéçããŒã¿ãã¹ããŒãã®çµæãJSONPath ã JSONata åŒãçµã¿èŸŒã¿é¢æ°ãªã©ãããŸããŸãªå€ãæã€è€æ°ã®å€æ°ãå²ãåœãŠãããšãã§ããŸããæ¬¡ã®å³ã¯ãã¹ããŒããã·ã³å
ã§å€æ°ãã©ã®ããã«å²ãåœãŠããã䜿çšããããã瀺ããŠããŸãã å³ 3: 倿°ã®å²ãåœãŠãšã¹ã³ãŒã 倿°ã®ã¹ã³ãŒã Step Functions ã«ããã倿°ã¯ãããã°ã©ãã³ã°èšèªãšåæ§ã®ã¹ã³ãŒããæã¡ãŸããå
éšã¹ã³ãŒããšå€éšã¹ã³ãŒãããããããããã®ã¬ãã«ã§å€æ°ãå®çŸ©ããŸããå
éšã¹ã³ãŒãã®å€æ°ã¯ mapãparallelããã¹ããããã¯ãŒã¯ãããŒå
ã§å®çŸ©ããããã®ç¹å®ã®ã¹ã³ãŒãå
ã§ã®ã¿ã¢ã¯ã»ã¹å¯èœã§ããäžæ¹ãå€éšã¹ã³ãŒãã®å€æ°ã¯ãããã¬ãã«ã§èšå®ãããŸããäžåºŠå€æ°ãå²ãåœãŠããããšãå®è¡é åºã«é¢ä¿ãªããåŸç¶ã®ã©ã®ã¹ããŒãããã§ããããã®å€æ°ã«ã¢ã¯ã»ã¹ã§ããŸãããããããã®ããã°ã®ãªãªãŒã¹æç¹ã§ã¯ãDistributed Map ã¯å€éšã¹ã³ãŒãã®å€æ°ãåç
§ã§ããŸããã 倿°ã®ã¹ã³ãŒãã«é¢ãããŠãŒã¶ãŒã¬ã€ã ã§ã¯ããã®ãããªãšããžã±ãŒã¹ã«ã€ããŠè©³ãã説æãããŠããŸãã 倿°ã®å²ãåœãŠãšäœ¿çš 倿°ã®å€ãèšå®ããã«ã¯ãç¹å¥ãªãã£ãŒã«ãã§ãã Assign ã䜿çšããŸãããã®ããã°ã®åŸåã«ãã JSONata ã®éšåã§ã {%%} ã®ç®çã«ã€ããŠèª¬æããŠããŸãã "Assign": { "inputPayload": "{% $states.context.Execution.Input %}", "isCustomerValid": "{% $states.result.isIdentityValid and $states.result.isAddressValid %}" } 倿°ã䜿çšããã«ã¯ã倿°åã®åã«ãã«èšå· ($) ãä»ããŠèšè¿°ããŸãã { "TableName": "AccountTable", "Item": { "email": { "S": "{% $inputPayload.data.email %}" }, "firstname": { "S": "{% $inputPayload.data.firstname %}" },.... } JSONata ã«ããããŒã¿æäœã®ç°¡çŽ å JSONata ã¯ãJson ããŒã¿çšã®è»œéãªã¯ãšãªããã³å€æèšèªã§ããJSONata ã¯ãStep Functions å
ã® JSONPath ãšæ¯èŒããŠããå€ãã®æ©èœãæäŸããŸãã QueryLanguage ã "JSONata" ã«èšå®ããJSONata åŒã« {%%} ã¿ã°ã䜿çšããããšã§ãã¹ããŒããã·ã³å
ã§ JSONata ãå©çšã§ããŸãã ãã®èšå® ã¯ã¹ããŒããã·ã³ã®ãããã¬ãã«ãŸãã¯åã¿ã¹ã¯ã¬ãã«ã§é©çšã§ããŸããã¿ã¹ã¯ã¬ãã«ã® JSONata ãå©çšããããšã§ãJSONata ãš JSONPath ã®éžæã现ããå¶åŸ¡ã§ããŸãããã®æ¹æ³ã¯ãäžéšã®ã¹ããŒãã JSONata ã§ç°¡çŽ åããæ®ãã®ã¹ããŒãã§ã¯ JSONPath ã䜿ãç¶ãããè€éãªã¯ãŒã¯ãããŒã«æçšã§ããJSONata ã¯ãJSONPath ã Step Functions ã®çµã¿èŸŒã¿é¢æ°ãããå€ãã®é¢æ°ãšæŒç®åãæäŸããŸãã ã¹ããŒããã·ã³ã¬ãã«ã§ QueryLanguage 屿§ã JSONata ã«èšå® ãããšãJSONPath ãç¡å¹ã«ãªãã InputPath ã Parameters ã ResultPath ã ResultSelector ã OutputPath ã®äœ¿çšãå¶éãããŸãã代ããã« JSONata ã§ã¯ Arguments ãš Output ã䜿çšããŸãã ã·ã³ãã«ãªã¹ããŒãã®æé©å æ°ããã¹ããŒããã·ã³ã§æåã«æ°ã¥ãç¹ã® 1 ã€ã¯ã以äžã®æ¯èŒã§ç€ºãããããã«ã Verification ããã»ã¹ã Lambda 颿°ã䜿çšããŠããªãããšã§ãã å³ 4: Pass ã¹ããŒãã«çœ®ãæãããã Lambda 颿° åŸæ¥ã®ã¢ãããŒãã§ã¯ãæ£èŠè¡šçŸã䜿çšããŠã¡ãŒã«ã¢ãã¬ã¹ãšãœãŒã·ã£ã«ã»ãã¥ãªãã£ãã³ã㌠(SSN) ãæ€èšŒãã Lambda 颿°ã䜿çšãããŠããŸããã const ssnRegex = /^\d{3}-?\d{2}-?\d{4}$/; const emailRegex = /^[a-zA-Z0-9._-] +@[a-zA-Z0-9.-] + \.[a-zA-Z]{2,4}$/; exports.lambdaHandler = async event => { const { ssn, email } = event ; const approved = ssnRegex.test(ssn) && emailRegex.test(email); return { statusCode: 200, body: JSON.stringify({ approved, message: `identity validation ${approved ? 'passed' : 'failed'}` }) } }; JSONata ã䜿çšãããšãã¹ããŒããã·ã³ã® Amazon States Language (ASL) ãå©çšããŠæ£èŠè¡šçŸãçŽæ¥å®çŸ©ã§ããŸãã Pass ã¹ããŒããš JSONata ã® $match() ã䜿çšããŠãã¡ãŒã«ã¢ãã¬ã¹ãš SSN ãæ€èšŒããŸãã { "StartAt": "Check Identity", "States": { "Check Identity": { "Type": "Pass", "QueryLanguage": "JSONata", "End": true, "Output": { "isIdentityValid": "{% $match($states.input.data.identity.email, /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/) and $match($states.input.data.identity.ssn, /^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$/) %}" } } } } åæ§ã«ãJSONata ã®é«åºŠãªæåå颿° $length ã $trim ã $each ã $not ã䜿ã£ãŠã Pass ã¹ããŒãã®äžã§äœæãæ€èšŒã§ããŸãã { "StartAt": "Check Address", "States": { "Check Address": { "Type": "Pass", "QueryLanguage": "JSONata", "End": true, "Output": { "isAddressValid": "{% $not(null in $each($states.input.data.address, function($v) { $length($trim($v)) > 0 ? $v : null })) %}" } } } } JSONata ã䜿çšããå Žåã $states 㯠äºçŽå€æ° ã«ãªããŸãã çµæã®éèš ä»¥å㯠JSONPath ã§ã¯ã Choice ã¹ããŒã以å€ã§åŒã¯äœ¿çšã§ããŸããã§ãããããã JSONata ã§ã¯ãã®ãããªå¶éã¯ãããŸããããã®äŸã§ã¯ã parallel ã¹ããŒãã§åãµãã¹ãããããã®æ¬äººç¢ºèªãšäœæç¢ºèªã®çµæãåéããŠããŸãããããã®çµæã boolean 倿° isCustomerValid ã«éçŽããŠããŸãã "Verification": { "Type": "Parallel", "QueryLanguage": "JSONata", ... "Assign": { "inputPayload": "{% $states.context.Execution.Input %}", "isCustomerValid": "{% $states.result.isIdentityValid and $states.result.isAddressValid %}" }, "Next": "Approve or Deny?" } ããã§éèŠãªç¹ã¯ã $states.result ãä»ããçµæãžã®ã¢ã¯ã»ã¹ãšã{%%} å
ã§ã® AND ããŒã«æŒç®å ã®äœ¿çšã§ããããã«ããããã®å€æ°ã䜿çšããåŸã® Choice ã¹ããŒããã·ã³ãã«ã«ãªããŸãã JSONata ã® Operators ã䜿çšããããšã§ãå¯èœãªéããã®ãããªåŒãæè»ã«èšè¿°ã§ããåçŽãªããŒã¿å€æãããããã®ã³ã³ãã¥ãŒãå±€ãåæžã§ããŸãã ããã«ã {%%} å
ã®åŒã true ãŸã㯠false ã®å€ãè¿ãéããæè»ãª JSONata æŒç®åããã³åŒãå©çšããããšã§ã Choice ã¹ããŒããç°¡åã«äœ¿ããããã«ãªããŸãã JSONata 颿°ãšããŠã®çµã¿èŸŒã¿é¢æ° Step Functions ã¯ã Step Functions ã®çµã¿èŸŒã¿é¢æ° ãšåçã®æ©èœãæäŸããããã«ãJSONata ã®çµã¿èŸŒã¿é¢æ°ãæäŸãããŠããŸãã DynamoDB ã® putItem ã¹ãããã§ã¯ã States.UUID() çµã¿èŸŒã¿é¢æ°ãšåãæ©èœãæã€ $uuid() ã®äœ¿ç𿹿³ã瀺ããŠããŸãã ãŸããæ¥ä»ãšæå»ã«é¢ãã JSONata åºæã®é¢æ°ãå©çšã§ããŸãã 以äžã®ã¹ããŒãã¯ãDynamoDB ããŒãã«ã«ã¢ã€ãã ãæ¿å
¥ããåã«ã $now() ã䜿çšããŠçŸåšã®ã¿ã€ã ã¹ã¿ã³ãã ISO-8601 圢åŒã®æååãšããŠååŸããäŸã瀺ããŠããŸãã "Add Account": { "Type": "Task", "QueryLanguage": "JSONata", "Resource": "arn:aws:states:::dynamodb:putItem", "Arguments": { "TableName": "AccountTable", "Item": { "PK": { "S": "{% $uuid() %}" }, "email": { "S": "{% $inputPayload.data.identity.email %}" }, "name": { "S": "{% $inputPayload.data.firstname & ' ' & $inputPayload.data.lastname %}" }, "address": { "S": "{% $join($each($inputPayload.data.address, function($v) { $v }), ', ') %}" }, "timestamp": { "S": "{% $now() %}" } } }, "Next": "Interests" } JSONata åŒã ASL ãå©çšããŠã¹ããŒããã·ã³ãå®çŸ©ããéã®éçºè
ã®è² æ
ã軜æžããããã S.$ å
ã§ .$ 衚èšãäžèŠã«ãªã£ãããšã«æ³šç®ããŠãã ãããStep Functions å
ã§å©çšå¯èœãª 远å ã® JSONata 颿° ã«ã€ããŠã調ã¹ãŠã¿ãŠãã ããã é«åºŠãª JSONata JSONata ã®æè»æ§ã¯ãçµã¿èŸŒã¿é¢æ°ã é«é颿° ã®ãµããŒãã 颿°åããã°ã©ãã³ã°æ§æ ã«ç±æ¥ããŸããJSONPath ã§ã¯ãé«åºŠãªåŒ "InputPath": "$..interests[?(@.category ==home) ]" ã䜿çšããŠãé
å interests ããäœå®
ä¿éºé¢é£ã®èå³é¢å¿ããã£ã«ã¿ãªã³ã°ããŠããŸãããJSONata 㯠ãã£ã«ã¿ãªã³ã° 以äžã®æ©èœãæäŸããŸããããšãã°ãäœå®
ä¿éºã®é¢å¿äºãæ¢ããã«ããŽãªã¿ã€ãã home ã® totalAssetValue ãåç
§ããname ã email ãªã©ã®æ¢åã®ãã£ãŒã«ãã JSONata 倿°ãšããŠåç
§ã§ããŸãã ( $e := data.identity.email ; $n := data.firstname & ' ' & data.lastname ; data.interests[category='home']{ 'customer': $n, 'email': $e, 'totalAssetValue': $sum(estimatedValue), category: {type: yearBuilt} } ) çµæã® JSON ã¯æ¬¡ã®ããã«ãªããŸãã `{ "customer": "Jane Doe", "email": "jdoe@example.com", "totalAssetValue": 1400000, "home": { "own": 2004, "business": 2009 } }` ãããã®ã¹ãããã«åŸãããšã§ããã¹ãŠã®ä¿éºã«é¢ããé¢å¿äºãšãã®éçŽçµæãåéãã1 ã€äžã®ã¬ãã«ã«é²ã¿ãŸããã«ããŽãªãã£ã«ã¿ãŒãããååšããªãããšã«æ³šç®ããŠãã ããã ( $e := data.identity.email ; $n := data.firstname & ' ' & data.lastname ; data.interests{ 'customer': $n, 'email': $e, 'totalAssetValue': $sum(estimatedValue), category: {type: yearBuilt} } ) çµæã¯æ¬¡ã®ããã«ãªããŸãã { "customer": "Jane Doe", "email": "jdoe@example.com", "totalAssetValue": 1549000, "home": { "own": 2004, "business": 2009 }, "auto": { "car": 2012, "motorcycle": 2018, "RV": 2015 }, "boat": { "snowmobile": 2020 } } è€éãªåŒã®æ¢çŽ¢ ãµã³ãã«ããŒã¿ãš JSONata ãã¬ã€ã°ã©ãŠã³ããå©çš ããŠãèŠä»¶ã«åã£ã詳现ã§è€éãªåŒãèŠã€ããŠãã ããã以äžã¯ JSONata ãã¬ã€ã°ã©ãŠã³ãã®äœ¿çšäŸã§ãã å³ 5: JSONata ãã¬ã€ã°ã©ãŠã³ã èæ
®äºé
倿°ã®ãµã€ãº 1 ã€ã®å€æ°ã®æå€§ã®ãµã€ãºã¯ 256KiB ã§ãã ãã®å¶éã¯ãã¹ããŒãåºåãå¥ã
ã®å€æ°ã«æ ŒçŽããããšã§ãStep Functions ã®ãã€ããŒããµã€ãºå¶éãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã åã
ã®å€æ°ã®ãµã€ãºã¯æå€§ 256KiB ã§ãããåäžã® Assign ãã£ãŒã«ãå
ã®ãã¹ãŠã®å€æ°ã®åèšãµã€ãºã¯ 256KiB ãè¶
ããããšã¯ã§ããŸããã ãã®å¶éãåé¿ããã«ã¯ Pass ã¹ããŒãã䜿çšã§ããŸãããæ ŒçŽããããã¹ãŠã®å€æ°ã®åèšãµã€ãºã¯ã1 åã®å®è¡ã«ã€ã 10MiB ãè¶
ããããšã¯ã§ããŸããã 倿°ã®å¯èŠæ§ 倿°ã¯ãã¹ããŒãéã§ããŒã¿ãå
±æããã®ãç°¡åã«ãã匷åãªä»çµã¿ã§ãã䜿ããããæè»ã§ããããã ResultPath ã OutputPath ãJSONata ã® Output ãã£ãŒã«ãããã倿°ãåªå
ããŠãã ããããã ãã Output ã䜿ãå¯èœæ§ã®ããå Žé¢ã 2 ã€ãããŸãã1 ã€ç®ã¯ãå€åŽã®ã¹ã³ãŒãããå
åŽã®ã¹ã³ãŒãã®å€æ°ã«ã¢ã¯ã»ã¹ã§ããªãå Žåã§ãããã®å Žåã Output ãã£ãŒã«ãã䜿ããšãã¯ãŒã¯ãããŒã®ç°ãªãã¬ãã«éã§ããŒã¿ãå
±æã§ããŸãã2 ã€ç®ã¯ãã¯ãŒã¯ãããŒã®æçµã¹ããŒãããã¬ã¹ãã³ã¹ãéä¿¡ããéã«ã Output ãã£ãŒã«ãã䜿ãå¿
èŠãããå Žåã§ãã以äžã® JSONPath ãã JSONata ãžã®ç§»è¡å³ã«ããã®è©³çްã瀺ããŠããŸãã å³ 6: JSONPath ãã JSONata ãžã®ç§»è¡ ããã«ãç¹å®ã®ã¹ããŒãã«å²ãåœãŠããã倿°ã¯ãåãã¹ããŒãããã¯ã¢ã¯ã»ã¹ã§ããŸããã "Assign Variables": { "Type": "Pass", "Next": "Reassign Variables", "Assign": { "x": 1, "y": 2 } }, "Reassign Variables": { "Type": "Pass", "Assign": { "x": 5, "y": 10, ## The assignment will fail unless you define x and y in a prior state. ## otherwise, the value of z will be 3 instead of 15. "z": "{% $x+$y %}" }, "Next": "Pass" } ãã¹ããã©ã¯ãã£ã¹ Step Functions ã® æ€èšŒ API ã¯ãã¯ãŒã¯ãããŒã®ã»ãã³ãã£ãã¯ãã§ãã¯ãæäŸããæ©æã®åé¡çºèŠãå¯èœã«ããŸãã ã¯ãŒã¯ãããŒã®å®å
šãªæŽæ°ã確å®ããããã«ãæ€èšŒ API ãš ããŒãžã§ãã³ã°ãšãšã€ãªã¢ã¹ ãçµã¿åãããŠã段éçã«ãããã€ããããšããå§ãããŸãã JSONata ã®è€æ°è¡ã®åŒã¯æå¹ãª JSON ã§ã¯ãããŸããããããã£ãŠãã»ãã³ãã³ â;â ã§åºåãããæååãšã㊠1 è¡ ã䜿çšããæåŸã®è¡ã§åŒãè¿ãããã«ããŠãã ããã çžäºæä» QueryLanguage ã¿ã€ãã®äœ¿çšã¯çžäºã«æä»çã§ãã倿°ã®å²ãåœãŠæã« JSONPath/çµã¿èŸŒã¿é¢æ°ãš JSONata ãæ··åšãããªãã§ãã ãããããšãã°ã以äžã®ã¿ã¹ã¯ã¯å€±æããŸãã倿° b 㯠JSONata ã䜿çšããŠããŸããã c ã¯çµã¿èŸŒã¿é¢æ°ã䜿çšããŠããããã§ãã "Store Inputs": { "Type": "Pass", "QueryLanguage": "JSONata" "Assign": { "inputs": { "a": 123, "b": "{% $states.input.randomInput %}", "c.$": "States.MathRandom($.start, $.end)" } }, "Next": "Average" } JSONPath ã§å€æ°ã䜿çšããã«ã¯ ã QueryLanguage ã JSONPath ã«èšå®ããããã¿ã¹ã¯å®çŸ©ãããã®å±æ§ãåé€ããŠãã ããã çµè« 倿°ãš JSONata ã«ãããAWS Step Functions ã¯éçºè
ã Amazon States Language (ASL) ã§éåžžã®ããã°ã©ãã³ã°ãã©ãã€ã ã«åãããç°¡æœãªã³ãŒãã§ãšã¬ã¬ã³ããªã¯ãŒã¯ãããŒãèšè¿°ã§ããããã«ãªããéçºè
äœéšãåäžããŸããã éçºè
ã¯ãäœåãªããŒã¿å€æã®ã¹ããããçç¥ããããšã§ãããé«éã«ãã¯ãªãŒã³ãªã³ãŒããèšè¿°ã§ããããã«ãªããŸããã ãããã®æ©èœã¯ãæ°èŠããã³æ¢åã®ã¯ãŒã¯ãããŒã®äž¡æ¹ã§äœ¿çšã§ãããããJSONPath ãã JSONata ãšå€æ°ãžã®ç§»è¡ãæè»ã«è¡ãããšãã§ããŸãã 倿°ãš JSONata ã¯ãAWS Step Functions ãå©çšå¯èœãªãã¹ãŠã® AWS ãªãŒãžã§ã³ã§è¿œå æéãªãã§ã客æ§ã«ãå©çšããã ããŸãã JSONata ãš å€æ° ã®ãŠãŒã¶ãŒã¬ã€ããããã³ jsonata-variables ãã©ã³ãã® ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ ãåç
§ããŠãã ããã ãµãŒããŒã¬ã¹ã«é¢ããç¥èãæ·±ããã«ã¯ã Serverless Land ãã芧ãã ããã