

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 AWS CodePipeline CI/CD 管道部署 AWS Glue 作业
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein 和 Luis Henrique Massao Yamada，Amazon Web Services*

## Summary
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

此模式演示了如何将 AWS CodeCommit 和 AWS CodePipeline 与 AWS Glue 集成，并在开发人员将其更改推送到远程 AWS 存储库后立即使用 AWS CodeCommit Lambda 启动作业。 

当开发者向提取、转换和加载 (ETL) 存储库提交更改并将更改推送到 AWS 时 CodeCommit，将调用新的管道。管道启动 Lambda 函数，该函数会启动包含这些更改的 AWS Glue 作业。AWS Glue 作业执行 ETL 任务。

当企业、开发人员和数据工程师希望在提交更改并将其推送到目标存储库后立即启动作业时，此解决方案非常有用。它有助于实现更高水平的自动化和可重复性，从而避免作业启动和生命周期期间出现错误。

## 先决条件和限制
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ [Git](https://git-scm.com/) 已安装在本地计算机上
+ 安装在本地计算机上的 [Amazon Cloud Development Kit (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ 安装在本地机器中的 [Python](https://www.python.org/)
+ *附件*部分中的代码

**限制**
+ AWS Glue 作业成功启动后，管道即完成。它不会等待作业结束。
+ 附件中提供的代码仅用于演示目的。

## 架构
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**目标技术堆栈 **
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**目标架构 **

![\[开发者将更改推送到存储库后，立即使用 Lambda 启动 Glue CodeCommit 任务。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

该过程包括这些步骤：

1. 开发人员或数据工程师对 ETL 代码进行修改，提交更改并将更改推送到 AWS CodeCommit。

1. 推送启动管道。

1. 管道启动 Lambda 函数，它会调用存储库上的 `codecommit:GetFile` 并将文件上传到Amazon Simple Storage Service (Amazon S3).。

1. Lambda 函数使用 ETL 代码启动新的 AWS Glue 作业。

1. Lambda 函数完成管道。

**自动化和扩展**

示例附件演示了如何将 AWS Glue 与 AWS 集成 CodePipeline。它提供了一个基准示例，您可对其进行自定义或扩展以供自己使用。有关详细信息，请参阅*操作说明*部分。

## 工具
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — AWS CodePipeline 是一项完全托管的[持续交付](https://aws.amazon.com/devops/continuous-delivery/)服务，可帮助您自动执行发布管道，实现快速可靠的应用程序和基础设施更新。
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/) — AWS CodeCommit 是一项完全托管的[源代码控制](https://aws.amazon.com/devops/source-control/)服务，可托管基于 Git 的安全存储库。
+ [AWS Lambda](https://aws.amazon.com/lambda/) – AWS Lambda 是一项无服务器计算服务，可帮助您运行代码，无需预置或管理服务器。
+ [AWS Glue](https://aws.amazon.com/glue) – AWS Glue 是一项无服务器数据集成服务，可轻松发现、准备和组合数据，以用于分析、机器学习和应用程序开发。
+ [Git 客户端](https://git-scm.com/downloads) — Git 提供 GUI 工具，或者你可以使用命令行或桌面工具从中查看所需的工件 GitHub。 
+ [AWS CDK](https://aws.amazon.com/cdk/) – The AWS CDK 是开源软件开发框架，帮助您使用熟悉的编程语言定义云应用程序资源。

## 操作说明
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### 部署示例代码
<a name="deploy-the-sample-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 AWS CLI。 | 将 AWS 命令行界面（AWS CLI）配置为目标并使用您当前的 Amazon Web Services account 进行身份验证。有关说明，请参阅 [AWS CLI 文档](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。 | 开发人员、 DevOps 工程师 | 
| 提取项目文件示例。 | 从附件中提取文件，以创建包含示例项目文件的文件夹。 | 开发人员、 DevOps 工程师 | 
| 部署示例代码。 | 解压缩文件后，从提取位置运行以下命令，以创建基准示例：<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre>执行最后一个命令后，您可以监控管道和 AWS Glue 作业的状态。 | 开发人员、 DevOps 工程师 | 
| 自定义代码。 | 根据您的业务需求自定义 etl.py 文件代码。您可修改 ETL 代码、修改管道阶段或者扩展解决方案。 | 数据工程师 | 

## 相关资源
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [AWS CDK 入门](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [在 AWS Glue 中添加作业](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)
+ [源操作集成 CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [在中的管道中调用 AWS Lambda 函数 CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [AWS Glue 编程](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html)
+ [AWS CodeCommit GetFile API](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## 附件
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)