1
votes

Création automatique de tâches AWS Glue

J'ai un script pyspark que je peux exécuter dans AWS GLUE. Mais chaque fois que je crée un travail à partir de l'interface utilisateur et que je copie mon code dans le travail, je peux créer automatiquement un travail à partir de mon fichier dans s3 bucket. (J'ai toute la bibliothèque et le contexte de colle qui seront utilisés lors de l'exécution)


2 commentaires

Que faire si vous utilisez une S3EventNotification lorsqu'un fichier arrive pour déclencher un Lambda qui crée ensuite une tâche Glue spécifique.


Oui, AWS fournit à la fois la commande AWS cli et le client boto3 qui peuvent créer, exécuter et supprimer une tâche Glue de manière dynamique. Il y a suffisamment de documentation disponible avec des exemples sur AWS


3 Réponses :



4
votes

Une autre alternative consiste à utiliser AWS CloudFormation . Vous pouvez définir toutes les ressources AWS que vous souhaitez créer (pas seulement les tâches Glue) dans un fichier modèle, puis mettre à jour la pile chaque fois que vous en avez besoin à partir de AWS Console ou using cli .

Modèle pour un Le travail de colle ressemblerait à ceci:

  MyJob:
    Type: AWS::Glue::Job
    Properties:
      Command:
        Name: glueetl
        ScriptLocation: "s3://aws-glue-scripts//your-script-file.py"
      DefaultArguments:
        "--job-bookmark-option": "job-bookmark-enable"
      ExecutionProperty:
        MaxConcurrentRuns: 2
      MaxRetries: 0
      Name: cf-job1
      Role: !Ref MyJobRole # reference to a Role resource which is not presented here


6 commentaires

Excellente information. J'essayais de rechercher un modèle CloudFormation pour créer plusieurs GlueJobs à la fois. c'est-à-dire votre-fichier-script1.py et votre-fichier-script2.py. Est-ce possible via CloudFormation?


@RaxitSolanki absolument. Définissez simplement une autre ressource de type AWS :: Glue :: Job avec un nom logique différent (c'est-à-dire MyJob1 )


Merci ! Cela signifie que chaque fois que nous créons un nouveau script GlueJob, nous devons également mettre à jour le modèle CloudFormation. Quelle serait la meilleure pratique pour intégrer GlueJob (test, déploiement) à l'aide de CodePipeline / CloudFormation? Supposons que j'ai créé un nouveau script GlueJob et modifié un GlueJob existant (a.py et b.py) dans mon GitRepo. maintenant, je souhaite déployer uniquement le travail nouvellement créé / modifié (c'est-à-dire celui qui a été modifié / créé lors du commit précédent). J'utilise actuellement CloudFormation, "Git-source" -> Tests CodeBuild et enregistre les artefacts dans S3 Bucket. Mais je ne sais pas comment déployer (plusieurs emplois).


@YuriyBondaruk Lequel est le nom logique ici? Le 'Nom' dans les propriétés, ou le 'Nom' dans la commande.


@abhijitcaps non plus. C'est le nom d'une ressource. Dans mon exemple, c'est l'élément racine appelé "MyJob"


Merci beaucoup pour l'explication @YuriyBondaruk



0
votes

J'ai écrit un script qui suit:

  1. Nous avons le fichier (glue) _dependency.txt, le script récupère le chemin de tous les fichiers de dépendance et crée un fichier zip.
  2. Il télécharge le fichier glue et le fichier zip dans S3 en utilisant la synchronisation s3
  3. Le cas échéant, si une modification des paramètres de la tâche redéploiera le modèle cloudformation

Vous pouvez écrire un script shell pour le faire.


0 commentaires