【问题标题】:How to transfer files and directories from remote server to GCS buckets如何将文件和目录从远程服务器传输到 GCS 存储桶
【发布时间】:2022-10-17 10:21:05
【问题描述】:

我被困住了。我必须以给定的调度时间(比如说每周)将文件和目录从远程服务器(可能是 Linux)导入 GCS 存储桶。
服务器上有几个文件夹,每个项目一个。在项目文件夹中,还有其他具有日期名称的文件夹(20221015、20221019、...)。在每个文件夹中都有其他子文件夹。
我必须每周从日期文件夹开始迁移整个文件夹。\

  1. 第一个问题:哪个 Google 服务更适合我的目的:Storage Transfer ServiceCloud Composer(此任务是否有操作员)?
  2. 第二个问题:如何避免导入我已经导入(即一周前)的日期文件夹?

    谢谢您的帮助

【问题讨论】:

  • 在您的 VM 上创建一个 bash 脚本和一个 cron 条目。我认为写起来不应该太复杂。忘记存储传输服务和 Composer
  • Linux 服务器不受我控制。它是第三方服务器。这就是为什么我需要从 GCP 附加一个连接器
  • 那么,您希望 Cloud Storage 将文件推送到服务器吗?

标签: google-cloud-platform google-cloud-storage airflow google-cloud-composer


【解决方案1】:

使用 Cloud Composer,您可以使用 SFTPToGCSOperator

这是我的工作 DAG:

import os

from airflow import models
from airflow.models import Variable
from airflow.providers.google.cloud.transfers.sftp_to_gcs import SFTPToGCSOperator
from airflow.utils.dates import days_ago

default_args = {"start_date": days_ago(1)}

DIR_path = "<your-path>"
BUCKET_SRC = "<your-bucket>"

with models.DAG(
    "dag_sftp_to_gcs", default_args=default_args, schedule_interval=None
) as dag:

    copy_sftp_to_gcs = SFTPToGCSOperator(
        task_id="t_sftp_to_gcs",
        sftp_conn_id="<your-connection>",
        gcp_conn_id="google_cloud_default",
        source_path=os.path.join(DIR_path, "*.xlsx"), #you may use wildcard to get multiple files
        destination_bucket=BUCKET_SRC,
    )

    copy_sftp_to_gcs

请记住,您需要在防火墙设置中允许 ssh。您也可以关注SO post,了解如何在 Airflow 中创建连接。

我的虚拟机中的文件:

Airflow 控制台中的状态:

在 GCS 中传输的文件:

对于第二个问题,您可以在服务器上创建一个内部 shell 脚本,用于传输/删除您想要保留或删除的文件,以便 Aitflow 获取正确的文件。

【讨论】:

    猜你喜欢
    • 2023-01-22
    • 2023-02-10
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2017-12-06
    • 2022-10-09
    相关资源
    最近更新 更多