

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# `AWSSupport-ValidateMWAADependencies`
<a name="automation-awssupport-validatemwaadependencies"></a>

 **Descrizione** 

Il `AWSSupport-ValidateMWAADependencies` runbook convalida le dipendenze Python dell'ambiente Amazon Managed Workflows for Apache Airflow (Amazon MWAA). A tale scopo, esegue il comando di test amazon-mwaa-docker-images su un'istanza Amazon EC2. Ciò verifica che i tuoi pacchetti Python funzionino con la versione di Airflow di destinazione. Inoltre, crea pacchetti di file wheel per ambienti senza accesso alla rete pubblica.

 **Casi d'uso:** 
+ **Convalida delle dipendenze**: verifica che le dipendenze (file dei requisiti) con vincoli predefiniti o personalizzati siano compatibili prima di effettuare l'upgrade o il downgrade dell'ambiente Amazon MWAA a una versione Airflow specifica.
+ **Package Wheel Files**: genera file wheel impacchettati `plugins.zip` per ambienti che non hanno accesso alla rete pubblica.

**Importante**  
Questa automazione comporta costi aggiuntivi AWS . L'automazione fornisce un'istanza `t3.large` Amazon EC2 con un `gp3` volume di 50 GB nel tuo account tramite. CloudFormation Questa istanza recupera l'archivio amazon-mwaa-docker-images, convalida le dipendenze e impacchetta i file wheel. L'istanza viene terminata automaticamente dopo l'esecuzione.

**Nota**  
Se vengono rilevati moduli Python non supportati: per i moduli con versione, la versione specifica viene aggiornata o rimossa e il comando test viene eseguito nuovamente. Per i moduli senza versione, il modulo viene commentato e il comando test viene eseguito nuovamente. Questo processo continua fino al supporto di tutti i moduli o fino al raggiungimento del limite massimo di tentativi (20 tentativi).
Il pacchetto del file Wheel viene eseguito solo quando il file dei requisiti contiene una `--find-links` direttiva che punta al percorso del plugin e al flag. `--no-index`
Il file dei requisiti e il file dei vincoli personalizzati devono essere archiviati nel bucket Amazon S3 specificato nei parametri di input. Tutti i file generati, inclusi il `requirements.txt` file aggiornato, `plugins.zip` il file (se applicabile), i log e il report, vengono caricati nello stesso bucket Amazon S3.
Questo runbook supporta solo Airflow versione 2.9.2 e successive. Se è richiesta la convalida per una versione precedente, usa aws-mwaa-local-runner.

 **Come funziona?** 

Il runbook esegue i seguenti passaggi:
+ Verifica se il bucket Amazon S3 di destinazione concede potenzialmente l'accesso pubblico in lettura o scrittura ai suoi oggetti.
+ Convalida i parametri di input tra cui le autorizzazioni IAM, la posizione e la proprietà del bucket Amazon S3, l'esistenza dei file, la versione di Airflow di destinazione e l'accesso alla rete pubblica di sottorete.
+ Recupera l'ultima AMI Amazon Linux 2023.
+ Crea uno CloudFormation stack che include un ruolo IAM, un profilo di istanza, un gruppo di sicurezza e un'istanza Amazon EC2 runner Amazon MWAA.
+ Attende l'inizializzazione dell'istanza Amazon EC2.
+ Esegue comandi sull'istanza per convalidare le dipendenze di Amazon MWAA e scaricare i file wheel, se necessario.
+ Pulisce le risorse create eliminando lo stack. CloudFormation 
+ Genera il report finale e lo carica nel bucket Amazon S3.

 [Esegui questa automazione (console)](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ValidateMWAADependencies) 

**Tipo di documento**

Automazione

**Proprietario**

Amazon

**Piattaforme**

/

**Autorizzazioni IAM richieste**

Il `AutomationAssumeRole` parametro richiede le seguenti azioni per utilizzare correttamente il runbook.
+ formazione di nuvole: CreateStack
+ formazione di nuvole: DeleteStack
+ formazione di nuvole: 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
+ obiettivo: AddRoleToInstanceProfile
+ Io sono: AttachRolePolicy
+ Io sono: CreateInstanceProfile
+ Io sono: CreateRole
+ Io sono: DeleteInstanceProfile
+ Io sono: DeleteRole
+ Io sono: DeleteRolePolicy
+ Io sono: DetachRolePolicy
+ Io sono: GetInstanceProfile
+ Io sono: GetRole
+ Io sono: GetRolePolicy
+ Io sono: PassRole
+ Io sono: PutRolePolicy
+ Io sono: RemoveRoleFromInstanceProfile
+ Io sono: SimulatePrincipalPolicy
+ Io sono: TagRole
+ s3: GetAccountPublicAccessBlock
+ s3: GetBucketAcl
+ s3: GetBucketLocation
+ s3: GetBucketPolicyStatus
+ s3: GetBucketPublicAccessBlock
+ s3: GetEncryptionConfiguration
+ s3: GetObject
+ s3: ListBucket
+ s3: PutObject
+ ssm: DescribeInstanceInformation
+ ssm: GetAutomationExecution
+ ssm: GetCommandInvocation
+ ssm: GetParameter
+ ssm: ListCommandInvocations
+ ssm: ListCommands
+ ssm: SendCommand
+ ssm: StartAutomationExecution
+ set: GetCallerIdentity

Politica di esempio: 

```
        {
            "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"
                        }
                    }
                }
            ]
        }
```

 **Istruzioni** 

Segui questi passaggi per configurare l'automazione:

1. Accedere [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description)a Systems Manager nella sezione Documenti.

1. Scegli **Esegui automazione**. Assicurati che il tuo ruolo IAM disponga delle autorizzazioni richieste elencate nella sezione sulle autorizzazioni precedente prima dell'esecuzione.

1. Per i parametri di input, inserisci quanto segue:
   + **S3BucketName (Obbligatorio):**

     Inserisci il nome del bucket Amazon S3 nel tuo account in cui desideri caricare i log di risoluzione dei problemi. Assicurati che la policy del bucket non conceda read/write autorizzazioni non necessarie a parti che non hanno bisogno di accedere ai log raccolti.
   + **RequirementsFilePath (Obbligatorio):**

     La chiave oggetto Amazon S3 del file dei requisiti nel bucket Amazon S3. Deve terminare con l'estensione. `.txt`
   + **ConstraintsFilePath (Facoltativo):**

     La chiave oggetto Amazon S3 del file dei vincoli personalizzati nel bucket Amazon S3. Deve terminare con l'estensione, se fornita. `.txt`
   + **TargetAirflowVersion (Obbligatorio):**

     La versione Airflow da utilizzare per convalidare le dipendenze. La versione di destinazione deve essere supportata da Amazon MWAA. Formato: `X.Y.Z` (ad es.). `2.9.2`
   + **SubnetId (Obbligatorio):**

     La sottorete con accesso alla rete pubblica per avviare l'istanza Amazon EC2 di Amazon MWAA runner. Formato:. `subnet-xxxxxxxxx`
   + **AutomationAssumeRole (Opzionale):**

     L'Amazon Resource Name (ARN) del ruolo IAM che consente a Systems Manager Automation di eseguire le azioni per tuo conto. Se non viene specificato alcun ruolo, Systems Manager Automation utilizza le autorizzazioni dell'utente che avvia questo runbook.
   + **AcknowledgeIAMPolicyWarnings (Obbligatorio):**

     Questo runbook verifica preventivamente se il tuo ruolo IAM dispone delle autorizzazioni richieste utilizzando. SimulatePrincipalPolicy Questo controllo può produrre risultati imprecisi se la policy utilizza condizioni o restrizioni a livello di risorsa. Seleziona `YES` per confermarlo e procedi.

1. Scegli **Esegui**.

1. L'automazione viene avviata.

1. Il documento esegue le seguenti operazioni:
   + **`GetBucketPublicStatus`**:

     Verifica se il bucket Amazon S3 di destinazione concede potenzialmente l'accesso pubblico in lettura o scrittura ai suoi oggetti.
   + **`ValidateInput`**:

     Convalida i parametri di input tra cui le autorizzazioni IAM, la posizione e la proprietà del bucket Amazon S3, l'esistenza dei file, la versione di Airflow di destinazione e l'accesso alla rete pubblica di sottorete.
   + **`BranchOnValidationResult`**:

     Suddivide il flusso di lavoro in base alla validità dei parametri di input.
   + **`GetLatestAMI`**:

     Recupera l'immagine AMI più recente per Amazon Linux 2023.
   + **`CreateMWAARunnerStack`**:

     Crea uno CloudFormation stack che include un ruolo IAM, un profilo di istanza, un gruppo di sicurezza e un'istanza Amazon EC2 runner Amazon MWAA.
   + **`GetInstanceId`**:

     Recupera l'ID dell'istanza Amazon EC2 dall'output CloudFormation dello stack.
   + **`WaitForInstanceInitialization`**:

     Verifica lo stato dell'istanza Amazon EC2 e attende l'inizializzazione.
   + **`RunCommands`**:

     Esegue comandi sull'istanza per convalidare le dipendenze di Amazon MWAA e scaricare i file wheel, se necessario.
   + **`Cleanup`**:

     Pulisce le risorse create eliminando lo stack. CloudFormation 
   + **`GenerateReport`**:

     Genera il report finale in base all'output dei passaggi precedenti e lo carica nel bucket Amazon S3.

1. Una volta completata l'automazione, consulta la sezione Output per i risultati di esecuzione dettagliati.

**Riferimenti**

Systems Manager Automation
+ [Esegui questa automazione (console)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description)
+ [Esegui un'automazione](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [Configurazione di un'automazione](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Flussi di lavoro di Support Automation](https://aws.amazon.com/premiumsupport/technology/saw/)