Est-il possible de commander des actions Source dans CodePipeline?
J'ai deux sources différentes dans mon CodePipeline, ECR et S3. Mon pipeline de déploiement télécharge un zip sur S3, puis une image sur ECR.
J'ai besoin de CodePipeline pour détecter uniquement la validation ECR, qui se produit en dernier, puis déclencher l'action source S3. Cependant, celui qui est détecté en premier démarre le CodePipeline, ce qui conduit à une condition de concurrence dans laquelle l'image de la nouvelle version n'a pas encore été téléchargée.
Comment puis-je résoudre ça? Je ne peux pas déplacer S3 hors de l'étape Source, conformément aux limitations de CodePipeline. J'ai essayé de déplacer ce téléchargement S3 vers une fonction Lambda, mais je n'arrive pas à renvoyer le zip à CodePipeline en tant qu'artefact de sortie.
Réponses
En tant que déclencheur pour l'exécution de CodePipeline, définissez le déclencheur d'événement CloudWatch uniquement pour ECR, pas pour les modifications S3. Désactivez le déclencheur / tirage intégré du Pipeline.
https://docs.aws.amazon.com/codepipeline/latest/userguide/create-cwe-ecr-source-console.html Cela garantira que seul ECR déclenche une exécution de pipeline.
Si le moyen prévu est de faire traiter le commit ECR avec tout ce qui est téléchargé sur votre S3, et en supposant qu'il s'agit d'une nouvelle version du même nom d'objet exact, vous pouvez obtenir ces données dans votre étape de construction de votre pipeline, en tirant la dernière version. comme vous l'avez essayé avec la fonction Lambda; ou ayez une autre manière d'identifier ce nouvel objet S3.
Si vous téléchargez le contenu zip sur S3 et que vous engagez ensuite le push ECR, vous pouvez certainement déplacer le compartiment S3 hors de la phase Source et le rendre quelque peu indépendant en ce qui concerne le pipeline et les déclencheurs. Ce sera une autre étape de votre projet Build à la phase appropriée.