ItemReader (Carte) - AWS Step Functions

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.

ItemReader (Carte)

Le ItemReader champ est un JSON objet qui indique un ensemble de données et son emplacement. L'état d'une carte distribuée utilise ce jeu de données comme entrée. L'exemple suivant montre la syntaxe du ItemReader champ si votre ensemble de données est un CSV fichier stocké dans un compartiment Amazon S3.

"ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "myBucket", "Key": "csvDataset/ratings.csv" } }
Astuce

Dans Workflow Studio, vous spécifiez le jeu de données et son emplacement dans le champ Source de l'élément.

Contenu du ItemReader champ

Le contenu du ItemReader champ varie en fonction de votre jeu de données. Par exemple, si votre ensemble de données est un JSON tableau transmis lors d'une étape précédente du flux de travail, le ItemReader champ est omis. Si votre ensemble de données est une source de données Amazon S3, ce champ contient les sous-champs suivants.

ReaderConfig

Un JSON objet qui spécifie les détails suivants :

  • InputType

    Spécifie le type de source de données Amazon S3, tel qu'un CSV fichier, un objet, un JSON fichier ou une liste d'inventaire Amazon S3. Dans Workflow Studio, vous pouvez sélectionner un type d'entrée dans la liste déroulante des sources d'articles Amazon S3 sous le champ Source de l'article.

  • CSVHeaderLocation

    Note

    Vous ne devez spécifier ce champ que si vous utilisez un CSV fichier comme ensemble de données.

    Accepte l'une des valeurs suivantes pour spécifier l'emplacement de l'en-tête de colonne :

    Important

    À l'heure actuelle, Step Functions prend en charge CSV les en-têtes d'une taille maximale de 10 Ko.

    • FIRST_ROW— Utilisez cette option si la première ligne du fichier est l'en-tête.

    • GIVEN— Utilisez cette option pour spécifier l'en-tête dans la définition de la machine à états. Par exemple, si votre CSV fichier contient les données suivantes.

      1,307,3.5,1256677221 1,481,3.5,1256677456 1,1091,1.5,1256677471 ...

      Fournissez le JSON tableau suivant en tant qu'CSVen-tête.

      "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "GIVEN", "CSVHeaders": [ "userId", "movieId", "rating", "timestamp" ] } }
    Astuce

    Dans Workflow Studio, vous pouvez trouver cette option sous Configuration supplémentaire dans le champ Source de l'élément.

  • MaxItems

    Limite le nombre d'éléments de données transmis à l'Mapétat. Supposons, par exemple, que vous fournissiez un CSV fichier contenant 1 000 lignes et que vous spécifiiez une limite de 100. Ensuite, l'interpréteur ne transmet que 100 lignes à l'Mapétat. L'Mapétat traite les éléments dans un ordre séquentiel, en commençant après la ligne d'en-tête.

    Par défaut, l'Mapétat itère sur tous les éléments de l'ensemble de données spécifié.

    Note

    À l'heure actuelle, vous pouvez définir une limite maximale de 100 000 000. L'état de la carte distribuée arrête de lire les éléments au-delà de cette limite.

    Astuce

    Dans Workflow Studio, vous pouvez trouver cette option sous Configuration supplémentaire dans le champ Source de l'élément.

    Vous pouvez également spécifier un chemin de référence vers une paire clé-valeur existante dans l'entrée d'état de votre carte distribuée. Ce chemin doit être résolu en un entier positif. Vous spécifiez le chemin de référence dans le MaxItemsPath sous-champ.

    Important

    Vous pouvez spécifier le MaxItems ou le MaxItemsPath sous-champ, mais pas les deux.

Resource

L'APIaction Amazon S3 que Step Functions doit invoquer en fonction de l'ensemble de données spécifié.

Parameters

Un JSON objet qui spécifie le nom du compartiment Amazon S3 et la clé d'objet dans lesquels l'ensemble de données est stocké.

Important

Assurez-vous que vos compartiments Amazon S3 se trouvent sous le même Compte AWS emplacement Région AWS que votre machine à états.

Exemples de jeux de données

Vous pouvez définir l'une des options suivantes comme jeu de données :

Important

Step Functions a besoin des autorisations appropriées pour accéder aux ensembles de données Amazon S3 que vous utilisez. Pour plus d'informations sur IAM les politiques relatives aux ensembles de données, consultezIAMpolitiques relatives aux ensembles de données.

L'état d'une carte distribuée peut accepter une JSON entrée transmise depuis une étape précédente du flux de travail. Cette entrée doit être soit un tableau, soit contenir un tableau dans un nœud spécifique. Pour sélectionner un nœud contenant le tableau, vous pouvez utiliser le ItemsPath (Carte) champ.

Pour traiter les éléments individuels du tableau, l'état de la carte distribuée lance l'exécution d'un flux de travail enfant pour chaque élément du tableau. Les onglets suivants présentent des exemples d'entrée transmise à l'Mapétat et d'entrée correspondante à l'exécution d'un flux de travail enfant.

Note

Step Functions omet le ItemReader champ lorsque votre ensemble de données est un JSON tableau issu d'une étape précédente.

Input passed to the Map state

Considérez le JSON tableau suivant de trois éléments.

"facts": [ { "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }, { "verdict": "false", "statement_date": "6/7/2022", "statement_source": "television" }, { "verdict": "mostly-true", "statement_date": "5/18/2016", "statement_source": "news" } ]
Input passed to a child workflow execution

L'état de la carte distribuée lance trois exécutions de flux de travail secondaires. Chaque exécution reçoit un élément de tableau en entrée. L'exemple suivant montre l'entrée reçue par l'exécution d'un flux de travail enfant.

{ "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }

L'état d'une carte distribuée peut être itéré sur les objets stockés dans un compartiment Amazon S3. Lorsque l'exécution du flux de travail atteint Map cet état, Step Functions invoque l'APIaction ListObjectsV2, qui renvoie un tableau des métadonnées de l'objet Amazon S3. Dans ce tableau, chaque élément contient des données, telles que ETaget Key, pour les données stockées dans le compartiment.

Pour traiter les éléments individuels du tableau, l'état de la carte distribuée lance l'exécution d'un flux de travail enfant. Supposons, par exemple, que votre compartiment Amazon S3 contienne 100 images. Ensuite, le tableau renvoyé après avoir invoqué l'ListObjectsV2APIaction contient 100 éléments. L'état de la carte distribuée lance ensuite 100 exécutions de flux de travail secondaires pour traiter chaque élément du tableau.

Note
  • Actuellement, Step Functions inclut également un élément pour chaque dossier que vous créez dans un compartiment Amazon S3 spécifique à l'aide de la console Amazon S3. Cela entraîne l'exécution d'un flux de travail secondaire supplémentaire lancé par l'état de la carte distribuée. Pour éviter de créer une exécution de flux de travail secondaire supplémentaire pour le dossier, nous vous recommandons d'utiliser le AWS CLI pour créer des dossiers. Pour plus d'informations, consultez la section Commandes Amazon S3 de haut niveau dans le guide de AWS Command Line Interface l'utilisateur.

  • Step Functions a besoin des autorisations appropriées pour accéder aux ensembles de données Amazon S3 que vous utilisez. Pour plus d'informations sur IAM les politiques relatives aux ensembles de données, consultezIAMpolitiques relatives aux ensembles de données.

Les onglets suivants présentent des exemples de syntaxe de ItemReader champ et d'entrée transmise à l'exécution d'un flux de travail enfant pour cet ensemble de données.

ItemReader syntax

Dans cet exemple, vous avez organisé vos données, qui incluent des images, des JSON fichiers et des objets, dans un préfixe nommé processData dans un compartiment Amazon S3 nommémyBucket.

"ItemReader": { "Resource": "arn:aws:states:::s3:listObjectsV2", "Parameters": { "Bucket": "myBucket", "Prefix": "processData" } }
Input passed to a child workflow execution

L'état de la carte distribuée lance autant d'exécutions de flux de travail enfants que le nombre d'éléments présents dans le compartiment Amazon S3. L'exemple suivant montre l'entrée reçue par l'exécution d'un flux de travail enfant.

{ "Etag": "\"05704fbdccb224cb01c59005bebbad28\"", "Key": "processData/images/n02085620_1073.jpg", "LastModified": 1668699881, "Size": 34910, "StorageClass": "STANDARD" }

L'état d'une carte distribuée peut accepter un JSON fichier stocké dans un compartiment Amazon S3 en tant que jeu de données. Le JSON fichier doit contenir un tableau.

Lorsque l'exécution du flux de travail atteint Map cet état, Step Functions appelle l'GetObjectAPIaction pour récupérer le fichier spécifiéJSON. L'Mapétat itère ensuite sur chaque élément du tableau et lance l'exécution d'un flux de travail secondaire pour chaque élément. Par exemple, si votre JSON fichier contient 1 000 éléments de tableau, l'MapÉtat lance 1 000 exécutions de flux de travail enfants.

Note
  • L'entrée d'exécution utilisée pour démarrer l'exécution d'un flux de travail enfant ne peut pas dépasser 256 Ko. Step Functions prend toutefois en charge la lecture d'un élément d'une taille maximale de 8 Mo à partir d'un JSON fichier CSV OR si vous appliquez ensuite le ItemSelector champ facultatif pour réduire la taille de l'élément.

  • Actuellement, Step Functions prend en charge 10 Go comme taille maximale d'un fichier individuel dans un rapport d'inventaire Amazon S3. Step Functions peut toutefois traiter plus de 10 Go si la taille de chaque fichier est inférieure à 10 Go.

  • Step Functions a besoin des autorisations appropriées pour accéder aux ensembles de données Amazon S3 que vous utilisez. Pour plus d'informations sur IAM les politiques relatives aux ensembles de données, consultezIAMpolitiques relatives aux ensembles de données.

Les onglets suivants présentent des exemples de syntaxe de ItemReader champ et d'entrée transmise à l'exécution d'un flux de travail enfant pour cet ensemble de données.

Pour cet exemple, imaginez que vous avez un JSON fichier nomméfactcheck.json. Vous avez stocké ce fichier dans un préfixe nommé jsonDataset dans un compartiment Amazon S3. Voici un exemple de JSON jeu de données.

[ { "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }, { "verdict": "false", "statement_date": "6/7/2022", "statement_source": "television" }, { "verdict": "mostly-true", "statement_date": "5/18/2016", "statement_source": "news" }, ... ]
ItemReader syntax
"ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "InputType": "JSON" }, "Parameters": { "Bucket": "myBucket", "Key": "jsonDataset/factcheck.json" } }
Input to a child workflow execution

L'état de la carte distribuée lance autant d'exécutions de flux de travail enfants que le nombre d'éléments du tableau présents dans le JSON fichier. L'exemple suivant montre l'entrée reçue par l'exécution d'un flux de travail enfant.

{ "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }

L'état d'une carte distribuée peut accepter un CSV fichier stocké dans un compartiment Amazon S3 en tant que jeu de données. Si vous utilisez un CSV fichier comme ensemble de données, vous devez spécifier un en-tête de CSV colonne. Pour plus d'informations sur la manière de spécifier un CSV en-tête, consultezContenu du ItemReader champ.

Comme il n'existe pas de format standardisé pour créer et gérer les données dans CSV les fichiers, Step Functions analyse CSV les fichiers selon les règles suivantes :

  • Les virgules (,) sont des séparateurs qui séparent les champs individuels.

  • Les nouvelles lignes sont un séparateur qui sépare les enregistrements individuels.

  • Les champs sont traités comme des chaînes. Pour les conversions de type de données, utilisez la fonction States.StringToJson intrinsèque dansItemSelector (Carte).

  • Les guillemets doubles (» «) ne sont pas nécessaires pour entourer les chaînes. Toutefois, les chaînes placées entre guillemets doubles peuvent contenir des virgules et des nouvelles lignes sans qu'elles servent de délimiteurs.

  • Évitez les guillemets doubles en les répétant.

  • Si le nombre de champs d'une ligne est inférieur au nombre de champs de l'en-tête, Step Functions fournit des chaînes vides pour les valeurs manquantes.

  • Si le nombre de champs d'une ligne est supérieur au nombre de champs de l'en-tête, Step Functions ignore les champs supplémentaires.

Pour plus d'informations sur la façon dont Step Functions analyse un CSV fichier, consultezExample of parsing an input CSV file.

Lorsque l'exécution du flux de travail atteint Map cet état, Step Functions appelle l'GetObjectAPIaction pour récupérer le fichier spécifiéCSV. L'Mapétat itère ensuite sur chaque ligne du CSV fichier et lance l'exécution d'un flux de travail enfant pour traiter les éléments de chaque ligne. Supposons, par exemple, que vous CSV fournissiez un fichier contenant 100 lignes en entrée. Ensuite, l'interpréteur passe chaque ligne à l'Mapétat. L'Mapétat traite les éléments par ordre de série, en commençant après la ligne d'en-tête.

Note
  • L'entrée d'exécution utilisée pour démarrer l'exécution d'un flux de travail enfant ne peut pas dépasser 256 Ko. Step Functions prend toutefois en charge la lecture d'un élément d'une taille maximale de 8 Mo à partir d'un JSON fichier CSV OR si vous appliquez ensuite le ItemSelector champ facultatif pour réduire la taille de l'élément.

  • Actuellement, Step Functions prend en charge 10 Go comme taille maximale d'un fichier individuel dans un rapport d'inventaire Amazon S3. Step Functions peut toutefois traiter plus de 10 Go si la taille de chaque fichier est inférieure à 10 Go.

  • Step Functions a besoin des autorisations appropriées pour accéder aux ensembles de données Amazon S3 que vous utilisez. Pour plus d'informations sur IAM les politiques relatives aux ensembles de données, consultezIAMpolitiques relatives aux ensembles de données.

Les onglets suivants présentent des exemples de syntaxe de ItemReader champ et d'entrée transmise à l'exécution d'un flux de travail enfant pour cet ensemble de données.

ItemReader syntax

Supposons, par exemple, que vous ayez un CSV fichier nommératings.csv. Vous avez ensuite stocké ce fichier dans un préfixe nommé csvDataset dans un compartiment Amazon S3.

{ "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "myBucket", "Key": "csvDataset/ratings.csv" } } }
Input to a child workflow execution

L'état de la carte distribuée lance autant d'exécutions de flux de travail enfants que le nombre de lignes présentes dans le CSV fichier, à l'exception de la ligne d'en-tête, si elle se trouve dans le fichier. L'exemple suivant montre l'entrée reçue par l'exécution d'un flux de travail enfant.

{ "rating": "3.5", "movieId": "307", "userId": "1", "timestamp": "1256677221" }

Un état de carte distribuée peut accepter un fichier manifeste d'inventaire Amazon S3 stocké dans un compartiment Amazon S3 en tant que jeu de données.

Lorsque l'exécution du flux de travail atteint son Map état, Step Functions appelle l'GetObjectAPIaction pour récupérer le fichier manifeste d'inventaire Amazon S3 spécifié. L'Mapétat passe ensuite en revue les objets de l'inventaire pour renvoyer un tableau de métadonnées des objets d'inventaire Amazon S3.

Note
  • Actuellement, Step Functions prend en charge 10 Go comme taille maximale d'un fichier individuel dans un rapport d'inventaire Amazon S3. Step Functions peut toutefois traiter plus de 10 Go si la taille de chaque fichier est inférieure à 10 Go.

  • Step Functions a besoin des autorisations appropriées pour accéder aux ensembles de données Amazon S3 que vous utilisez. Pour plus d'informations sur IAM les politiques relatives aux ensembles de données, consultezIAMpolitiques relatives aux ensembles de données.

Voici un exemple de fichier d'inventaire au CSV format. Ce fichier inclut les objets nommés csvDataset etimageDataset, qui sont stockés dans un compartiment Amazon S3 nommésourceBucket.

"sourceBucket","csvDataset/","0","2022-11-16T00:27:19.000Z" "sourceBucket","csvDataset/titles.csv","3399671","2022-11-16T00:29:32.000Z" "sourceBucket","imageDataset/","0","2022-11-15T20:00:44.000Z" "sourceBucket","imageDataset/n02085620_10074.jpg","27034","2022-11-15T20:02:16.000Z" ...
Important

À l'heure actuelle, Step Functions ne prend pas en charge le rapport d'inventaire Amazon S3 défini par l'utilisateur sous forme de jeu de données. Vous devez également vous assurer que le format de sortie de votre rapport d'inventaire Amazon S3 est le suivantCSV. Pour plus d'informations sur les inventaires Amazon S3 et sur la façon de les configurer, consultez Amazon S3 Inventory dans le guide de l'utilisateur Amazon S3.

L'exemple suivant de fichier manifeste d'inventaire montre les CSV en-têtes des métadonnées des objets d'inventaire.

{ "sourceBucket" : "sourceBucket", "destinationBucket" : "arn:aws:s3:::inventory", "version" : "2016-11-30", "creationTimestamp" : "1668560400000", "fileFormat" : "CSV", "fileSchema" : "Bucket, Key, Size, LastModifiedDate", "files" : [ { "key" : "source-bucket/destination-prefix/data/20e55de8-9c21-45d4-99b9-46c732000228.csv.gz", "size" : 7300, "MD5checksum" : "a7ff4a1d4164c3cd55851055ec8f6b20" } ] }

Les onglets suivants présentent des exemples de syntaxe de ItemReader champ et d'entrée transmise à l'exécution d'un flux de travail enfant pour cet ensemble de données.

ItemReader syntax
{ "ItemReader": { "ReaderConfig": { "InputType": "MANIFEST" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "destinationBucket", "Key": "destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json" } } }
Input to a child workflow execution
{ "LastModifiedDate": "2022-11-16T00:29:32.000Z", "Bucket": "sourceBucket", "Size": "3399671", "Key": "csvDataset/titles.csv" }

Selon les champs que vous avez sélectionnés lors de la configuration du rapport d'inventaire Amazon S3, le contenu de votre manifest.json fichier peut différer de celui présenté dans l'exemple illustré.

IAMpolitiques relatives aux ensembles de données

Lorsque vous créez des flux de travail avec la console Step Functions, Step Functions peut générer automatiquement des IAM politiques basées sur les ressources incluses dans votre définition de flux de travail. Ces politiques incluent le minimum de privilèges nécessaires pour permettre au rôle de machine d'état d'invoquer l'StartExecutionAPIaction pour l'état de la carte distribuée. Ces politiques incluent également le minimum de privilèges nécessaires aux Step Functions pour accéder aux AWS ressources, telles que les buckets et les objets Amazon S3 et les fonctions Lambda. Nous vous recommandons vivement de n'inclure que les autorisations nécessaires dans vos IAM politiques. Par exemple, si votre flux de travail inclut un Map état en mode distribué, limitez vos politiques au compartiment et au dossier Amazon S3 spécifiques qui contiennent votre ensemble de données.

Important

Si vous spécifiez un compartiment et un objet Amazon S3, ou un préfixe, avec un chemin de référence vers une paire clé-valeur existante dans l'entrée d'état de votre carte distribuée, assurez-vous de mettre à jour les IAM politiques de votre flux de travail. Élargissez les politiques jusqu'au bucket et aux noms d'objets auxquels le chemin aboutit au moment de l'exécution.

Les exemples de IAM politiques suivants accordent le minimum de privilèges requis pour accéder à vos ensembles de données Amazon S3 à l'aide de la ListObjectsV2 et GetObjectAPIdes actions.

Exemple IAMpolitique relative à l'objet Amazon S3 en tant que jeu de données

L'exemple suivant montre une IAM politique qui accorde le moins de privilèges pour accéder aux objets organisés processImages dans un compartiment Amazon S3 nommémyBucket.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::myBucket" ], "Condition": { "StringLike": { "s3:prefix": [ "processImages" ] } } } ] }
Exemple IAMpolitique pour un CSV fichier en tant que jeu de données

L'exemple suivant montre une IAM politique qui accorde le moins de privilèges pour accéder à un CSV fichier nommératings.csv.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::myBucket/csvDataset/ratings.csv" ] } ] }
Exemple IAMpolitique pour un inventaire Amazon S3 sous forme de jeu de données

L'exemple suivant montre une IAM politique qui accorde le moins de privilèges pour accéder à un rapport d'inventaire Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json", "arn:aws:s3:::destination-prefix/source-bucket/config-ID/data/*" ] } ] }