Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Fonctions intrinsèques dans les workflows Amazon States Language for Step Functions
L'Amazon States Language fournit plusieurs fonctions intrinsèques, également appelées intrinsèques, qui vous aident à effectuer des opérations de traitement de données de base sans utiliser d'Task
état. Les intrinsèques sont des constructions qui ressemblent aux fonctions des langages de programmation. Ils peuvent être utilisés pour aider les constructeurs de charges utiles à traiter les données à destination et en provenance du Resource
champ d'un Task
État.
Dans Amazon States Language, les fonctions intrinsèques sont regroupées dans les catégories suivantes, en fonction du type de tâche de traitement des données que vous souhaitez effectuer :
Note
Pour utiliser des fonctions intrinsèques, vous devez spécifier
.$
la valeur clé dans les définitions de votre machine à états, comme indiqué dans l'exemple suivant :"KeyId.$": "
States.Array
($.Id)"Vous pouvez intégrer jusqu'à 10 fonctions intrinsèques dans un champ de vos flux de travail. L'exemple suivant montre un champ nommé
qui inclut neuf fonctions intrinsèques imbriquées :myArn
"
myArn.$
": "States.Format('{}.{}.{}', States.ArrayGetItem(States.StringSplit(States.ArrayGetItem(States.StringSplit($.ImageRecipe.Arn
, '/'), 2), '.'), 0), States.ArrayGetItem(States.StringSplit(States.ArrayGetItem(States.StringSplit($.ImageRecipe.Arn
, '/'), 2), '.'), 1))"
Astuce
Si vous utilisez Step Functions dans un environnement de développement local, assurez-vous d'utiliser la version 1.12.0
Champs prenant en charge les fonctions intrinsèques
Les états suivants prennent en charge les fonctions intrinsèques dans les domaines suivants :
-
État de la passe : Paramètres
-
État de la tâche : paramètres ResultSelector, informations d'identification
-
État parallèle : paramètres, ResultSelector
-
État de la carte : paramètres, ResultSelector
Intrinsèques pour les réseaux
Utilisez les éléments intrinsèques suivants pour effectuer des manipulations de tableaux.
States.Array
-
La fonction
States.Array
intrinsèque ne prend aucun argument ou plus. L'interpréteur renvoie un JSON tableau contenant les valeurs des arguments dans l'ordre indiqué. Par exemple, avec les données d'entrée suivantes :{ "Id": 123456 }
Vous pourriez utiliser
"BuildId.$": "States.Array($.Id)"
Ce qui renverrait le résultat suivant :
“BuildId”: [123456]
States.ArrayPartition
-
Utilisez la fonction
States.ArrayPartition
intrinsèque pour partitionner un grand tableau. Vous pouvez également utiliser cet élément intrinsèque pour découper les données, puis envoyer la charge utile en petits morceaux.Cette fonction intrinsèque prend deux arguments. Le premier argument est un tableau, tandis que le second définit la taille du bloc. L'interpréteur découpe le tableau d'entrée en plusieurs tableaux de la taille spécifiée par la taille du morceau. La longueur du dernier segment de tableau peut être inférieure à la longueur des fragments de tableau précédents si le nombre d'éléments restants dans le tableau est inférieur à la taille du morceau.
Validation des entrées
-
Vous devez spécifier un tableau comme valeur d'entrée pour le premier argument de la fonction.
-
Vous devez spécifier un entier positif différent de zéro pour le deuxième argument représentant la valeur de la taille du segment.
Si vous spécifiez une valeur non entière pour le deuxième argument, Step Functions l'arrondira à l'entier le plus proche.
-
Le tableau d'entrée ne peut pas dépasser la limite de charge utile de 256 Ko fixée par Step Functions.
Par exemple, étant donné le tableau d'entrée suivant :
{"inputArray": [1,2,3,4,5,6,7,8,9] }
Vous pouvez utiliser cette
States.ArrayPartition
fonction pour diviser le tableau en morceaux de quatre valeurs :"inputArray.$": "States.ArrayPartition($.inputArray,4)"
Ce qui renverrait les fragments de tableau suivants :
{"inputArray": [ [1,2,3,4], [5,6,7,8], [9]] }
Dans l'exemple précédent, la
States.ArrayPartition
fonction produit trois tableaux. Les deux premiers tableaux contiennent chacun quatre valeurs, telles que définies par la taille des morceaux. Un troisième tableau contient la valeur restante et est inférieur à la taille de bloc définie. -
States.ArrayContains
-
Utilisez la fonction
States.ArrayContains
intrinsèque pour déterminer si une valeur spécifique est présente dans un tableau. Par exemple, vous pouvez utiliser cette fonction pour détecter s'il y a eu une erreur lors d'une itération d'Map
état.Cette fonction intrinsèque prend deux arguments. Le premier argument est un tableau, tandis que le second est la valeur à rechercher dans le tableau.
Validation des entrées
-
Vous devez spécifier un tableau comme valeur d'entrée pour le premier argument de la fonction.
Vous devez spécifier un JSON objet valide comme deuxième argument.
-
Le tableau d'entrée ne peut pas dépasser la limite de charge utile de 256 Ko fixée par Step Functions.
Par exemple, étant donné le tableau d'entrée suivant :
{ "inputArray": [1,2,3,4,5,6,7,8,9], "lookingFor": 5 }
Vous pouvez utiliser la
States.ArrayContains
fonction pour trouver lalookingFor
valeur dansinputArray
:"contains.$": "States.ArrayContains($.inputArray, $.lookingFor)"
Comme la valeur stockée dans
lookingFor
est incluse dans leinputArray
,States.ArrayContains
renvoie le résultat suivant :{"contains": true }
-
States.ArrayRange
-
Utilisez la fonction
States.ArrayRange
intrinsèque pour créer un nouveau tableau contenant une plage spécifique d'éléments. Le nouveau tableau peut contenir jusqu'à 1 000 éléments.Cette fonction prend trois arguments. Le premier argument est le premier élément du nouveau tableau, le deuxième est le dernier élément du nouveau tableau et le troisième argument est la valeur d'incrément entre les éléments du nouveau tableau.
Validation des entrées
-
Vous devez spécifier des valeurs entières pour tous les arguments.
Si vous spécifiez une valeur non entière pour l'un des arguments, Step Functions l'arrondira à l'entier le plus proche.
-
Vous devez spécifier une valeur différente de zéro pour le troisième argument.
-
Le tableau nouvellement généré ne peut pas contenir plus de 1 000 éléments.
Par exemple, l'utilisation suivante de la
States.ArrayRange
fonction créera un tableau avec une première valeur de 1, une valeur finale de 9, et les valeurs comprises entre les première et dernière valeurs augmenteront de deux pour chaque élément :"array.$": "States.ArrayRange(1, 9, 2)"
Ce qui renverrait le tableau suivant :
{"array": [1,3,5,7,9] }
-
States.ArrayGetItem
-
Cette fonction intrinsèque renvoie la valeur d'un indice spécifié. Cette fonction prend deux arguments. Le premier argument est un tableau de valeurs et le second est l'index du tableau de la valeur à renvoyer.
Par exemple, utilisez les
index
valeursinputArray
et suivantes :{ "inputArray": [1,2,3,4,5,6,7,8,9], "index": 5 }
À partir de ces valeurs, vous pouvez utiliser la
States.ArrayGetItem
fonction pour renvoyer la valeur à laindex
position 5 dans le tableau :"item.$": "States.ArrayGetItem($.inputArray, $.index)"
Dans cet exemple,
States.ArrayGetItem
renverrait le résultat suivant :{ "item": 6 }
States.ArrayLength
-
La fonction
States.ArrayLength
intrinsèque renvoie la longueur d'un tableau. Il a un argument, le tableau dont la longueur doit être renvoyée.Par exemple, étant donné le tableau d'entrée suivant :
{ "inputArray": [1,2,3,4,5,6,7,8,9] }
Vous pouvez l'utiliser
States.ArrayLength
pour renvoyer la longueur deinputArray
:"length.$": "States.ArrayLength($.inputArray)"
Dans cet exemple,
States.ArrayLength
renverrait l'JSONobjet suivant qui représente la longueur du tableau :{ "length": 9 }
States.ArrayUnique
-
La fonction
States.ArrayUnique
intrinsèque supprime les valeurs dupliquées d'un tableau et renvoie un tableau contenant uniquement des éléments uniques. Cette fonction prend un tableau, qui peut être détrié, comme seul argument.Par exemple, le texte suivant
inputArray
contient une série de valeurs dupliquées :{"inputArray": [1,2,3,3,3,3,3,3,4] }
Vous pouvez utiliser la
States.ArrayUnique
fonction as et spécifier le tableau dont vous souhaitez supprimer les doublons :"array.$": "States.ArrayUnique($.inputArray)"
La
States.ArrayUnique
fonction renverrait le tableau suivant contenant uniquement des éléments uniques, en supprimant toutes les valeurs dupliquées :{"array": [1,2,3,4] }
Intrinsèques pour le codage et le décodage des données
Utilisez les fonctions intrinsèques suivantes pour coder ou décoder des données selon le schéma de codage Base64.
States.Base64Encode
-
Utilisez la fonction
States.Base64Encode
intrinsèque pour coder les données selon le schéma de codage MIME Base64. Vous pouvez utiliser cette fonction pour transmettre des données à d'autres AWS services sans utiliser de AWS Lambda .Cette fonction prend comme seul argument une chaîne de données de 10 000 caractères maximum à coder.
Par exemple, considérez la
input
chaîne suivante :{"input": "Data to encode" }
Vous pouvez utiliser la
States.Base64Encode
fonction pour encoder lainput
chaîne en tant que chaîne MIME Base64 :"base64.$": "States.Base64Encode($.input)"
La
States.Base64Encode
fonction renvoie les données codées suivantes en réponse :{"base64": "RGF0YSB0byBlbmNvZGU=" }
States.Base64Decode
-
Utilisez la fonction
States.Base64Decode
intrinsèque pour décoder les données selon le schéma de décodage MIME Base64. Vous pouvez utiliser cette fonction pour transmettre des données à d'autres AWS services sans utiliser de fonction Lambda.Cette fonction prend comme seul argument une chaîne de données codée en Base64 de 10 000 caractères maximum à décoder.
Par exemple, avec les données d'entrée suivantes :
{"base64": "RGF0YSB0byBlbmNvZGU=" }
Vous pouvez utiliser la
States.Base64Decode
fonction pour décoder la chaîne base64 en une chaîne lisible par l'homme :"data.$": "States.Base64Decode($.base64)"
Ils
States.Base64Decode function
renverraient les données décodées suivantes en réponse :{"data": "Decoded data" }
Intrinsèque pour le calcul du hachage
States.Hash
-
Utilisez la fonction
States.Hash
intrinsèque pour calculer la valeur de hachage d'une entrée donnée. Vous pouvez utiliser cette fonction pour transmettre des données à d'autres AWS services sans utiliser de fonction Lambda.Cette fonction prend deux arguments. Le premier argument concerne les données dont vous souhaitez calculer la valeur de hachage. Le deuxième argument est l'algorithme de hachage à utiliser pour effectuer le calcul du hachage. Les données que vous fournissez doivent être une chaîne d'objets contenant 10 000 caractères ou moins.
L'algorithme de hachage que vous spécifiez peut être l'un des algorithmes suivants :
-
MD5
-
SHA-1
-
SHA-256
-
SHA-384
-
SHA-512
Par exemple, vous pouvez utiliser cette fonction pour calculer la valeur de hachage de la
Data
chaîne à l'aide de la valeur spécifiéeAlgorithm
:{ "Data": "input data", "Algorithm": "SHA-1" }
Vous pouvez utiliser la
States.Hash
fonction pour calculer la valeur de hachage :"output.$": "States.Hash($.Data, $.Algorithm)"
La
States.Hash
fonction renvoie la valeur de hachage suivante en réponse :{"output": "aaff4a450a104cd177d28d18d7485e8cae074b7" }
-
Intrinsèques pour la manipulation JSON des données
Utilisez ces fonctions pour effectuer des opérations de traitement de données de base sur JSON des objets.
States.JsonMerge
-
Utilisez la fonction
States.JsonMerge
intrinsèque pour fusionner deux JSON objets en un seul. Cette fonction prend trois arguments. Les deux premiers arguments correspondent aux JSON objets que vous souhaitez fusionner. Le troisième argument est une valeur booléenne de.false
Cette valeur booléenne détermine si le mode de fusion profonde est activé.Step Functions ne prend actuellement en charge que le mode de fusion superficielle ; vous devez donc spécifier la valeur booléenne sous la forme.
false
En mode superficiel, si la même clé existe dans les deux JSON objets, la clé du dernier objet remplace la même clé dans le premier objet. En outre, les objets imbriqués dans un JSON objet ne sont pas fusionnés lorsque vous utilisez une fusion superficielle.Par exemple, vous pouvez utiliser cette
States.JsonMerge
fonction pour fusionner les JSON objets suivants qui partagent la cléa
.{ "json1": { "a": {"a1": 1, "a2": 2}, "b": 2 }, "json2": { "a": {"a3": 1, "a4": 2}, "c": 3 } }
Vous pouvez spécifier les objets json1 et json2 comme entrées dans la
States.JsonMerge
fonction pour les fusionner :"output.$": "States.JsonMerge($.json1, $.json2, false)"
States.JsonMerge
Renvoie l'JSONobjet fusionné suivant en tant que résultat. Dans l'JSONobjet fusionnéoutput
, la clé de l'json2
objeta
remplace la clé de l'json1
objeta
. De plus, l'objet imbriqué dans la clé dejson1
l'objeta
est supprimé car le mode superficiel ne permet pas de fusionner des objets imbriqués.{ "output": { "a": {"a3": 1, "a4": 2}, "b": 2, "c": 3 } }
-
States.StringToJson
-
La
States.StringToJson
fonction prend comme seul argument un chemin de référence vers une JSON chaîne échappée.L'interpréteur applique un JSON analyseur et renvoie le formulaire analysé JSON de l'entrée. Par exemple, vous pouvez utiliser cette fonction pour échapper à la chaîne de saisie suivante :
{ "escapedJsonString": "{\"foo\": \"bar\"}" }
Utilisez la
States.StringToJson
fonction et spécifiez leescapedJsonString
comme argument d'entrée :States.StringToJson($.escapedJsonString)
La
States.StringToJson
fonction renvoie le résultat suivant :{ "foo": "bar" }
-
States.JsonToString
-
La
States.JsonToString
fonction ne prend qu'un seul argument, à savoir le chemin contenant les JSON données à renvoyer sous forme de chaîne non échappée. L'interpréteur renvoie une chaîne contenant JSON du texte représentant les données spécifiées par le chemin. Par exemple, vous pouvez fournir le JSON chemin suivant contenant une valeur échappée :{ "unescapedJson": { "foo": "bar" } }
Fournissez à la
States.JsonToString
fonction les données contenues dansunescapedJson
:States.JsonToString($.unescapedJson)
La
States.JsonToString
fonction renvoie la réponse suivante :{\"foo\": \"bar\"}
Intrinsèques pour les opérations mathématiques
Utilisez ces fonctions pour effectuer des opérations mathématiques.
States.MathRandom
-
Utilisez la fonction
States.MathRandom
intrinsèque pour renvoyer un nombre aléatoire compris entre le numéro de début (inclus) et le numéro de fin (exclusif) spécifiés.Vous pouvez utiliser cette fonction pour répartir une tâche spécifique entre deux ressources ou plus.
Cette fonction prend trois arguments. Le premier argument est le numéro de début, le deuxième est le numéro de fin et le dernier argument contrôle la valeur initiale facultative. Notez que si vous utilisez cette fonction avec la même valeur initiale, elle renverra des nombres identiques.
Important
Comme la
States.MathRandom
fonction ne renvoie pas de nombres aléatoires sécurisés par cryptographie, nous vous recommandons de ne pas l'utiliser pour les applications sensibles en termes de sécurité.Validation des entrées
-
Vous devez spécifier des valeurs entières pour les arguments du numéro de début et du numéro de fin.
Si vous spécifiez une valeur non entière pour l'argument du numéro de début ou de fin, Step Functions l'arrondira à l'entier le plus proche.
Par exemple, pour générer un nombre aléatoire compris entre un et 999, vous pouvez utiliser les valeurs d'entrée suivantes :
{ "start": 1, "end": 999 }
Pour générer le nombre aléatoire, fournissez les
end
valeursstart
et à laStates.MathRandom
fonction :"random.$": "States.MathRandom($.start, $.end)"
La
States.MathRandom
fonction renvoie le nombre aléatoire suivant en réponse :{"random": 456 }
-
States.MathAdd
-
Utilisez la fonction
States.MathAdd
intrinsèque pour renvoyer la somme de deux nombres. Par exemple, vous pouvez utiliser cette fonction pour incrémenter des valeurs dans une boucle sans appeler de fonction Lambda.Validation des entrées
-
Vous devez spécifier des valeurs entières pour tous les arguments.
Si vous spécifiez une valeur non entière pour l'un des arguments ou pour les deux, Step Functions l'arrondira à l'entier le plus proche.
-
Vous devez spécifier des valeurs entières comprises entre -2147483648 et 2147483647.
Par exemple, vous pouvez utiliser les valeurs suivantes pour soustraire un de 111 :
{ "value1": 111, "step": -1 }
Utilisez ensuite la
States.MathAdd
fonction définissantvalue1
comme valeur de départ etstep
comme valeur à incrémentervalue1
de :"value1.$": "States.MathAdd($.value1, $.step)"
La
States.MathAdd
fonction renverrait le nombre suivant en réponse :{"value1": 110 }
-
Intrinsèque pour le fonctionnement des chaînes
States.StringSplit
-
Utilisez la fonction
States.StringSplit
intrinsèque pour diviser une chaîne en un tableau de valeurs. Cette fonction prend deux arguments. Le premier argument est une chaîne et le second est le caractère de délimitation que la fonction utilisera pour diviser la chaîne.Exemple - Diviser une chaîne d'entrée en utilisant un seul caractère de délimitation
Pour cet exemple, utilisez
States.StringSplit
pour diviser ce qui suitinputString
, qui contient une série de valeurs séparées par des virgules :{ "inputString": "1,2,3,4,5", "splitter": "," }
Utilisez la
States.StringSplit
fonction et définissezinputString
comme premier argument, et le caractère de délimitationsplitter
comme second argument :"array.$": "States.StringSplit($.inputString, $.splitter)"
La
States.StringSplit
fonction renvoie le tableau de chaînes suivant comme résultat :{"array": ["1","2","3","4","5"] }
Exemple - Diviser une chaîne d'entrée à l'aide de plusieurs caractères de délimitation
Pour cet exemple, utilisez
States.StringSplit
pour diviser ce qui suitinputString
, qui contient plusieurs caractères de délimitation :{ "inputString": "This.is+a,test=string", "splitter": ".+,=" }
Utilisez la
States.StringSplit
fonction comme suit :{ "myStringArray.$": "States.StringSplit($.inputString, $.splitter)" }
La
States.StringSplit
fonction renvoie le tableau de chaînes suivant comme résultat :{"myStringArray": [ "This", "is", "a", "test", "string" ]}
Intrinsèque pour la génération d'identifiants uniques
States.UUID
-
Utilisez la fonction
States.UUID
intrinsèque pour renvoyer un identifiant unique universel (v4UUID) de version 4 généré à l'aide de nombres aléatoires. Par exemple, vous pouvez utiliser cette fonction pour appeler d'autres AWS services ou ressources qui nécessitent un UUID paramètre ou l'insertion d'éléments dans une table DynamoDB.La
States.UUID
fonction est appelée sans qu'aucun argument ne soit spécifié :"uuid.$": "States.UUID()"
La fonction renvoie une donnée générée aléatoirementUUID, comme dans l'exemple suivant :
{"uuid": "ca4c1140-dcc1-40cd-ad05-7b4aa23df4a8" }
Intrinsèque pour un fonctionnement générique
States.Format
-
Utilisez la fonction
States.Format
intrinsèque pour construire une chaîne à partir de valeurs littérales et interpolées. Cette fonction prend un ou plusieurs arguments. La valeur du premier argument doit être une chaîne et peut inclure zéro ou plusieurs instances de la séquence de caractères{}
. Il doit rester autant d'arguments dans l'invocation de la fonction intrinsèque qu'il y a d'occurrences de{}
. L'interpréteur renvoie la chaîne définie dans le premier argument, chacune étant{}
remplacée par la valeur de l'argument correspondant à la position dans l'invocation intrinsèque.Par exemple, vous pouvez utiliser les entrées suivantes parmi celles d'un individu
name
, ainsi qu'unetemplate
phrase dans laquelle insérer son nom :{ "name": "Arnav", "template": "Hello, my name is {}." }
Utilisez la
States.Format
fonction et spécifiez latemplate
chaîne et la chaîne à insérer à la place des{}
caractères :States.Format('Hello, my name is {}.', $.name)
or
States.Format($.template, $.name)
Avec l'une des entrées précédentes, la
States.Format
fonction renvoie la chaîne complète en réponse :Hello, my name is Arnav.
Caractères réservés dans les fonctions intrinsèques
Les caractères suivants sont réservés aux fonctions intrinsèques et doivent être évités par une barre oblique inverse ('\') si vous souhaitez qu'ils apparaissent dans la valeur : ' { } et. \
Si le caractère \
doit apparaître dans la valeur sans servir de caractère d'échappement, vous devez y échapper par une barre oblique inverse. Les séquences de caractères échappées suivantes sont utilisées avec des fonctions intrinsèques :
La chaîne littérale
\'
représente'
.La chaîne littérale
\{
représente{
.La chaîne littérale
\}
représente}
.La chaîne littérale
\\
représente\
.
DansJSON, les barres obliques inverses contenues dans une valeur littérale de chaîne doivent être évitées par une autre barre oblique inverse. La liste équivalente pour JSON est la suivante :
-
La chaîne échappée
\\\'
représente\'
. -
La chaîne échappée
\\\{
représente\{
. -
La chaîne échappée
\\\}
représente\}
. -
La chaîne échappée
\\\\
représente\\
.
Note
Si une barre oblique inverse ouverte \
est détectée dans la chaîne d'invocation intrinsèque, l'interpréteur renvoie une erreur d'exécution.
Vous devez utiliser la notation entre crochets pour un chemin transmis en tant qu'argument à une fonction intrinsèque si le nom du champ contient un caractère non inclus dans la member-name-shorthand
définition de la JsonPath ABNF_
, vous devez également utiliser la notation entre crochets. Par exemple, $.abc.['def ghi']
.