如何从 AWS CodeArtifact 安装软件包以在 AWS Glue Spark 作业中使用?

问题描述 投票:0回答:1

问题

使用

设置附加到您的 VPC 的 pypi 的 CodeArtifact 镜像部分中描述的方法时,我应该使用什么来 
--index-url
--trusted-host 在 AWS Glue (Spark) 作业中安装来自 AWS CodeArtifact 的 Python 包此 AWS Glue 开发人员指南页面

背景

我正在尝试运行需要导入私有包的 AWS Glue Spark 作业。这些包可在 AWS CodeArtifact 的存储库中获取。我能够从 EC2 安装软件包;这个问题是关于安装在 AWS Glue 中使用的包。

我能够通过指定以下作业参数来安装软件包:

  • --additional-python-modules
     作为包名
  • --python-modules-installer-option
    --index-url=https://aws:<codeartifact token>@<domain name>-<domain-owner>.d.codeartifact.<region>.com/pypi/<repo name>/simple/
    
    
问题是 codeartifact 令牌每 12 小时就会过期。因此,我可以通过手动生成令牌并将其替换到作业参数中来使其工作,但这并不理想。

这篇 AWS 文章建议使用 AWS Step Functions 首先获取令牌,使用它来制定索引 URL,然后触发作业并向其传递索引 URL。这看起来非常笨重!

然后我在 AWS Glue 开发人员指南中看到了该页面,其中建议为 CodeArtifact 设置 VPC 终端节点。但不清楚从哪里获取用于指定

--index-url

 的 URL(看起来像 S3 URL)。

有人解决这个问题了吗?

注意:虽然这个问题具体是关于

--index-url

 使用什么,但我也愿意接受其他方法来解决如何从 CodeArtifact 安装软件包以在 AWS Glue 作业中使用的根本问题。

aws-glue aws-codeartifact
1个回答
0
投票
CodeArtifact 令牌每 12 小时过期

正确,CodeArtifact 代币的最短有效期为 15 分钟,最长有效期为 12 小时。没有“解决方法”。

这篇 AWS 文章建议使用 AWS Step Functions 首先获取令牌,使用它来制定索引 URL,然后触发作业并向其传递索引 URL。这看起来非常笨重!

您已经发现使用 AWS CodeArtifact 的主要痛点:默认没有自动刷新功能。

其他不适用于 AWS Glue 的社区解决方法包括创建自定义 Java Gradle 插件来自动刷新、按 Cron 计划运行脚本、将令牌写入文件并在从存储库中提取之前检查上次修改的内容等。

目前,AWS CodeArtifact 和 AWS Glue 之间没有原生集成来管理后台的令牌生命周期。

如果您想使用 CodeArtifact,您

必须最多每 12 小时生成一个新令牌。 由于没有本机集成,博客中提到的解决方案是可行的。

然后我在 AWS Glue 开发人员指南中看到了该页面,其中建议为 CodeArtifact 设置 VPC 终端节点。但不清楚从哪里获取用于指定

--index-url

 的 URL(看起来像 S3 URL)。

AWS 知道缺乏本机集成,因此需要文档中的

设置 Amazon S3 存储桶来托管目标 PyPI/简单存储库 部分。尽管如此,这些文档目前真的、真的、真的很糟糕

在这种情况下,

您没有使用 CodeArtifact

您使用

s3pypi

 实质上在 S3 存储桶中托管 Python 包存储库。请注意,CodeArtifact 和 S3 存储桶之间没有同步选项;您必须手动使用最新版本的软件包更新存储桶。

--index-url

'Python 包索引的基本 URL'

--trusted-host

 用于 
'将此主机或主机:端口对标记为受信任,即使它没有有效(证书)或任何 HTTPS'

在 AWS 术语中,需要将

--index-url

 设置为 S3 静态网站端点,并且 
--trusted-host
 需要设置为没有方案的 S3 静态网站端点,例如
https://

由于 Glue 作业可以在 VPC 中运行,因此参考这样的

answer应该允许您将包存储库锁定到您的私有 VPC。

© www.soinside.com 2019 - 2024. All rights reserved.