

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`
<a name="automation-awssupport-validatemwaadependencies"></a>

 **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)](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ValidateMWAADependencies) 

**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`](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description)à Systems Manager dans la section Documents.

1. 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.

1. 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'`.txt`extension.
   + **ConstraintsFilePath (Facultatif) :**

     La clé d'objet Amazon S3 du fichier de contraintes personnalisées dans le compartiment Amazon S3. Doit se terminer par l'`.txt`extension 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.

1. Sélectionnez **Execute (Exécuter)**.

1. L'automatisation démarre.

1. 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.

1. 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
+ [Exécuter cette automatisation (console)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description)
+ [Exécuter une automatisation](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [Configuration d'une automatisation](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Support des flux de travail automatisés](https://aws.amazon.com/premiumsupport/technology/saw/)