

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
<a name="quick-start"></a>

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

**Topics**
+ [Dalam tutorial ini](#quick-start-overview)
+ [Prasyarat](#quick-start-before)
+ [Langkah satu: Simpan CloudFormation template secara lokal](#quick-start-template)
+ [Langkah kedua: Buat tumpukan menggunakan AWS CLI](#quick-start-createstack)
+ [Langkah ketiga: Unggah DAG ke Amazon S3 dan jalankan di Apache Airflow UI](#quick-start-upload-dag)
+ [Langkah empat: akses log di CloudWatch Log](#quick-start-logs)
+ [Apa selanjutnya?](#quick-start-next-up)

## Dalam tutorial ini
<a name="quick-start-overview"></a>

Gunakan tutorial ini untuk mengunggah DAG ke Amazon S3, jalankan DAG di Apache Airflow, dan akses log CloudWatch menggunakan perintah tiga (). AWS Command Line Interface AWS CLI Akhirnya, Anda akan belajar membuat kebijakan IAM untuk tim pengembangan Apache Airflow.

**catatan**  
 CloudFormation Template pada halaman ini membuat Alur Kerja Terkelola Amazon untuk lingkungan Apache Airflow untuk versi terbaru Apache Airflow yang tersedia di. CloudFormation Versi terbaru yang tersedia adalah Apache Airflow v3.0.6.

 CloudFormation Template menciptakan yang berikut:
+ **Infrastruktur VPC**. Template menggunakan[Routing publik melalui internet](networking-about.md#networking-about-overview-public). Ini menggunakan [Mode akses jaringan publik](configuring-networking.md#access-overview-public) 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](mwaa-s3-bucket.md)
+ **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](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk). [Buat lingkungan Amazon MWAA](create-environment.md)
+ **CloudWatch Log**. *Template mengaktifkan log Apache Airflow CloudWatch di tingkat INFO dan **ke** atas untuk grup log *penjadwal Airflow, grup log server web Airflow, grup log* *pekerja Airflow, grup log* *pemrosesan Airflow DAG, dan grup log tugas* *Airflow*, seperti yang didefinisikan dalam.* [Mengakses log Aliran Udara di Amazon CloudWatch](monitoring-airflow.md)

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 DAGs](configuring-dag-folder.md)
+ **Akses log**. Akses *grup log server web Airflow di CloudWatch Log*, seperti yang didefinisikan dalam. [Mengakses log Aliran Udara di Amazon CloudWatch](monitoring-airflow.md)
+ **Buat kebijakan kontrol akses**. Buat kebijakan kontrol akses di IAM untuk tim pengembangan Apache Airflow Anda, sebagaimana didefinisikan dalam. [Mengakses lingkungan Amazon MWAA](access-policies.md)

**catatan**  
Di VPC yang menjadi tuan rumah lingkungan Amazon MWAA, diatur `assignIpv6AddressOnCreation` ke `true` untuk semua subnet yang terpasang. Pengaturan ini memastikan penetapan alamat Internet Protocol versi 6 (IPv6) otomatis ke sumber daya dalam subnet ini.

## Prasyarat
<a name="quick-start-before"></a>

The AWS Command Line Interface (AWS CLI) adalah alat open source yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di halaman ini, Anda memerlukan yang berikut:
+ [AWS CLI — Instal versi 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI - Konfigurasi cepat dengan `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

## Langkah satu: Simpan CloudFormation template secara lokal
<a name="quick-start-template"></a>
+ Salin isi template berikut dan simpan secara lokal sebagai`mwaa-public-network.yml`. Anda juga dapat [mengunduh template](./samples/mwaa-public-network.zip).

  ```
  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
  
    MwaaExecutionRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: 2012-10-17&TCX5-2025-waiver;
          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&TCX5-2025-waiver;
          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
<a name="quick-start-createstack"></a>

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

   ```
   cd mwaaproject
   ```

1. Gunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)perintah untuk membuat tumpukan menggunakan file 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
<a name="quick-start-upload-dag"></a>

1. Salin konten `tutorial.py` file untuk versi [Apache Airflow terbaru yang didukung](https://airflow.apache.org/docs/apache-airflow/2.2.2/tutorial.html) dan simpan secara lokal sebagai file. `tutorial.py`

1. Di prompt perintah Anda, arahkan ke direktori tempat `tutorial.py` disimpan. Contoh:

   ```
   cd mwaaproject
   ```

1. Gunakan perintah berikut untuk membuat daftar semua bucket Amazon S3 Anda.

   ```
   aws s3 ls
   ```

1. Gunakan perintah berikut untuk mencantumkan file dan folder di bucket Amazon S3 untuk lingkungan Anda.

   ```
   aws s3 ls s3://YOUR_S3_BUCKET_NAME
   ```

1. Gunakan skrip berikut untuk mengunggah `tutorial.py` file ke `dags` folder Anda. Gantikan nilai sampel di*amzn-s3-demo-bucket*.

   ```
   aws s3 cp tutorial.py s3://amzn-s3-demo-bucket/dags/
   ```

1. Buka halaman [Lingkungan](https://console.aws.amazon.com/mwaa/home#/environments) di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih **Buka UI Aliran Udara**.

1. **Pada Apache Airflow UI, dari daftar yang DAGs tersedia, pilih tutorial DAG.**

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

1. Pilih **Trigger DAG**.

## Langkah empat: akses log di CloudWatch Log
<a name="quick-start-logs"></a>

Anda dapat mengakses log Apache Airflow di CloudWatch konsol untuk semua log Apache Airflow yang diaktifkan oleh tumpukan. CloudFormation Bagian berikut menjelaskan cara mengakses log untuk grup *log server web Airflow*.

1. Buka halaman [Lingkungan](https://console.aws.amazon.com/mwaa/home#/environments) di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih **grup log server web Aliran udara di panel** **Pemantauan**.

1. Pilih `webserver_console_ip` log masuk **Aliran log**.

## Apa selanjutnya?
<a name="quick-start-next-up"></a>
+ Pelajari lebih lanjut tentang cara mengunggah DAGs, menentukan dependensi Python di plugin `requirements.txt` dan kustom di dalam. `plugins.zip` [Bekerja dengan DAGs di Amazon MWAA](working-dags.md)
+ Pelajari lebih lanjut tentang praktik terbaik yang kami rekomendasikan untuk menyesuaikan kinerja lingkungan Anda[Penyetelan kinerja untuk Apache Airflow di Amazon MWAA](best-practices-tuning.md).
+ Buat dasbor pemantauan untuk lingkungan Anda di[Memantau dasbor dan alarm di Amazon MWAA](monitoring-dashboard.md).
+ Jalankan beberapa contoh kode DAG di[Contoh kode untuk Alur Kerja Terkelola Amazon untuk Apache Airflow](sample-code.md).