【问题标题】:Is there a simple way to clone a glue job, but change the database connections?有没有一种简单的方法来克隆胶水作业,但更改数据库连接?
【发布时间】:2023-03-21 14:51:01
【问题描述】:

我有大量客户提供相同格式的数据,并且需要将它们加载到不同数据库中的相同表中。我已经在 Glue 中为他们设置了一份工作,但现在我必须再做 20 次同样的事情

有什么方法可以获取现有作业并复制它,但要更改 S3 文件路径和 JDBC 连接?

我无法在网上找到很多关于 AWS Glue 中的脚本的信息。这可以通过 AWS 命令​​行界面实现吗?

【问题讨论】:

    标签: amazon-web-services aws-glue


    【解决方案1】:

    最快的方法是使用 aws cli。

    aws glue get-job --job-name <value>
    

    其中 value 是您尝试复制的特定作业。然后,您可以更改上述命令返回的 JSON 中的 s3 路径和 JDBC 连接信息。此外,您需要给它一个新的唯一名称。完成后,您可以将其传递给:

    aws glue create-job --cli-input-json <value>
    

    其中 value 是您尝试从中创建新作业的更新后的 JSON。

    有关胶水命令行的更多信息,请参阅AWS command line reference

    【讨论】:

    • 这正是我所需要的。非常感谢:)
    • CLI 很棒。我几乎已经在一天内完成了整个过程的自动化。再次感谢您的建议
    【解决方案2】:

    使用命令

    aws glue create-job --generate-cli-skeleton
    

    生成骨架 JSON

    使用以下命令获取现有作业的定义

    aws glue get-job --job-name &lt;value&gt;

    将现有作业定义输出中的值复制到骨架中

    删除换行符并将其作为输入传递给下面的命令

    aws glue create-job --cli-input-json <framed_JSON>
    

    这里是创建作业 AWS CLI 文档的完整参考

    https://docs.aws.amazon.com/cli/latest/reference/glue/create-job.html

    PS:不要改变JSON中元素的顺序(在骨架中生成),只更新连接和名称

    --cli-input-json (string) 根据提供的 JSON 字符串执行服务操作。 JSON 字符串遵循 --generate-cli-skeleton 提供的格式。如果在命令行上提供了其他参数,则 CLI 值将覆盖 JSON 提供的值。无法使用 JSON 提供的值传递任意二进制值,因为字符串将按字面意思获取。

    --generate-cli-skeleton (string) 将 JSON 骨架打印到标准输出,而不发送 API 请求。如果未提供值或值输入,则打印可用作 --cli-input-json 参数的示例输入 JSON。如果提供值输出,它会验证命令输入并返回该命令的示例输出 JSON。

    【讨论】:

      【解决方案3】:

      感谢此处提供的出色答案,您已经知道 AWS CLI 可以提供帮助。

      提示:如果您不想安装或更新 AWS CLI,只需使用 AWS CloudShell

      我已经使用版本测试了这里的命令:

      $ aws --version
      aws-cli/1.19.14 Python/3.8.5 Linux/5.4.0-65-generic botocore/1.20.14
      

      如果您想从头开始创建新工作,您首先需要一个模板,您可以使用该模板:

      aws glue create-job --generate-cli-skeleton > job_template.json
      

      然后用你最喜欢的编辑器(我喜欢vim)在job_template.json(或者你怎么称呼它)中填写详细信息。

      但是,如果 DuckDuckGo 或其他引擎将您发送到此处,则可能存在您想要克隆和调整的现有工作。在本指南中,我们将其称为“perfect_job”。

      让我们获取所有工作的列表,以检查我们是否在正确的位置。

      aws glue list-jobs --region us-east-1
      

      输出向我们展示了两个工作:

      {
          "JobNames": [
              "perfect_job",
              "sunshine"
          ]
      }
      

      查看我们的工作:

      aws glue get-job --job-name perfect_job --region us-east-1
      

      JSON 输出看起来不错,让我们把它放在一个文件中以便我们可以编辑它:

      aws glue get-job --job-name perfect_job --region us-east-1 > perfect_job.json
      

      让我们将 cp 放到一个新文件中,比如 super_perfect_job.json。现在您可以对其进行编辑以根据需要更改字段。首先当然是改名字!

      需要注意的两点:

      1. 移除 JSON 的外层,我们需要 Job 而不是 Job 标识符本身。如果您查看上面创建的job_template.json,您会发现它必须以Name 开头,所以这是一个小的修改以符合格式要求。

      2. job_template.json 中也没有 CreatedOnLastModifiedOn,所以我们也删除这些行。不用担心,如果您忘记删除它们,创建将失败并显示一个有用的消息,例如 'Parameter validation failed: Unknown parameter in input: "LastModifiedOn"'

      现在我们可以创建作业了!以下示例将在开普敦地区添加 Glue 作业“super_perfect_job”:

      aws glue create-job --cli-input-json file://super_perfect_job.json --region af-south-1
      

      但这没有用:

      调用 CreateJob 时发生错误 (InvalidInputException) 操作:请仅设置分配容量或最大容量。

      我删除MaxCapacity 并重试。还是不开心:

      调用 CreateJob 时发生错误 (InvalidInputException) 操作:如果使用 Worker Type,请不要设置 Allocated Capacity 和工人人数。

      很好。我删除了AllocatedCapacity,然后再试一次。这次的输出是:

      {
          "Name": "super_perfect_job"
      }
      

      这意味着,成功!您可以再次运行list-jobs 进行确认。打开 AWS 控制台并看到它在 Web UI 中弹出会更有成就感。

      我们迫不及待地想要运行这个作业,所以我们也将使用 CLI,并且我们将传递三个附加参数:--fruit--vegetable--nut,这是我们的脚本所期望的。但是-- 会混淆 AWS CLI,所以让我们将它们存储在一个名为 args.json 的文件中,其中包含:

      {
        "--fruit": "tomato",
        "--vegetable": "cucumber",
        "--nut": "almond"
      }
      

      然后这样称呼我们的工作:

      aws glue start-job-run --job-name super_perfect_job --arguments file://args.json --region af-south-1
      

      或者像这样:

      aws glue start-job-run --job-name super_perfect_job --arguments '{"--fruit": "tomato","--vegetable": "cucumber"}'
      

      您可以通过以下方式查看作业运行的状态:

      aws glue get-job-runs --job-name super_perfect_job --region us-east-1
      

      如您所见,AWS CLI 访问的 AWS Glue API 非常强大,不仅方便,而且还允许在 Jenkins 等持续集成 (CI) 服务器中实现自动化。运行aws glue help 获取更多命令和快速帮助,或查看online documentation 了解更多详细信息。

      要创建或管理永久性基础架构,最好使用基础架构即代码工具,例如 CloudFormation 或 Terraform。

      【讨论】:

        猜你喜欢
        • 2020-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        相关资源
        最近更新 更多