

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

 **Descripción** 

El `AWSSupport-ValidateMWAADependencies` manual valida las dependencias de Python del entorno Amazon Managed Workflows para el entorno Apache Airflow (Amazon MWAA). Para ello, ejecuta el comando amazon-mwaa-docker-images test en una instancia de Amazon EC2. Esto valida que sus paquetes de Python funcionen con la versión de Airflow de destino. También empaqueta archivos Wheel para entornos sin acceso a la red pública.

 **Casos de uso:** 
+ **Validación de dependencias**: compruebe que las dependencias (archivo de requisitos) con restricciones predeterminadas o personalizadas sean compatibles antes de actualizar o degradar el entorno de Amazon MWAA a una versión específica de Airflow.
+ **Package Wheel Files**: genere archivos de ruedas empaquetados `plugins.zip` para entornos que carecen de acceso a la red pública.

**importante**  
Esta automatización conlleva AWS costes adicionales. La automatización `t3.large` aprovisiona una instancia de Amazon EC2 con un `gp3` volumen de 50 GB en su cuenta mediante. CloudFormation Esta instancia busca el repositorio amazon-mwaa-docker-images, valida las dependencias y empaqueta los archivos de rueda. La instancia finaliza automáticamente tras la ejecución.

**nota**  
Si se detectan módulos de Python no compatibles: en el caso de los módulos versionados, la versión específica se actualiza o elimina y el comando test se vuelve a ejecutar. En el caso de los módulos no versionados, se comenta el módulo y se vuelve a ejecutar el comando test. Este proceso continúa hasta que se admitan todos los módulos o se alcance el límite máximo de reintentos (20 intentos).
El empaquetado de archivos Wheel solo se ejecuta cuando el archivo de requisitos contiene una `--find-links` directiva que apunta a la ruta del complemento y a la `--no-index` bandera.
El archivo de requisitos y el archivo de restricciones personalizadas deben almacenarse en el bucket de Amazon S3 especificado en los parámetros de entrada. Todos los archivos generados, incluidos el `requirements.txt` archivo actualizado, el `plugins.zip` archivo (si corresponde), los registros y el informe, se cargan en el mismo bucket de Amazon S3.
Este manual solo es compatible con la versión 2.9.2 y posteriores de Airflow. Si se requiere la validación de una versión anterior, utilice aws-mwaa-local-runner.

 **¿Cómo funciona?** 

El manual de ejecución realiza los siguientes pasos:
+ Comprueba si el bucket de Amazon S3 de destino puede conceder acceso público de lectura o escritura a sus objetos.
+ Valida los parámetros de entrada, incluidos los permisos de IAM, la ubicación y propiedad del bucket de Amazon S3, la existencia del archivo, la versión de Airflow de destino y el acceso a la red pública a la subred.
+ Recupera la última AMI de Amazon Linux 2023.
+ Crea una CloudFormation pila que incluye un rol de IAM, un perfil de instancia, un grupo de seguridad y una instancia Amazon EC2 que ejecuta Amazon MWAA.
+ Espera a que se inicialice la instancia de Amazon EC2.
+ Ejecuta comandos en la instancia para validar las dependencias de Amazon MWAA y descargar los archivos de rueda si es necesario.
+ Elimina la pila para limpiar los recursos creados. CloudFormation 
+ Genera el informe final y lo carga en el bucket de Amazon S3.

 [Ejecuta esta automatización (consola)](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ValidateMWAADependencies) 

**Tipo de documento**

Automatización

**Propietario**

Amazon

**Plataformas**

/

**Permisos de IAM necesarios**

El parámetro `AutomationAssumeRole` requiere las siguientes acciones para utilizar el manual de procedimientos correctamente.
+ formación de nubes: CreateStack
+ formación de nubes: DeleteStack
+ formación de nubes: 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
+ objetivo: AddRoleToInstanceProfile
+ objetivo: AttachRolePolicy
+ objetivo: CreateInstanceProfile
+ objetivo: CreateRole
+ objetivo: DeleteInstanceProfile
+ objetivo: DeleteRole
+ objetivo: DeleteRolePolicy
+ objetivo: DetachRolePolicy
+ objetivo: GetInstanceProfile
+ objetivo: GetRole
+ objetivo: GetRolePolicy
+ objetivo: PassRole
+ objetivo: PutRolePolicy
+ objetivo: RemoveRoleFromInstanceProfile
+ objetivo: SimulatePrincipalPolicy
+ objetivo: 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
+ conjuntos: GetCallerIdentity

Ejemplo de política: 

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

 **Instrucciones** 

Siga estos pasos para configurar la automatización:

1. Navegue hasta Systems Manager [`AWSSupport-ValidateMWAADependencies`](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description)en la sección de documentos.

1. Elija **Ejecutar automatización**. Asegúrese de que su función de IAM tenga los permisos necesarios enumerados en la sección de permisos anterior antes de ejecutarla.

1. Para los parámetros de entrada, introduzca lo siguiente:
   + **S3BucketName (Obligatorio):**

     Introduzca el nombre del bucket de Amazon S3 de su cuenta en el que desea cargar los registros de solución de problemas. Asegúrese de que la política de cubos no conceda read/write permisos innecesarios a las partes que no necesiten acceder a los registros recopilados.
   + **RequirementsFilePath (Obligatorio):**

     La clave de objeto de Amazon S3 del archivo de requisitos del bucket de Amazon S3. Debe terminar con la `.txt` extensión.
   + **ConstraintsFilePath (Opcional):**

     La clave de objeto de Amazon S3 del archivo de restricciones personalizadas del bucket de Amazon S3. Debe terminar con la `.txt` extensión si se proporciona.
   + **TargetAirflowVersion (Obligatorio):**

     La versión Airflow que se utilizará para validar las dependencias. La versión de destino debe ser compatible con Amazon MWAA. Formato: `X.Y.Z` (por ejemplo,`2.9.2`).
   + **SubnetId (Obligatorio):**

     La subred que tiene acceso a la red pública para lanzar la instancia Amazon EC2 del ejecutor de Amazon MWAA. Formato: `subnet-xxxxxxxxx`.
   + **AutomationAssumeRole (Opcional):**

     El nombre del recurso de Amazon (ARN) de la función de IAM que permite a Systems Manager Automation realizar las acciones en su nombre. Si no se especifica ningún rol, Systems Manager Automation utiliza los permisos del usuario que comienza este manual de procedimientos.
   + **AcknowledgeIAMPolicyWarnings (Obligatorio):**

     Este manual comprueba previamente si su función de IAM tiene los permisos necesarios mediante. SimulatePrincipalPolicy Esta comprobación puede producir resultados inexactos si su política utiliza condiciones o restricciones a nivel de recursos. Seleccione esta opción `YES` para confirmarlo y continuar.

1. Elija **Ejecutar**.

1. Se inicia la automatización.

1. Este documento realiza los siguientes pasos:
   + **`GetBucketPublicStatus`**:

     Comprueba si el bucket de Amazon S3 de destino puede conceder acceso público de lectura o escritura a sus objetos.
   + **`ValidateInput`**:

     Valida los parámetros de entrada, incluidos los permisos de IAM, la ubicación y propiedad del bucket de Amazon S3, la existencia del archivo, la versión de Airflow de destino y el acceso a la red pública a la subred.
   + **`BranchOnValidationResult`**:

     Ramifica el flujo de trabajo en función de si los parámetros de entrada son válidos.
   + **`GetLatestAMI`**:

     Recupera la imagen de AMI más reciente para Amazon Linux 2023.
   + **`CreateMWAARunnerStack`**:

     Crea una CloudFormation pila que incluye un rol de IAM, un perfil de instancia, un grupo de seguridad y una instancia Amazon EC2 que ejecuta Amazon MWAA.
   + **`GetInstanceId`**:

     Recupera el ID de instancia de Amazon EC2 de la salida de CloudFormation la pila.
   + **`WaitForInstanceInitialization`**:

     Comprueba el estado de la instancia Amazon EC2 y espera a que se inicialice.
   + **`RunCommands`**:

     Ejecuta comandos en la instancia para validar las dependencias de Amazon MWAA y descargar los archivos de rueda si es necesario.
   + **`Cleanup`**:

     Elimina la pila para limpiar los recursos creados. CloudFormation 
   + **`GenerateReport`**:

     Genera el informe final en función de los resultados de los pasos anteriores y lo carga en el bucket de Amazon S3.

1. Una vez completada la automatización, consulte la sección de resultados para ver los resultados de ejecución detallados.

**Referencias**

Automatización de Systems Manager
+ [Ejecuta esta automatización (consola)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ValidateMWAADependencies/description)
+ [Ejecución de una automatización](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [Configuración de Automatización](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Flujos de trabajo de automatización de Support](https://aws.amazon.com/premiumsupport/technology/saw/)