View a markdown version of this page

AWSSupport-ValidateMWAADependencies - AWS Systems Manager Riferimento al runbook dell’automazione

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

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)

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 AWSSupport-ValidateMWAADependenciesa Systems Manager nella sezione Documenti.

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

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

  4. Scegli Esegui.

  5. L'automazione viene avviata.

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

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

Riferimenti

Systems Manager Automation