Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
AWSSupport-ValidateMWAADependencies
Beschreibung
Das AWSSupport-ValidateMWAADependencies Runbook validiert die Python-Abhängigkeiten der Amazon Managed Workflows for Apache Airflow (Amazon MWAA) -Umgebung. Dazu wird der Testbefehl amazon-mwaa-docker-images auf einer Amazon EC2 EC2-Instance ausgeführt. Dadurch wird bestätigt, dass Ihre Python-Pakete mit Ihrer Airflow-Zielversion funktionieren. Es verpackt auch Raddateien für Umgebungen ohne öffentlichen Netzwerkzugriff.
Anwendungsfälle:
Überprüfung der Abhängigkeiten: Stellen Sie sicher, dass Abhängigkeiten (Anforderungsdatei) mit standardmäßigen oder benutzerdefinierten Einschränkungen kompatibel sind, bevor Sie die Amazon MWAA-Umgebung auf eine bestimmte Airflow-Version aktualisieren oder herabstufen.
Raddateien verpacken: Generieren Sie gepackte Raddateien
plugins.zipfür Umgebungen ohne öffentlichen Netzwerkzugriff.
Wichtig
Diese Automatisierung verursacht zusätzliche AWS Kosten. Die Automatisierung stellt eine t3.large Amazon EC2 EC2-Instance mit einem gp3 Volumen von 50 GB in Ihrem Konto über CloudFormation bereit. Diese Instanz ruft das Amazon-mwaa-docker-images-Repository ab, validiert Abhängigkeiten und packt Raddateien. Die Instanz wird nach der Ausführung automatisch beendet.
Anmerkung
Wenn nicht unterstützte Python-Module erkannt werden: Bei versionierten Modulen wird die spezifische Version aktualisiert oder entfernt, und der Testbefehl wird erneut ausgeführt. Bei Modulen ohne Version wird das Modul auskommentiert und der Testbefehl wird erneut ausgeführt. Dieser Vorgang wird fortgesetzt, bis alle Module unterstützt werden oder das maximale Wiederholungslimit (20 Versuche) erreicht ist.
Das Paketieren von Wheel-Dateien wird nur ausgeführt, wenn die Anforderungsdatei eine
--find-linksDirektive enthält, die auf einen Plugin-Pfad und das--no-indexFlag verweist.Die Anforderungsdatei und die Datei mit benutzerdefinierten Einschränkungen müssen in dem Amazon S3 S3-Bucket gespeichert werden, der in den Eingabeparametern angegeben ist. Alle generierten Dateien, einschließlich der aktualisierten
requirements.txtplugins.zipDatei, Datei (falls zutreffend), Protokolle und des Berichts, werden in denselben Amazon S3 S3-Bucket hochgeladen.Dieses Runbook unterstützt nur Airflow Version 2.9.2 und höher. Wenn eine Validierung für eine frühere Version erforderlich ist, verwenden Sie aws-mwaa-local-runner.
Wie funktioniert es?
Das Runbook führt die folgenden Schritte aus:
Prüft, ob der Amazon S3 S3-Ziel-Bucket möglicherweise öffentlichen Lese- oder Schreibzugriff auf seine Objekte gewährt.
Überprüft die Eingabeparameter wie IAM-Berechtigungen, Speicherort und Besitz des Amazon S3 S3-Buckets, Existenz von Dateien, Airflow-Zielversion und Zugriff auf das öffentliche Subnetz.
Ruft das neueste Amazon Linux 2023 AMI ab.
Erstellt einen CloudFormation Stack, der eine IAM-Rolle, ein Instance-Profil, eine Sicherheitsgruppe und eine Amazon EC2-Instance mit Amazon MWAA-Runner umfasst.
Wartet auf die Initialisierung der Amazon EC2 EC2-Instance.
Führt Befehle auf der Instance aus, um die Amazon MWAA-Abhängigkeiten zu überprüfen und bei Bedarf Raddateien herunterzuladen.
Bereinigt die erstellten Ressourcen, indem der Stapel gelöscht wird. CloudFormation
Generiert den Abschlussbericht und lädt ihn in den Amazon S3 S3-Bucket hoch.
Führen Sie diese Automatisierung aus (Konsole)
Art des Dokuments
Automatisierung
Eigentümer
Amazon
Plattformen
/
Erforderliche IAM-Berechtigungen
Der AutomationAssumeRole Parameter erfordert die folgenden Aktionen, um das Runbook erfolgreich zu verwenden.
Wolkenbildung: CreateStack
Wolkenbildung: DeleteStack
Wolkenbildung: 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
ich bin: AddRoleToInstanceProfile
ich bin: AttachRolePolicy
ich bin: CreateInstanceProfile
ich bin: CreateRole
ich bin: DeleteInstanceProfile
ich bin: DeleteRole
ich bin: DeleteRolePolicy
ich bin: DetachRolePolicy
ich bin: GetInstanceProfile
ich bin: GetRole
ich bin: GetRolePolicy
ich bin: PassRole
ich bin: PutRolePolicy
ich bin: RemoveRoleFromInstanceProfile
ich bin: SimulatePrincipalPolicy
ich bin: 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
sts: GetCallerIdentity
Beispiel für eine Richtlinie:
{ "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" } } } ] }
Anweisungen
Gehen Sie wie folgt vor, um die Automatisierung zu konfigurieren:
-
Navigieren Sie
AWSSupport-ValidateMWAADependenciesin Systems Manager unter dem Abschnitt Dokumente zu. -
Wählen Sie Automatisierung ausführen. Stellen Sie vor der Ausführung sicher, dass Ihre IAM-Rolle über die erforderlichen Berechtigungen verfügt, die im vorherigen Abschnitt mit den Berechtigungen aufgeführt sind.
-
Geben Sie für die Eingabeparameter Folgendes ein:
-
S3BucketName (Erforderlich):
Geben Sie den Namen des Amazon S3 S3-Buckets in Ihrem Konto ein, in das Sie die Fehlerbehebungsprotokolle hochladen möchten. Stellen Sie sicher, dass die Bucket-Richtlinie Parteien, die keinen Zugriff auf die gesammelten Protokolle benötigen, keine unnötigen read/write Berechtigungen gewährt.
-
RequirementsFilePath (Erforderlich):
Der Amazon S3 S3-Objektschlüssel der Anforderungsdatei im Amazon S3 S3-Bucket. Muss mit der
.txtErweiterung enden. -
ConstraintsFilePath (Fakultativ):
Der Amazon S3 S3-Objektschlüssel der Datei mit benutzerdefinierten Einschränkungen im Amazon S3 S3-Bucket. Muss mit der
.txtErweiterung enden, falls angegeben. -
TargetAirflowVersion (Erforderlich):
Die Airflow-Version, die für die Validierung der Abhängigkeiten verwendet werden soll. Die Zielversion muss von Amazon MWAA unterstützt werden. Format:
X.Y.Z(z. B.).2.9.2 -
SubnetId (Erforderlich):
Das Subnetz, das über öffentlichen Netzwerkzugriff verfügt, um die Amazon EC2-Instance mit Amazon MWAA-Runner zu starten. Format:.
subnet-xxxxxxxxx -
AutomationAssumeRole (Fakultativ):
Der Amazon-Ressourcenname (ARN) der IAM-Rolle, der es Systems Manager Automation ermöglicht, die Aktionen in Ihrem Namen durchzuführen. Wenn keine Rolle angegeben ist, verwendet Systems Manager Automation die Berechtigungen des Benutzers, der dieses Runbook startet.
-
AcknowledgeIAMPolicyWarnings (Erforderlich):
Dieses Runbook überprüft vorab, ob Ihre IAM-Rolle über die erforderlichen Berechtigungen verfügt. SimulatePrincipalPolicy Diese Prüfung kann zu ungenauen Ergebnissen führen, wenn Ihre Richtlinie Bedingungen oder Einschränkungen auf Ressourcenebene verwendet. Wählen Sie diese Option
YES, um dies zu bestätigen und fortzufahren.
-
-
Wählen Sie Ausführen.
-
Die Automatisierung wird eingeleitet.
-
Das Dokument führt die folgenden Schritte aus:
-
GetBucketPublicStatus:Prüft, ob der Amazon S3 S3-Ziel-Bucket möglicherweise öffentlichen Lese- oder Schreibzugriff auf seine Objekte gewährt.
-
ValidateInput:Überprüft die Eingabeparameter wie IAM-Berechtigungen, Speicherort und Besitz des Amazon S3 S3-Buckets, Existenz von Dateien, Airflow-Zielversion und Zugriff auf das öffentliche Subnetz.
-
BranchOnValidationResult:Verzweigt den Workflow je nachdem, ob die Eingabeparameter gültig sind.
-
GetLatestAMI:Ruft das neueste AMI für Amazon Linux 2023 Image ab.
-
CreateMWAARunnerStack:Erstellt einen CloudFormation Stack, der eine IAM-Rolle, ein Instance-Profil, eine Sicherheitsgruppe und eine Amazon EC2-Instance mit Amazon MWAA-Runner umfasst.
-
GetInstanceId:Ruft die Amazon EC2 EC2-Instance-ID aus der CloudFormation Stack-Ausgabe ab.
-
WaitForInstanceInitialization:Prüft den Status der Amazon EC2 EC2-Instance und wartet auf die Initialisierung.
-
RunCommands:Führt Befehle auf der Instance aus, um die Amazon MWAA-Abhängigkeiten zu überprüfen und bei Bedarf Raddateien herunterzuladen.
-
Cleanup:Bereinigt die erstellten Ressourcen, indem der Stapel gelöscht wird. CloudFormation
-
GenerateReport:Generiert den Abschlussbericht auf der Grundlage der Ergebnisse der vorherigen Schritte und lädt den Bericht in den Amazon S3 S3-Bucket hoch.
-
-
Nachdem die Automatisierung abgeschlossen ist, finden Sie im Abschnitt „Ausgaben“ detaillierte Ausführungsergebnisse.
Referenzen
Systems Manager Automation