View a markdown version of this page

AWSSupport-ValidateMWAADependencies - AWS Systems Manager Referencia del manual de procedimientos de Automatización

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

Descripción

El AWSSupport-ValidateMWAADependencies manual valida los flujos de trabajo gestionados por Amazon para las dependencias de Python del entorno Apache Airflow (Amazon MWAA). Para ello, ejecuta el comando de prueba amazon-mwaa-docker-images 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 de ruedas para entornos sin acceso a redes públicas.

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.

  • Archivos de rueda de paquetes: genere archivos de rueda empaquetados plugins.zip para entornos que carecen de acceso a la red pública.

importante

Esta automatización genera AWS costos 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 Wheel. La instancia finaliza automáticamente después de 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 de prueba 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 de prueba. 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 de un complemento y a la --no-index marca.

  • 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 es necesario validar una versión anterior, utilice aws-mwaa-local-runner.

¿Cómo funciona?

El runbook lleva a cabo 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 la 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 una función de IAM, un perfil de instancia, un grupo de seguridad y una instancia Amazon EC2 con Amazon MWAA Runner.

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

  • Limpia los recursos creados eliminando la pila. CloudFormation

  • Genera el informe final y lo carga en el bucket de Amazon S3.

Ejecuta esta automatización (consola)

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

  • 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

  • ssm: DescribeInstanceInformation

  • ssm: GetAutomationExecution

  • ssm: GetCommandInvocation

  • ssm: GetParameter

  • ssm: ListCommandInvocations

  • ssm: ListCommands

  • ssm: SendCommand

  • ssm: StartAutomationExecution

  • sets: 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. Diríjase a Systems Manager, AWSSupport-ValidateMWAADependencies en la sección Documentos.

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

  3. Para los parámetros de entrada, introduzca lo siguiente:

    • S3BucketName (Obligatorio):

      Introduzca el nombre del bucket de Amazon S3 en su cuenta a la 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 necesitan 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 de Airflow que se utilizará para validar las dependencias. La versión de destino debe ser compatible con Amazon MWAA. Formato: X.Y.Z (p. ej.,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 de recurso de Amazon (ARN) del rol 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 de uso necesarios. SimulatePrincipalPolicy Esta comprobación puede producir resultados inexactos si su política utiliza condiciones o restricciones a nivel de recursos. Selecciona esta opción YES para confirmarlo y continuar.

  4. Elija Ejecutar.

  5. Se inicia la automatización.

  6. 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 la 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:

      Diversifica el flujo de trabajo en función de si los parámetros de entrada son válidos.

    • GetLatestAMI:

      Recupera la imagen más reciente de la AMI para Amazon Linux 2023.

    • CreateMWAARunnerStack:

      Crea una CloudFormation pila que incluye una función de IAM, un perfil de instancia, un grupo de seguridad y una instancia Amazon EC2 con Amazon MWAA Runner.

    • GetInstanceId:

      Recupera el ID de instancia de Amazon EC2 de la salida de la pila. CloudFormation

    • WaitForInstanceInitialization:

      Comprueba el estado de la instancia de 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:

      Limpia los recursos creados eliminando la pila. CloudFormation

    • GenerateReport:

      Genera el informe final basándose en los resultados de los pasos anteriores y lo carga en el bucket de Amazon S3.

  7. Una vez finalizada la automatización, revise la sección Resultados para ver los resultados detallados de la ejecución.

Referencias

Automatización de Systems Manager