View a markdown version of this page

AWSSupport-ValidateMWAADependencies - AWS Systems Manager Référence du dossier d’exploitation Automation

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.

AWSSupport-ValidateMWAADependencies

Description

Le AWSSupport-ValidateMWAADependencies runbook valide les dépendances Python de l'environnement Amazon Managed Workflows for Apache Airflow (Amazon MWAA). Pour ce faire, il exécute la commande de test amazon-mwaa-docker-images sur une instance Amazon EC2. Cela confirme que vos packages Python fonctionnent avec votre version cible d'Airflow. Il contient également des fichiers Wheel pour les environnements sans accès au réseau public.

Cas d'utilisation :

  • Validation des dépendances : vérifiez que les dépendances (fichier d'exigences) avec des contraintes par défaut ou personnalisées sont compatibles avant de mettre à niveau ou de rétrograder l'environnement Amazon MWAA vers une version Airflow spécifique.

  • Package Wheel Files : générez des fichiers Wheel packagés plugins.zip pour les environnements ne disposant pas d'accès au réseau public.

Important

Cette automatisation entraîne des AWS coûts supplémentaires. L'automatisation fournit une instance t3.large Amazon EC2 avec un gp3 volume de 50 Go sur votre compte via. CloudFormation Cette instance récupère le référentiel amazon-mwaa-docker-images, valide les dépendances et empaquète les fichiers Wheel. L'instance est automatiquement interrompue après son exécution.

Note
  • Si des modules Python non pris en charge sont détectés : pour les modules versionnés, la version spécifique est mise à jour ou supprimée, et la commande de test est réexécutée. Pour les modules non versionnés, le module est commenté et la commande de test est réexécutée. Ce processus se poursuit jusqu'à ce que tous les modules soient pris en charge ou que la limite maximale de tentatives (20 tentatives) soit atteinte.

  • L'empaquetage du fichier Wheel ne s'exécute que lorsque le fichier d'exigences contient une --find-links directive pointant vers le chemin d'un plugin et le --no-index drapeau.

  • Le fichier d'exigences et le fichier de contraintes personnalisées doivent être stockés dans le compartiment Amazon S3 spécifié dans les paramètres d'entrée. Tous les fichiers générés, y compris le requirements.txt fichier mis à jour, plugins.zip le fichier (le cas échéant), les journaux et le rapport, sont chargés dans le même compartiment Amazon S3.

  • Ce runbook ne prend en charge que les versions 2.9.2 et ultérieures d'Airflow. Si la validation d'une version précédente est requise, utilisez aws-mwaa-local-runner.

Fonctionnement

Le runbook exécute les étapes suivantes :

  • Vérifie si le compartiment Amazon S3 cible accorde potentiellement un accès public en lecture ou en écriture à ses objets.

  • Valide les paramètres d'entrée, notamment les autorisations IAM, l'emplacement et la propriété du compartiment Amazon S3, l'existence du fichier, la version cible d'Airflow et l'accès au réseau public du sous-réseau.

  • Récupère la dernière AMI Amazon Linux 2023.

  • Crée une CloudFormation pile comprenant un rôle IAM, un profil d'instance, un groupe de sécurité et une instance Amazon EC2 d'Amazon MWAA Runner.

  • Attend que l'instance Amazon EC2 soit initialisée.

  • Exécute des commandes sur l'instance pour valider les dépendances Amazon MWAA et télécharger les fichiers Wheel si nécessaire.

  • Nettoie les ressources créées en supprimant la CloudFormation pile.

  • Génère le rapport final et le télécharge dans le compartiment Amazon S3.

Exécuter cette automatisation (console)

Type de document

 Automatisation

Propriétaire

Amazon

Plateformes

/

Autorisations IAM requises

Le AutomationAssumeRole paramètre nécessite les actions suivantes pour utiliser correctement le runbook.

  • formation des nuages : CreateStack

  • formation des nuages : DeleteStack

  • formation des nuages : DescribeStacks

  • EC2 : AuthorizeSecurityGroupEgress

  • EC2 : CreateSecurityGroup

  • EC2 : CreateTags

  • EC2 : DeleteSecurityGroup

  • EC2 : DescribeImages

  • EC2 : DescribeInstances

  • EC2 : DescribeInstanceStatus

  • EC2 : DescribeRouteTables

  • EC2 : DescribeSecurityGroups

  • EC2 : DescribeSubnets

  • EC2 : DescribeVpcs

  • EC2 : ModifyInstanceAttribute

  • EC2 : RevokeSecurityGroupEgress

  • EC2 : RunInstances

  • EC2 : TerminateInstances

  • iam : AddRoleToInstanceProfile

  • iam : AttachRolePolicy

  • iam : CreateInstanceProfile

  • iam : CreateRole

  • iam : DeleteInstanceProfile

  • iam : DeleteRole

  • iam : DeleteRolePolicy

  • iam : DetachRolePolicy

  • iam : GetInstanceProfile

  • iam : GetRole

  • iam : GetRolePolicy

  • iam : PassRole

  • iam : PutRolePolicy

  • iam : RemoveRoleFromInstanceProfile

  • iam : SimulatePrincipalPolicy

  • iam : TagRole

  • s3 : GetAccountPublicAccessBlock

  • s3 : GetBucketAcl

  • s3 : GetBucketLocation

  • s3 : GetBucketPolicyStatus

  • s3 : GetBucketPublicAccessBlock

  • s3 : GetEncryptionConfiguration

  • s3 : GetObject

  • s3 : ListBucket

  • s3 : PutObject

  • SMS : DescribeInstanceInformation

  • SMS : GetAutomationExecution

  • SMS : GetCommandInvocation

  • SMS : GetParameter

  • SMS : ListCommandInvocations

  • SMS : ListCommands

  • SMS : SendCommand

  • SMS : StartAutomationExecution

  • sets : GetCallerIdentity

Exemple de politique :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnlyPermissions", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:DescribeImages", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "iam:SimulatePrincipalPolicy", "iam:GetRolePolicy", "s3:GetAccountPublicAccessBlock", "ssm:GetParameter" ], "Resource": "*" }, { "Sid": "CloudFormationPermissions", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks" ], "Resource": "arn:<aws|aws-cn|aws-us-gov>:cloudformation:*:*:stack/MWAA-Runner-*" }, { "Sid": "MWAARunnerInstancesEC2Permissions", "Effect": "Allow", "Action": [ "ec2:TerminateInstances", "ec2:ModifyInstanceAttribute" ], "Resource": "*", "Condition": { "StringLike": { "ec2:ResourceTag/Name": "mwaa-runner-*" } } }, { "Sid": "EC2CreateTagsOnMWAARunnerResources", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*", "Condition": { "StringLike": { "aws:RequestTag/Name": "mwaa-runner-*" } } }, { "Sid": "EC2CreateTagsOnStackCreation", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*", "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } }, { "Sid": "MWAAInstanceRoleIAMPermissions", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:DeleteRole", "iam:DetachRolePolicy", "iam:GetRole", "iam:PutRolePolicy", "iam:DeleteRolePolicy", "iam:GetRolePolicy", "iam:TagRole" ], "Resource": "arn:<aws|aws-cn|aws-us-gov>:iam::*:role/mwaa-instance-role-*" }, { "Sid": "MWAAInstanceProfileIAMPermissions", "Effect": "Allow", "Action": [ "iam:CreateInstanceProfile", "iam:DeleteInstanceProfile", "iam:GetInstanceProfile", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile" ], "Resource": "arn:<aws|aws-cn|aws-us-gov>:iam::*:instance-profile/mwaa-instance-profile-*" }, { "Sid": "S3AccessPermissions", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:GetBucketPolicyStatus", "s3:GetBucketPublicAccessBlock", "s3:GetEncryptionConfiguration", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:<aws|aws-cn|aws-us-gov>:s3:::<S3BucketName>", "arn:<aws|aws-cn|aws-us-gov>:s3:::<S3BucketName>/*" ] }, { "Sid": "SSMAutomationExecution", "Effect": "Allow", "Action": [ "ssm:GetAutomationExecution", "ssm:StartAutomationExecution" ], "Resource": [ "arn:<aws|aws-cn|aws-us-gov>:ssm:*:*:automation-definition/AWSSupport-ValidateMWAADependencies:*", "arn:<aws|aws-cn|aws-us-gov>:ssm:*:*:automation-execution/*" ] }, { "Sid": "OtherMutationPermissions", "Effect": "Allow", "Action": [ "ec2:CreateSecurityGroup", "ec2:DeleteSecurityGroup", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress", "ec2:RunInstances", "s3:GetAccountPublicAccessBlock", "ssm:GetCommandInvocation", "ssm:ListCommands", "ssm:ListCommandInvocations", "ssm:DescribeInstanceInformation", "ssm:SendCommand", "sts:GetCallerIdentity" ], "Resource": "*" }, { "Sid": "PassRolePermission", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:<aws|aws-cn|aws-us-gov>:iam::*:role/mwaa-instance-role-*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } } ] }

Instructions

Pour configurer l'automatisation, procédez comme suit :

  1. Accédez AWSSupport-ValidateMWAADependenciesà Systems Manager dans la section Documents.

  2. Choisissez Execute automation (Exécuter l’automatisation). Assurez-vous que votre rôle IAM dispose des autorisations requises répertoriées dans la section des autorisations précédente avant de l'exécuter.

  3. Pour les paramètres d'entrée, entrez ce qui suit :

    • S3BucketName (Obligatoire) :

      Entrez le nom du compartiment Amazon S3 dans votre compte où vous souhaitez télécharger les journaux de dépannage. Assurez-vous que la politique des compartiments n'accorde pas d' read/write autorisations inutiles aux parties qui n'ont pas besoin d'accéder aux journaux collectés.

    • RequirementsFilePath (Obligatoire) :

      La clé d'objet Amazon S3 du fichier d'exigences dans le compartiment Amazon S3. Doit se terminer par l'.txtextension.

    • ConstraintsFilePath (Facultatif) :

      La clé d'objet Amazon S3 du fichier de contraintes personnalisées dans le compartiment Amazon S3. Doit se terminer par l'.txtextension si elle est fournie.

    • TargetAirflowVersion (Obligatoire) :

      Version d'Airflow à utiliser pour valider les dépendances. La version cible doit être prise en charge par Amazon MWAA. Format : X.Y.Z (par exemple,2.9.2).

    • SubnetId (Obligatoire) :

      Sous-réseau disposant d'un accès au réseau public pour lancer l'instance Amazon EC2 d'Amazon MWAA Runner. Format :subnet-xxxxxxxxx.

    • AutomationAssumeRole (Facultatif) :

      L'Amazon Resource Name (ARN) du rôle IAM qui permet à Systems Manager Automation d'effectuer les actions en votre nom. Si aucun rôle n'est spécifié, Systems Manager Automation utilise les autorisations de l'utilisateur qui lance ce runbook.

    • AcknowledgeIAMPolicyWarnings (Obligatoire) :

      Ce runbook vérifie à l'avance si votre rôle IAM dispose des autorisations requises en utilisant. SimulatePrincipalPolicy Cette vérification peut produire des résultats inexacts si votre police utilise des conditions ou des restrictions au niveau des ressources. Sélectionnez cette option YES pour accuser réception et continuer.

  4. Sélectionnez Execute (Exécuter).

  5. L'automatisation démarre.

  6. Le document exécute les étapes suivantes :

    • GetBucketPublicStatus:

      Vérifie si le compartiment Amazon S3 cible accorde potentiellement un accès public en lecture ou en écriture à ses objets.

    • ValidateInput:

      Valide les paramètres d'entrée, notamment les autorisations IAM, l'emplacement et la propriété du compartiment Amazon S3, l'existence du fichier, la version cible d'Airflow et l'accès au réseau public du sous-réseau.

    • BranchOnValidationResult:

      Branche le flux de travail en fonction de la validité des paramètres d'entrée.

    • GetLatestAMI:

      Récupère la dernière image de l'AMI pour Amazon Linux 2023.

    • CreateMWAARunnerStack:

      Crée une CloudFormation pile comprenant un rôle IAM, un profil d'instance, un groupe de sécurité et une instance Amazon EC2 d'Amazon MWAA Runner.

    • GetInstanceId:

      Récupère l'ID de l'instance Amazon EC2 à partir de CloudFormation la sortie de la pile.

    • WaitForInstanceInitialization:

      Vérifie l'état de l'instance Amazon EC2 et attend l'initialisation.

    • RunCommands:

      Exécute des commandes sur l'instance pour valider les dépendances Amazon MWAA et télécharger les fichiers Wheel si nécessaire.

    • Cleanup:

      Nettoie les ressources créées en supprimant la CloudFormation pile.

    • GenerateReport:

      Génère le rapport final en fonction des résultats des étapes précédentes et télécharge le rapport dans le compartiment Amazon S3.

  7. Une fois l'automatisation terminée, consultez la section Sorties pour obtenir des résultats d'exécution détaillés.

Références

Systems Manager Automation