问题
使用
设置附加到您的 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/
这篇 AWS 文章建议使用 AWS Step Functions 首先获取令牌,使用它来制定索引 URL,然后触发作业并向其传递索引 URL。这看起来非常笨重!
然后我在 AWS Glue 开发人员指南中看到了该页面,其中建议为 CodeArtifact 设置 VPC 终端节点。但不清楚从哪里获取用于指定--index-url
的 URL(看起来像 S3 URL)。有人解决这个问题了吗?
注意:虽然这个问题具体是关于
--index-url
使用什么,但我也愿意接受其他方法来解决如何从 CodeArtifact 安装软件包以在 AWS Glue 作业中使用的根本问题。
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 终端节点。但不清楚从哪里获取用于指定AWS 知道缺乏本机集成,因此需要文档中的
--index-url
的 URL(看起来像 S3 URL)。
设置 Amazon S3 存储桶来托管目标 PyPI/简单存储库 部分。尽管如此,这些文档目前真的、真的、真的很糟糕。
在这种情况下,您没有使用 CodeArtifact。
您使用 实质上在 S3 存储桶中托管 Python 包存储库。请注意,CodeArtifact 和 S3 存储桶之间没有同步选项;您必须手动使用最新版本的软件包更新存储桶。--index-url
是'Python 包索引的基本 URL'。
--trusted-host
用于'将此主机或主机:端口对标记为受信任,即使它没有有效(证书)或任何 HTTPS'。 在 AWS 术语中,需要将
--index-url
设置为 S3 静态网站端点,并且
--trusted-host
需要设置为没有方案的 S3 静态网站端点,例如
https://
。由于 Glue 作业可以在 VPC 中运行,因此参考这样的
answer应该允许您将包存储库锁定到您的私有 VPC。