Schnellstartanleitung für Amazon Managed Workflows für Apache Airflow - Amazon Managed Workflows für Apache Airflow

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.

Schnellstartanleitung für Amazon Managed Workflows für Apache Airflow

Dieses Schnellstart-Tutorial verwendet eine AWS CloudFormation Vorlage, die gleichzeitig die Amazon VPC-Infrastruktur, einen Amazon S3 S3-Bucket mit einem dags Ordner und eine Amazon Managed Workflows for Apache Airflow-Umgebung erstellt.

In diesem Tutorial

Dieses Tutorial führt Sie durch drei AWS Command Line Interface (AWS CLI) Befehle, um eine DAG auf Amazon S3 hochzuladen, die DAG in Apache Airflow auszuführen und Logs einzusehen. CloudWatch Abschließend werden Sie durch die Schritte zur Erstellung einer IAM-Richtlinie für ein Apache Airflow-Entwicklungsteam geführt.

Anmerkung

Die AWS CloudFormation Vorlage auf dieser Seite erstellt eine Amazon Managed Workflows for Apache Airflow-Umgebung für die neueste Version von Apache Airflow, verfügbar in. AWS CloudFormation Die neueste verfügbare Version ist Apache Airflow v2.8.1.

Die AWS CloudFormation Vorlage auf dieser Seite erstellt Folgendes:

  • VPC-Infrastruktur. Die Vorlage verwendetÖffentliches Routing über das Internet. Sie verwendet den Öffentlicher Netzwerkzugriffsmodus für den Apache Airflow Webserver inWebserverAccessMode: PUBLIC_ONLY.

  • Amazon S3 S3-Bucket. Die Vorlage erstellt einen Amazon S3 S3-Bucket mit einem dags Ordner. Es ist so konfiguriert, dass der gesamte öffentliche Zugriff blockiert wird, wobei die Bucket-Versionierung aktiviert ist, wie unter definiert. Erstellen eines Amazon S3 cket cket erstellen

  • Amazon MWAA-Umgebung. Die Vorlage erstellt eine Amazon MWAA-Umgebung, die dem dags Ordner im Amazon S3 S3-Bucket zugeordnet ist, eine Ausführungsrolle mit Berechtigungen für von Amazon MWAA verwendete AWS Dienste und die Standardeinstellung für die Verschlüsselung mit einem AWS eigenen Schlüssel, wie unter definiert. Erstellen Sie eine Amazon MWAA-Umgebung

  • CloudWatch Protokolle. Die Vorlage ermöglicht, dass Apache Airflow sich CloudWatch auf der Ebene „INFO“ und höher für die Airflow-Scheduler-Protokollgruppe, die Airflow-Webserver-Protokollgruppe, die Airflow-Worker-Protokollgruppe, die Airflow-DAG-Verarbeitungsprotokollgruppe und die Airflow-Aufgabenprotokollgruppe anmeldet, wie unter definiert. Airflow-Protokolle in Amazon anzeigen CloudWatch

In diesem Tutorial werden Sie die folgenden Aufgaben erledigen:

  • Laden Sie eine DAG hoch und führen Sie sie aus. Laden Sie das Tutorial-DAG von Apache Airflow für die neueste von Amazon MWAA unterstützte Apache Airflow-Version auf Amazon S3 hoch und führen Sie es dann in der Apache Airflow-Benutzeroberfläche aus, wie unter definiert. Hinzufügen oder Aktualisieren von DAGs

  • Protokolle anzeigen. Zeigen Sie die Airflow-Webserver-Protokollgruppe unter CloudWatch Protokolle an, wie unter definiert. Airflow-Protokolle in Amazon anzeigen CloudWatch

  • Erstellen Sie eine Zugriffskontrollrichtlinie. Erstellen Sie in IAM eine Zugriffskontrollrichtlinie für Ihr Apache Airflow-Entwicklungsteam, wie unter definiert. Zugreifen auf eine Amazon MWAA-Umgebung

Voraussetzungen

Das AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können. Um die Schritte auf dieser Seite abzuschließen, benötigen Sie Folgendes:

Schritt eins: Speichern Sie die AWS CloudFormation Vorlage lokal

  • Kopieren Sie den Inhalt der folgenden Vorlage und speichern Sie ihn lokal untermwaa-public-network.yml. Sie können die Vorlage auch herunterladen.

    AWSTemplateFormatVersion: "2010-09-09" Parameters: EnvironmentName: Description: An environment name that is prefixed to resource names Type: String Default: MWAAEnvironment VpcCIDR: Description: The IP range (CIDR notation) for this VPC Type: String Default: 10.192.0.0/16 PublicSubnet1CIDR: Description: The IP range (CIDR notation) for the public subnet in the first Availability Zone Type: String Default: 10.192.10.0/24 PublicSubnet2CIDR: Description: The IP range (CIDR notation) for the public subnet in the second Availability Zone Type: String Default: 10.192.11.0/24 PrivateSubnet1CIDR: Description: The IP range (CIDR notation) for the private subnet in the first Availability Zone Type: String Default: 10.192.20.0/24 PrivateSubnet2CIDR: Description: The IP range (CIDR notation) for the private subnet in the second Availability Zone Type: String Default: 10.192.21.0/24 MaxWorkerNodes: Description: The maximum number of workers that can run in the environment Type: Number Default: 2 DagProcessingLogs: Description: Log level for DagProcessing Type: String Default: INFO SchedulerLogsLevel: Description: Log level for SchedulerLogs Type: String Default: INFO TaskLogsLevel: Description: Log level for TaskLogs Type: String Default: INFO WorkerLogsLevel: Description: Log level for WorkerLogs Type: String Default: INFO WebserverLogsLevel: Description: Log level for WebserverLogs Type: String Default: INFO Resources: ##################################################################################################################### # CREATE VPC ##################################################################################################################### VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCIDR EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: MWAAEnvironment InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: MWAAEnvironment InternetGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC PublicSubnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: !Ref PublicSubnet1CIDR MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub ${EnvironmentName} Public Subnet (AZ1) PublicSubnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 1, !GetAZs '' ] CidrBlock: !Ref PublicSubnet2CIDR MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub ${EnvironmentName} Public Subnet (AZ2) PrivateSubnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: !Ref PrivateSubnet1CIDR MapPublicIpOnLaunch: false Tags: - Key: Name Value: !Sub ${EnvironmentName} Private Subnet (AZ1) PrivateSubnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 1, !GetAZs '' ] CidrBlock: !Ref PrivateSubnet2CIDR MapPublicIpOnLaunch: false Tags: - Key: Name Value: !Sub ${EnvironmentName} Private Subnet (AZ2) NatGateway1EIP: Type: AWS::EC2::EIP DependsOn: InternetGatewayAttachment Properties: Domain: vpc NatGateway2EIP: Type: AWS::EC2::EIP DependsOn: InternetGatewayAttachment Properties: Domain: vpc NatGateway1: Type: AWS::EC2::NatGateway Properties: AllocationId: !GetAtt NatGateway1EIP.AllocationId SubnetId: !Ref PublicSubnet1 NatGateway2: Type: AWS::EC2::NatGateway Properties: AllocationId: !GetAtt NatGateway2EIP.AllocationId SubnetId: !Ref PublicSubnet2 PublicRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub ${EnvironmentName} Public Routes DefaultPublicRoute: Type: AWS::EC2::Route DependsOn: InternetGatewayAttachment Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway PublicSubnet1RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnet1 PublicSubnet2RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnet2 PrivateRouteTable1: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub ${EnvironmentName} Private Routes (AZ1) DefaultPrivateRoute1: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PrivateRouteTable1 DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref NatGateway1 PrivateSubnet1RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PrivateRouteTable1 SubnetId: !Ref PrivateSubnet1 PrivateRouteTable2: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub ${EnvironmentName} Private Routes (AZ2) DefaultPrivateRoute2: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PrivateRouteTable2 DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref NatGateway2 PrivateSubnet2RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PrivateRouteTable2 SubnetId: !Ref PrivateSubnet2 SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupName: "mwaa-security-group" GroupDescription: "Security group with a self-referencing inbound rule." VpcId: !Ref VPC SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: !Ref SecurityGroup IpProtocol: "-1" SourceSecurityGroupId: !Ref SecurityGroup EnvironmentBucket: Type: AWS::S3::Bucket Properties: VersioningConfiguration: Status: Enabled PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true ##################################################################################################################### # CREATE MWAA ##################################################################################################################### MwaaEnvironment: Type: AWS::MWAA::Environment DependsOn: MwaaExecutionPolicy Properties: Name: !Sub "${AWS::StackName}-MwaaEnvironment" SourceBucketArn: !GetAtt EnvironmentBucket.Arn ExecutionRoleArn: !GetAtt MwaaExecutionRole.Arn DagS3Path: dags NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: - !Ref PrivateSubnet1 - !Ref PrivateSubnet2 WebserverAccessMode: PUBLIC_ONLY MaxWorkers: !Ref MaxWorkerNodes LoggingConfiguration: DagProcessingLogs: LogLevel: !Ref DagProcessingLogs Enabled: true SchedulerLogs: LogLevel: !Ref SchedulerLogsLevel Enabled: true TaskLogs: LogLevel: !Ref TaskLogsLevel Enabled: true WorkerLogs: LogLevel: !Ref WorkerLogsLevel Enabled: true WebserverLogs: LogLevel: !Ref WebserverLogsLevel Enabled: true SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: VpcId: !Ref VPC GroupDescription: !Sub "Security Group for Amazon MWAA Environment ${AWS::StackName}-MwaaEnvironment" GroupName: !Sub "airflow-security-group-${AWS::StackName}-MwaaEnvironment" SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: !Ref SecurityGroup IpProtocol: "-1" SourceSecurityGroupId: !Ref SecurityGroup SecurityGroupEgress: Type: AWS::EC2::SecurityGroupEgress Properties: GroupId: !Ref SecurityGroup IpProtocol: "-1" CidrIp: "0.0.0.0/0" MwaaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - airflow-env.amazonaws.com - airflow.amazonaws.com Action: - "sts:AssumeRole" Path: "/service-role/" MwaaExecutionPolicy: DependsOn: EnvironmentBucket Type: AWS::IAM::ManagedPolicy Properties: Roles: - !Ref MwaaExecutionRole PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: airflow:PublishMetrics Resource: - !Sub "arn:aws:airflow:${AWS::Region}:${AWS::AccountId}:environment/${EnvironmentName}" - Effect: Deny Action: s3:ListAllMyBuckets Resource: - !Sub "${EnvironmentBucket.Arn}" - !Sub "${EnvironmentBucket.Arn}/*" - Effect: Allow Action: - "s3:GetObject*" - "s3:GetBucket*" - "s3:List*" Resource: - !Sub "${EnvironmentBucket.Arn}" - !Sub "${EnvironmentBucket.Arn}/*" - Effect: Allow Action: - logs:DescribeLogGroups Resource: "*" - Effect: Allow Action: - logs:CreateLogStream - logs:CreateLogGroup - logs:PutLogEvents - logs:GetLogEvents - logs:GetLogRecord - logs:GetLogGroupFields - logs:GetQueryResults - logs:DescribeLogGroups Resource: - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:airflow-${AWS::StackName}*" - Effect: Allow Action: cloudwatch:PutMetricData Resource: "*" - Effect: Allow Action: - sqs:ChangeMessageVisibility - sqs:DeleteMessage - sqs:GetQueueAttributes - sqs:GetQueueUrl - sqs:ReceiveMessage - sqs:SendMessage Resource: - !Sub "arn:aws:sqs:${AWS::Region}:*:airflow-celery-*" - Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - "kms:GenerateDataKey*" - kms:Encrypt NotResource: !Sub "arn:aws:kms:*:${AWS::AccountId}:key/*" Condition: StringLike: "kms:ViaService": - !Sub "sqs.${AWS::Region}.amazonaws.com" Outputs: VPC: Description: A reference to the created VPC Value: !Ref VPC PublicSubnets: Description: A list of the public subnets Value: !Join [ ",", [ !Ref PublicSubnet1, !Ref PublicSubnet2 ]] PrivateSubnets: Description: A list of the private subnets Value: !Join [ ",", [ !Ref PrivateSubnet1, !Ref PrivateSubnet2 ]] PublicSubnet1: Description: A reference to the public subnet in the 1st Availability Zone Value: !Ref PublicSubnet1 PublicSubnet2: Description: A reference to the public subnet in the 2nd Availability Zone Value: !Ref PublicSubnet2 PrivateSubnet1: Description: A reference to the private subnet in the 1st Availability Zone Value: !Ref PrivateSubnet1 PrivateSubnet2: Description: A reference to the private subnet in the 2nd Availability Zone Value: !Ref PrivateSubnet2 SecurityGroupIngress: Description: Security group with self-referencing inbound rule Value: !Ref SecurityGroupIngress MwaaApacheAirflowUI: Description: MWAA Environment Value: !Sub "https://${MwaaEnvironment.WebserverUrl}"

Schritt zwei: Erstellen Sie den Stack mit dem AWS CLI

  1. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem mwaa-public-network.yml es gespeichert ist. Beispielsweise:

    cd mwaaproject
  2. Verwenden Sie den aws cloudformation create-stackBefehl, um den Stack mit dem zu erstellen AWS CLI.

    aws cloudformation create-stack --stack-name mwaa-environment-public-network --template-body file://mwaa-public-network.yml --capabilities CAPABILITY_IAM
    Anmerkung

    Die Erstellung der Amazon VPC-Infrastruktur, des Amazon S3-Buckets und der Amazon MWAA-Umgebung dauert über 30 Minuten.

Schritt drei: Laden Sie eine DAG auf Amazon S3 hoch und führen Sie sie in der Apache Airflow-Benutzeroberfläche aus

  1. Kopieren Sie den Inhalt der tutorial.py Datei für die neueste unterstützte Apache Airflow-Version und speichern Sie sie lokal unter. tutorial.py

  2. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem tutorial.py es gespeichert ist. Beispielsweise:

    cd mwaaproject
  3. Verwenden Sie den folgenden Befehl, um alle Ihre Amazon S3 S3-Buckets aufzulisten.

    aws s3 ls
  4. Verwenden Sie den folgenden Befehl, um die Dateien und Ordner im Amazon S3 S3-Bucket für Ihre Umgebung aufzulisten.

    aws s3 ls s3://YOUR_S3_BUCKET_NAME
  5. Verwenden Sie das folgende Skript, um die tutorial.py Datei in Ihren dags Ordner hochzuladen. Ersetzen Sie den Beispielwert in YOUR_S3_BUCKET_NAME.

    aws s3 cp tutorial.py s3://YOUR_S3_BUCKET_NAME/dags/
  6. Öffnen Sie die Seite Umgebungen auf der Amazon MWAA-Konsole.

  7. Wählen Sie eine Umgebung aus.

  8. Wählen Sie „Airflow-Benutzeroberfläche öffnen“.

  9. Wählen Sie auf der Apache Airflow-Benutzeroberfläche aus der Liste der verfügbaren DAGs das Tutorial DAG aus.

  10. Klicken Sie auf der Seite mit den DAG-Details neben Ihrem DAG-Namen auf die Option DAG pausieren/pausieren, um die DAG aufzuheben.

  11. Wählen Sie „DAG auslösen“.

Vierter Schritt: Logs in CloudWatch Logs anzeigen

Sie können die Apache Airflow-Protokolle für alle Apache Airflow-Protokolle, die durch den Stack aktiviert wurden, in der CloudWatch AWS CloudFormation Konsole anzeigen. Der folgende Abschnitt zeigt, wie Sie Protokolle für die Airflow-Webserver-Protokollgruppe anzeigen.

  1. Öffnen Sie die Seite Umgebungen auf der Amazon MWAA-Konsole.

  2. Wählen Sie eine Umgebung aus.

  3. Wählen Sie im Bereich Überwachung die Airflow-Webserver-Protokollgruppe aus.

  4. Wählen Sie unter webserver_console_ip Log-Streams die Option Log Streams aus.

Als nächstes