使用 Google Transfer Operator 转移其他服务中的数据

Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3

本页面演示了如何使用 Google 代码从其他服务转移数据 DAG 中的 Transfer Operator。

Google 转移运算符简介

Google 转移运营商是 一组 Airflow 操作器,可用于将数据从其他服务拉取到 Google Cloud

本指南介绍了适用于 Azure FileShare Storage 和 Amazon S3 的 Cloud Storage还有很多其他的中转运营商 Google Cloud 中的服务以及 Google Cloud

准备工作

Amazon S3 到 Cloud Storage

本部分演示如何将数据从 Amazon S3 同步到 Cloud Storage 存储桶。

安装 Amazon 提供方软件包

apache-airflow-providers-amazon 软件包包含连接 与 Amazon S3 交互的功能类型。 在命令行中安装此 PyPI 软件包 环境

配置与 Amazon S3 的连接

Amazon 提供商软件包提供适用于 Amazon S3 的连接类型。您 创建此类型的连接Cloud Storage 的连接, 您的环境中已设置名为“google_cloud_default”的名称。

通过以下方式设置与 Amazon S3 的连接:

  1. Airflow 界面中,前往管理 > 关联
  2. 创建新连接。
  3. 选择 Amazon S3 作为连接类型。
  4. 以下示例使用名为 aws_s3 的连接。您可以使用 名称,或连接的任何其他名称。
  5. 按照 Airflow 文档中的说明指定连接参数, Amazon Web Services 连接。 例如,要设置与 AWS 访问密钥的连接,您需要生成一个 为您的账号在 AWS 上的访问密钥,然后将 AWS 访问密钥 ID 作为 将 AWS 私有访问密钥登录为连接的密码。

从 Amazon S3 转移数据

如果您想稍后在另一个 DAG 或任务中对已同步的数据执行操作,请执行以下操作: 将其拉取到环境存储桶的 /data 文件夹中。此文件夹是 同步到其他 Airflow 工作器,这样 DAG 中的任务 可以对其执行操作

以下示例 DAG 会执行以下操作:

  • 同步 S3 存储桶中 /data-for-gcs 目录的内容 复制到环境存储桶中的 /data/from-s3/data-for-gcs/ 文件夹中。
  • 等待两分钟,以便数据同步到以下项目中的所有 Airflow 工作器 您的环境
  • 使用 ls 命令输出此目录中的文件列表。将 处理此任务的其他 Airflow 操作。
import datetime
import airflow
from airflow.providers.google.cloud.transfers.s3_to_gcs import S3ToGCSOperator
from airflow.operators.bash_operator import BashOperator

with airflow.DAG(
    'composer_sample_aws_to_gcs',
    start_date=datetime.datetime(2022, 1, 1),
    schedule_interval=None,
) as dag:

    transfer_dir_from_s3 = S3ToGCSOperator(
        task_id='transfer_dir_from_s3',
        aws_conn_id='aws_s3',
        prefix='data-for-gcs',
        bucket='example-s3-bucket-transfer-operators',
        dest_gcs='gs://us-central1-example-environ-361f2312-bucket/data/from-s3/')

    sleep_2min = BashOperator(
        task_id='sleep_2min',
        bash_command='sleep 2m')

    print_dir_files = BashOperator(
        task_id='print_dir_files',
        bash_command='ls /home/airflow/gcs/data/from-s3/data-for-gcs/')


    transfer_dir_from_s3 >> sleep_2min >> print_dir_files

从 Azure 文件共享到 Cloud Storage

本部分演示如何将 Azure FileShare 中的数据同步到 Cloud Storage 存储桶。

安装 Microsoft Azure 提供方软件包

apache-airflow-providers-microsoft-azure 软件包包含连接 与 Microsoft Azure 交互的功能类型和功能。 在命令行中安装此 PyPI 软件包 环境

配置与 Azure 文件共享的连接

Microsoft Azure 提供方软件包提供 Azure 文件的连接类型 共享。您将创建此类连接。通过 名为“google_cloud_default”的 Cloud Storage 已在 您的环境

通过以下方式设置与 Azure FileShare 的连接:

  1. Airflow 界面中,前往管理 > 关联
  2. 创建新连接。
  3. 选择 Azure FileShare 作为连接类型。
  4. 以下示例使用名为 azure_fileshare 的连接。您可以使用 该名称或任何其他连接名称。
  5. 按照 Airflow 文档中的说明指定连接参数, Microsoft Azure 文件共享连接。 例如,您可以为存储账号指定连接字符串 访问密钥。

从 Azure 文件共享传输数据

如果您想稍后在另一个 DAG 或任务中对已同步的数据执行操作,请执行以下操作: 将其拉取到环境存储桶的 /data 文件夹中。此文件夹是 与其他 Airflow 工作器同步,这样 DAG 中的任务 可以对其执行操作

以下 DAG 会执行以下操作:

以下示例 DAG 会执行以下操作:

  • 从 Azure 文件共享同步 /data-for-gcs 目录的内容 复制到环境存储桶中的 /data/from-azure 文件夹中。
  • 等待两分钟,以便数据同步到以下项目中的所有 Airflow 工作器 您的环境
  • 使用 ls 命令输出此目录中的文件列表。将 处理此任务的其他 Airflow 操作。
import datetime
import airflow
from airflow.providers.google.cloud.transfers.azure_fileshare_to_gcs import AzureFileShareToGCSOperator
from airflow.operators.bash_operator import BashOperator

with airflow.DAG(
    'composer_sample_azure_to_gcs',
    start_date=datetime.datetime(2022, 1, 1),
    schedule_interval=None,
) as dag:

    transfer_dir_from_azure = AzureFileShareToGCSOperator(
        task_id='transfer_dir_from_azure',
        azure_fileshare_conn_id='azure_fileshare',
        share_name='example-file-share',
        directory_name='data-for-gcs',
        dest_gcs='gs://us-central1-example-environ-361f2312-bucket/data/from-azure/')

    sleep_2min = BashOperator(
        task_id='sleep_2min',
        bash_command='sleep 2m')

    print_dir_files = BashOperator(
        task_id='print_dir_files',
        bash_command='ls /home/airflow/gcs/data/from-azure/')


    transfer_dir_from_azure >> sleep_2min >> print_dir_files

后续步骤