Tutorial mulai cepat untuk Alur Kerja Terkelola Amazon untuk Apache Airflow - Amazon Managed Workflows for Apache Airflow (MWAA)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial mulai cepat untuk Alur Kerja Terkelola Amazon untuk Apache Airflow

Tutorial mulai cepat ini menggunakan AWS CloudFormation template yang membuat infrastruktur VPC Amazon, bucket Amazon S3 dengan dags folder, dan Alur Kerja Terkelola Amazon untuk lingkungan Apache Airflow secara bersamaan.

Dalam tutorial ini

Tutorial ini memandu Anda melalui tiga AWS Command Line Interface (AWS CLI) perintah untuk mengunggah DAG ke Amazon S3, menjalankan DAG di Apache Airflow, dan melihat log in. CloudWatch Ini diakhiri dengan memandu Anda melalui langkah-langkah untuk membuat kebijakan IAM untuk tim pengembangan Apache Airflow.

catatan

AWS CloudFormation Template pada halaman ini membuat Alur Kerja Terkelola Amazon untuk lingkungan Apache Airflow untuk versi terbaru Apache Airflow yang tersedia di. AWS CloudFormation Versi terbaru yang tersedia adalah Apache Airflow v2.8.1.

AWS CloudFormation Template pada halaman ini menciptakan yang berikut:

  • Infrastruktur VPC. Template menggunakanRouting publik melalui Internet. Ini menggunakan Mode akses jaringan publik untuk server Web Apache Airflow di. WebserverAccessMode: PUBLIC_ONLY

  • Ember Amazon S3. Template membuat bucket Amazon S3 dengan folder. dags Ini dikonfigurasi untuk Memblokir semua akses publik, dengan Bucket Versioning diaktifkan, seperti yang didefinisikan dalam. Buat bucket Amazon S3 untuk Amazon MWAA.

  • Lingkungan Amazon MWAA. Template membuat lingkungan Amazon MWAA yang terkait dengan dags folder di bucket Amazon S3, peran eksekusi dengan izin AWS ke layanan yang digunakan oleh Amazon MWAA, dan default untuk enkripsi menggunakan kunci yang dimiliki, seperti AWS yang didefinisikan dalam. Buat lingkungan Amazon MWAA

  • CloudWatch Log. Template memungkinkan Apache Airflow masuk CloudWatch pada tingkat “INFO” dan ke atas untuk grup log penjadwal Aliran Udara, grup log server web Aliran Udara, grup log pekerja Aliran Udara, grup log pemrosesan Aliran Udara DAG, dan grup log tugas Aliran Udara, seperti yang didefinisikan dalam. Melihat log Aliran Udara di Amazon CloudWatch

Dalam tutorial ini, Anda akan menyelesaikan tugas-tugas berikut:

  • Unggah dan jalankan DAG. Unggah tutorial Apache Airflow DAG untuk Amazon MWAA terbaru yang didukung versi Apache Airflow ke Amazon S3, lalu jalankan di Apache Airflow UI, seperti yang didefinisikan dalam. Menambahkan atau memperbarui DAG

  • Lihat log. Lihat grup log server web Airflow di CloudWatch Log, seperti yang didefinisikan dalamMelihat log Aliran Udara di Amazon CloudWatch.

  • Buat kebijakan kontrol akses. Buat kebijakan kontrol akses di IAM untuk tim pengembangan Apache Airflow Anda, sebagaimana didefinisikan dalam. Mengakses lingkungan Amazon MWAA

Prasyarat

The AWS Command Line Interface (AWS CLI) adalah alat open source yang memungkinkan Anda berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di halaman ini, Anda memerlukan yang berikut:

Langkah satu: Simpan AWS CloudFormation template secara lokal

  • Salin isi template berikut dan simpan secara lokal sebagaimwaa-public-network.yml. Anda juga dapat mengunduh template.

    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}"

Langkah kedua: Buat tumpukan menggunakan AWS CLI

  1. Di prompt perintah Anda, arahkan ke direktori tempat mwaa-public-network.yml disimpan. Sebagai contoh:

    cd mwaaproject
  2. Gunakan aws cloudformation create-stackperintah untuk membuat tumpukan menggunakan AWS CLI.

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

    Dibutuhkan lebih dari 30 menit untuk membuat infrastruktur VPC Amazon, bucket Amazon S3, dan lingkungan Amazon MWAA.

Langkah ketiga: Unggah DAG ke Amazon S3 dan jalankan di Apache Airflow UI

  1. Salin konten tutorial.py file untuk versi Apache Airflow terbaru yang didukung dan simpan secara lokal sebagai file. tutorial.py

  2. Di prompt perintah Anda, arahkan ke direktori tempat tutorial.py disimpan. Sebagai contoh:

    cd mwaaproject
  3. Gunakan perintah berikut untuk membuat daftar semua bucket Amazon S3 Anda.

    aws s3 ls
  4. Gunakan perintah berikut untuk mencantumkan file dan folder di bucket Amazon S3 untuk lingkungan Anda.

    aws s3 ls s3://YOUR_S3_BUCKET_NAME
  5. Gunakan skrip berikut untuk mengunggah tutorial.py file ke dags folder Anda. Gantikan nilai sampel di YOUR_S3_BUCKET_NAME.

    aws s3 cp tutorial.py s3://YOUR_S3_BUCKET_NAME/dags/
  6. Buka halaman Lingkungan di konsol Amazon MWAA.

  7. Pilih lingkungan.

  8. Pilih Buka UI Aliran Udara.

  9. Pada Apache Airflow UI, dari daftar DAG yang tersedia, pilih tutorial DAG.

  10. Pada halaman detail DAG, pilih sakelar Jeda/Unpause DAG di sebelah nama DAG Anda untuk membatalkan jeda DAG.

  11. Pilih Trigger DAG.

Langkah empat: Lihat log di CloudWatch Log

Anda dapat melihat log Apache Airflow di CloudWatch konsol untuk semua log Apache Airflow yang diaktifkan oleh tumpukan. AWS CloudFormation Bagian berikut menunjukkan cara melihat log untuk grup log server web Airflow.

  1. Buka halaman Lingkungan di konsol Amazon MWAA.

  2. Pilih lingkungan.

  3. Pilih grup log server web Aliran udara di panel Pemantauan.

  4. Pilih webserver_console_ip log masuk Aliran log.

Apa selanjutnya?