

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel de démarrage rapide pour Amazon Managed Workflows pour Apache Airflow
<a name="quick-start"></a>

Ce didacticiel de démarrage rapide utilise un AWS CloudFormation modèle qui crée ensemble l'infrastructure Amazon VPC, un compartiment Amazon S3 avec un `dags` dossier et un environnement Amazon Managed Workflows pour Apache Airflow.

**Topics**
+ [Dans ce tutoriel](#quick-start-overview)
+ [Prérequis](#quick-start-before)
+ [Étape 1 : enregistrer le CloudFormation modèle localement](#quick-start-template)
+ [Deuxième étape : créer la pile à l'aide du AWS CLI](#quick-start-createstack)
+ [Troisième étape : télécharger un DAG sur Amazon S3 et l'exécuter dans l'interface utilisateur d'Apache Airflow](#quick-start-upload-dag)
+ [Quatrième étape : accéder aux journaux dans CloudWatch Logs](#quick-start-logs)
+ [Quelle est la prochaine étape ?](#quick-start-next-up)

## Dans ce tutoriel
<a name="quick-start-overview"></a>

Utilisez ce didacticiel pour télécharger un DAG sur Amazon S3, exécuter le DAG dans Apache Airflow et accéder aux logs à CloudWatch l'aide de trois AWS Command Line Interface (AWS CLI) commandes. Enfin, vous apprendrez à créer une politique IAM pour une équipe de développement d'Apache Airflow.

**Note**  
Le CloudFormation modèle de cette page crée un environnement Amazon Managed Workflows for Apache Airflow pour la dernière version d'Apache Airflow disponible dans. CloudFormation La dernière version disponible est Apache Airflow v3.0.6.

Le CloudFormation modèle crée les éléments suivants :
+ **Infrastructure VPC.** Le modèle utilise[Routage public sur Internet](networking-about.md#networking-about-overview-public). Il utilise le [Mode d'accès au réseau public](configuring-networking.md#access-overview-public) pour le serveur Web Apache Airflow dans. `WebserverAccessMode: PUBLIC_ONLY`
+ **Compartiment Amazon S3**. Le modèle crée un compartiment Amazon S3 avec un `dags` dossier. Il est configuré pour **bloquer tout accès public**, avec le contrôle de **version des compartiments** activé, comme défini dans[Création d'un compartiment Amazon S3 pour Amazon MWAA](mwaa-s3-bucket.md).
+ **Environnement Amazon MWAA.** Le modèle crée un environnement Amazon MWAA associé au `dags` dossier du compartiment Amazon S3, un rôle d'exécution autorisant les AWS services utilisés par Amazon MWAA et le chiffrement par défaut à l'aide d'une [cléAWS appartenant](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) à Amazon, comme défini dans. [Création d'un environnement Amazon MWAA](create-environment.md)
+ **CloudWatch Journaux**. *Le modèle active la connexion Apache Airflow au niveau **INFO** et CloudWatch au niveau supérieur pour le groupe de journaux du *planificateur Airflow, le groupe de journaux du serveur Web Airflow, le groupe* *de journaux de travail Airflow, le groupe de journaux* *de traitement Airflow DAG et le groupe* *de journaux de tâches Airflow, tels* que définis dans.* [Accès aux journaux Airflow sur Amazon CloudWatch](monitoring-airflow.md)

Dans ce didacticiel, vous allez effectuer les tâches suivantes :
+ **Téléchargez et exécutez un DAG**. Téléchargez le didacticiel DAG d'Apache Airflow pour la dernière version d'Apache Airflow compatible avec Amazon MWAA sur Amazon S3, puis exécutez-le dans l'interface utilisateur d'Apache Airflow, comme défini dans. [Ajouter ou mettre à jour DAGs](configuring-dag-folder.md)
+ **Journaux d'accès**. Accédez au *groupe de journaux du serveur Web Airflow* dans CloudWatch Logs, comme défini dans. [Accès aux journaux Airflow sur Amazon CloudWatch](monitoring-airflow.md)
+ **Créez une politique de contrôle d'accès**. Créez une politique de contrôle d'accès dans IAM pour votre équipe de développement Apache Airflow, comme défini dans. [Accès à un environnement Amazon MWAA](access-policies.md)

**Note**  
Dans le VPC qui héberge l'environnement Amazon MWAA, définissez ce paramètre sur `assignIpv6AddressOnCreation` `true` pour tous les sous-réseaux attachés. Ce paramètre garantit l'attribution automatique des adresses du protocole Internet version 6 (IPv6) aux ressources de ces sous-réseaux.

## Prérequis
<a name="quick-start-before"></a>

The AWS Command Line Interface (AWS CLI) est un outil open source que vous pouvez utiliser pour interagir avec les AWS services à l'aide de commandes dans votre interface de ligne de commande. Pour effectuer les étapes indiquées sur cette page, vous avez besoin des éléments suivants :
+ [AWS CLI — Installez la version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI — Configuration rapide avec `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

## Étape 1 : enregistrer le CloudFormation modèle localement
<a name="quick-start-template"></a>
+ Copiez le contenu du modèle suivant et enregistrez-le localement sous`mwaa-public-network.yml`. Vous pouvez également [télécharger le modèle](./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}"
  ```

## Deuxième étape : créer la pile à l'aide du AWS CLI
<a name="quick-start-createstack"></a>

1. Dans votre invite de commande, accédez au répertoire dans lequel `mwaa-public-network.yml` est stocké. Par exemple :

   ```
   cd mwaaproject
   ```

1. Utilisez la [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)commande pour créer la pile à l'aide du AWS CLI.

   ```
   aws cloudformation create-stack --stack-name mwaa-environment-public-network --template-body file://mwaa-public-network.yml --capabilities CAPABILITY_IAM
   ```
**Note**  
La création de l'infrastructure Amazon VPC, du compartiment Amazon S3 et de l'environnement Amazon MWAA prend plus de 30 minutes.

## Troisième étape : télécharger un DAG sur Amazon S3 et l'exécuter dans l'interface utilisateur d'Apache Airflow
<a name="quick-start-upload-dag"></a>

1. Copiez le contenu du `tutorial.py` fichier correspondant à la [dernière version prise en charge d'Apache Airflow](https://airflow.apache.org/docs/apache-airflow/2.2.2/tutorial.html) et enregistrez-le localement sous. `tutorial.py`

1. Dans votre invite de commande, accédez au répertoire dans lequel `tutorial.py` est stocké. Par exemple :

   ```
   cd mwaaproject
   ```

1. Utilisez la commande suivante pour répertorier tous vos compartiments Amazon S3.

   ```
   aws s3 ls
   ```

1. Utilisez la commande suivante pour répertorier les fichiers et les dossiers du compartiment Amazon S3 de votre environnement.

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

1. Utilisez le script suivant pour télécharger le `tutorial.py` fichier `dags` dans votre dossier. Remplacez la valeur de l'échantillon par*amzn-s3-demo-bucket*.

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

1. Ouvrez la page [Environnements](https://console.aws.amazon.com/mwaa/home#/environments) sur la console Amazon MWAA.

1. Choisissez un environnement.

1. Choisissez **Open Airflow UI**.

1. Dans l'interface utilisateur d'Apache Airflow, dans la liste des options disponibles DAGs, choisissez le **didacticiel** DAG.

1. Sur la page des détails du DAG, cliquez sur le bouton **Pause/Annuler le DAG à côté du nom de votre DAG pour le remettre en pause**.

1. Choisissez **Trigger DAG**.

## Quatrième étape : accéder aux journaux dans CloudWatch Logs
<a name="quick-start-logs"></a>

Vous pouvez accéder aux journaux Apache Airflow dans la CloudWatch console pour tous les journaux Apache Airflow activés par la pile. CloudFormation La section suivante explique comment accéder aux journaux du groupe de *journaux du serveur Web Airflow*.

1. Ouvrez la page [Environnements](https://console.aws.amazon.com/mwaa/home#/environments) sur la console Amazon MWAA.

1. Choisissez un environnement.

1. Choisissez le **groupe de journaux du serveur Web Airflow** dans le volet de **surveillance**.

1. Choisissez le `webserver_console_ip` **log in Log streams**.

## Quelle est la prochaine étape ?
<a name="quick-start-next-up"></a>
+ En savoir plus sur la façon de télécharger DAGs et de spécifier les dépendances Python dans un fichier d'entrée `requirements.txt` et les plugins personnalisés `plugins.zip` dans un fichier d'entrée[Travailler avec DAGs sur Amazon MWAA](working-dags.md).
+ Découvrez les meilleures pratiques que nous recommandons pour optimiser les performances de votre environnement[Optimisation des performances pour Apache Airflow sur Amazon MWAA](best-practices-tuning.md).
+ Créez un tableau de bord de surveillance pour votre environnement dans[Tableaux de bord de surveillance et alarmes sur Amazon MWAA](monitoring-dashboard.md).
+ Exécutez certains des exemples de code DAG dans[Exemples de code pour Amazon Managed Workflows pour Apache Airflow](sample-code.md).