当前位置: 首页 > article >正文

在 AWS 私有环境中使用 Terraform 设置 Pypi 镜像

原文towardsdatascience.com/set-up-a-pypi-mirror-in-an-aws-private-environment-with-terraform-f0fcc1b67cc0?sourcecollection_archive---------7-----------------------#2024-03-06https://medium.com/florentpajot?sourcepost_page---byline--f0fcc1b67cc0--------------------------------https://towardsdatascience.com/?sourcepost_page---byline--f0fcc1b67cc0-------------------------------- Florent Pajot·发布于 Towards Data Science ·5 分钟阅读·2024 年 3 月 6 日–如果没有互联网访问如何在环境中安装 Python 包我最近在为我的团队在 AWS 上创建 AWS Sagemaker Studio 环境时遇到了这个问题。为 Sagemaker 构建 AWS 私有环境对于这个特定项目我在仅限 VPC 模式下设置了 Sagemaker并且有一个保持架构私有的约束这意味着创建 VPC 和私有子网但没有互联网访问。所有网络通信包括与 AWS API 的应用通信必须通过 VPC Endpoint 接口进行。这可以确保连接安全因为发送和接收的数据不会通过互联网而是使用 AWS 网络骨干进行传输。这特别适用于限制暴露于安全风险尤其是在处理个人信息或必须遵守某些安全标准时。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/980cca82296b30632ecaa6058b1111f4.png图片来自 Nadir sYzYgY 通过 Unsplash从 AWS Sagemaker 访问 Pypi 包仓库在我的团队中数据科学家使用 Python 作为主要语言有时需要一些Sagemaker 预构建 Python 镜像中未提供的 Python 包因此我将重点讨论这个用例。幸运的是解决方案也适用于其他语言和仓库例如 npm。用户通常会尝试通过 pip 命令安装所需的任何包。但是由于不允许互联网访问这个命令会失败因为 pip 无法连接到 Pypi.org 服务器。开启互联网一种选择是开放互联网访问并允许向 Pypi.org 服务器使用的 Fastly CDN IP 地址发出外部 HTTP 连接。但在我们的情况下这是不可行的因为我们不希望架构中有任何互联网连接。使用专用 Pypi 服务器AWS 博客还提供了一个使用名为 Bandersnatch 的 Python 包的示例。这篇文章描述了如何设置一个服务器作为堡垒主机镜像 Pypi并且只对你的私有子网可访问。这不是一个可行的选项因为你需要提前知道需要提供哪些 Python 包并且你还得创建公共子网并为 Pypi 服务器镜像提供互联网访问权限。使用 AWS Codeartifact这最终是我想出的解决方案并且在我的情况下是有效的。AWS Codeartifact 是 AWS 提供的工件管理解决方案。它与其他 AWS 服务兼容如 AWS 服务目录用于控制组织内资源的访问。要使用它你必须创建一个“域”它作为一个总览来管理访问权限并在你的组织内应用政策。然后你需要创建一个仓库供不同的应用程序使用你的工件。此外一个仓库可以拥有上游仓库。因此如果目标仓库中没有某个 Python 包需求将传递到上游仓库以进行满足。更准确地说这个工作流考虑了包版本。官方文档提供了详细的工作流如果my_repo包含请求的包版本它将返回给客户端。如果my_repo不包含请求的包版本CodeArtifact 会在my_repo的上游仓库中查找它。如果找到该版本的包将其引用复制到my_repo中并将包版本返回给客户端。如果my_repo和它的上游仓库都不包含该包版本客户端将收到 HTTP 404未找到响应。酷吧它甚至会缓存包版本以便将来的请求使用。这正是我们将使用的策略因为 AWS Codeartifact 允许我们定义一个具有外部连接如 Pypi作为上游仓库的仓库。使用 Terraform 创建 AWS Codeartifact 资源由于 AWS Codeartifact 是 AWS 服务你可以轻松地在你的环境 VPC 中创建一个 VPC 端点来连接它。注我正在使用 Terraform v1.6.4 和 AWS 提供程序 v5.38.0locals{regionus-east-1}resourceaws_security_groupvpce_sg{nameAllowTLSdescriptionAllow TLS inbound traffic and all outbound trafficvpc_idaws_vpc.your_vpc.idtags{Nameallow_tls_for_vpce}}resourceaws_vpc_security_group_ingress_ruleallow_tls_ipv4{security_group_idaws_security_group.allow_tls.idcidr_ipv4aws_vpc.your_vpc.cidr_block from_port443ip_protocoltcpto_port443}dataaws_iam_policy_documentcodeartifact_vpce_base_policy{statement{sidEnableRoleseffectAllowactions[codeartifact:GetAuthorizationToken,codeartifact:GetRepositoryEndpoint,codeartifact:ReadFromRepository,sts:GetServiceBearerToken]resources[*,]principals{typeAWSidentifiers[aws_iam_role.your_sagemaker_execution_role.arn]}}}resourceaws_vpc_endpointcodeartifact_api_vpce{vpc_idaws_vpc.your_vpc.idservice_namecom.amazonaws.${local.region}.codeartifact.apivpc_endpoint_typeInterfacesubnet_idsaws_subnets.your_private_subnets.ids security_group_ids[aws_security_group.vpce_sg.id,]private_dns_enabledtrue policydata.aws_iam_policy_document.codeartifact_vpce_base_policy.json tags{Namecodeartifact-api-vpc-endpoint}}然后你需要创建不同的资源以便 Codeartifact 能通过镜像 Pypi 处理你对新 Python 包的请求一个域名一个具有外部连接的 Pypi 仓库以及一个将 Pypi 定义为上游仓库的仓库。resourceaws_codeartifact_domainmy_domain{domainmy-domainencryption_keytags{Namemy-codeartifact-domain}}resourceaws_codeartifact_repositorypublic_pypi{repositorypypi-storedomainaws_codeartifact_domain.my_domain.domain external_connections{external_connection_namepublic:pypi}tags{Namepypi-store-repository}}resourceaws_codeartifact_repositorymy_repository{repositorymy_repositorydomainaws_codeartifact_domain.my_domain.domain upstream{repository_nameaws_codeartifact_repository.public_pypi.repository}tags{Namemy-codeartifact-repository}}dataaws_iam_policy_documentmy_repository_policy_document{statement{effectAllowprincipals{typeAWSidentifiers[aws_iam_role.your_sagemaker_execution_role.arn]}actions[codeartifact:ReadFromRepository]resources[aws_codeartifact_repository.my_repository.arn]}}resourceaws_codeartifact_repository_permissions_policymy_repository_policy{repositoryaws_codeartifact_repository.my_repository.repository domainaws_codeartifact_domain.my_domain.domain policy_documentdata.aws_iam_policy_document.my_repository_policy_document.json}就是这样你现在可以轻松为你的私有环境设置一个 Pypi 镜像。为了使其可用你还需要告诉 pip 命令将请求指向特定的索引。幸运的是AWS 创建了一个 API 来为你完成繁重的工作。只需将以下代码添加到你的项目中即可使其工作aws codeartifact login--tool pip--repository $CODE_ARTIFACT_REPOSITOR_ARN--domain $CODE_ARTIFACT_DOMAIN_ID--domain-owner $ACCOUNT_ID--region $REGION最后但同样重要的是在你的 VPC 中为 AWS Codeartifact 添加一个 VPC 端点。dataaws_iam_policy_documentcodeartifact_vpce_base_policy{statement{sidEnableRoleseffectAllowactions[codeartifact:GetAuthorizationToken,codeartifact:GetRepositoryEndpoint,codeartifact:ReadFromRepository,sts:GetServiceBearerToken]resources[*,]principals{typeAWSidentifiers[aws_iam_role.your_sagemaker_execution_role.arn]}}}resourceaws_vpc_endpointcodeartifact_api_vpce{vpc_idaws_vpc.your_vpc.idservice_namecom.amazonaws.${local.region}.codeartifact.apivpc_endpoint_typeInterfacesubnet_idsaws_subnets.your_private_subnets.ids security_group_ids[aws_security_group.vpce_sg.id,]private_dns_enabledtrue policydata.aws_iam_policy_document.codeartifact_vpce_base_policy.json tags{Namecodeartifact-api-vpc-endpoint}}如果你想接收有关 AWS 等方面的最新帖子通知请在此订阅。你知道你可以多次拍手吗

相关文章:

在 AWS 私有环境中使用 Terraform 设置 Pypi 镜像

原文:towardsdatascience.com/set-up-a-pypi-mirror-in-an-aws-private-environment-with-terraform-f0fcc1b67cc0?sourcecollection_archive---------7-----------------------#2024-03-06 https://medium.com/florentpajot?sourcepost_page---byline--f0fcc1b67…...

DAC8562双通道16位SPI数模转换器驱动库详解

1. DAC8562系列双通道16位SPI数模转换器驱动库深度解析DAC8562是德州仪器(TI)推出的一款高精度、低功耗、双通道16位串行输入数模转换器(DAC),采用标准SPI接口通信,广泛应用于工业控制、测试测量、音频信号…...

从零搭建猫狗识别桌面应用(PyTorch + Tkinter 实战)

1. 环境准备与工具安装 要搭建猫狗识别桌面应用,首先需要配置好开发环境。这里推荐使用Python 3.8版本,因为PyTorch和Tkinter在这个版本上兼容性最好。我实测过多个Python版本,发现3.8在稳定性和性能上表现最均衡。 安装核心依赖库只需要一行…...

顺序测试:低量级 A/B 测试的秘密调料

原文:towardsdatascience.com/sequential-testing-the-secret-sauce-for-low-volume-a-b-tests-fe62bdf9627b 在处理有限数据时如何加速决策并提高准确性 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/36b9886f43ff7bdaeb3e…...

MCP3425 16位I²C接口ADC原理与嵌入式应用实战

1. MCP3425 16位高精度IC接口模数转换器深度解析MCP3425是Microchip公司推出的一款单通道、16位Δ-Σ型模数转换器(ADC),专为高精度、低功耗、小尺寸嵌入式测量系统设计。其核心价值在于以极简的硬件接口(仅需两根IC信号线&#x…...

阻抗匹配原理与实战:射频电路设计核心技能

1. 阻抗匹配:电子工程师的必修课作为一名在射频电路设计领域摸爬滚打多年的工程师,我深知阻抗匹配这个看似基础的概念在实际工程中的重要性。记得刚入行时,就因为没处理好一个简单的天线匹配电路,导致整批样机射频性能不达标&…...

大厂面试真题揭秘:38W-55W年薪,大模型算法工程师核心考点全解析!

面试信息 岗位:大模型应用算法工程师-电商方向 类别:算法类 - 自然语言处理 地点:杭州 bg:普通211 渣硕 薪资情况 薪资构成:16 薪,属于互联网第一梯队。 硕士 总包:38W ~ 55W / 年普通档:38W ~ …...

Qwen3.5本地部署,非常详细收藏我这一篇就够了

这一篇我们来聊点更实际的——怎么本地跑起来。 397B 参数的模型,哪怕只激活 17B,完整模型也有 807GB。听起来吓人,但实际上,得益于 Unsloth 的 Dynamic 2.0 量化技术,192GB 内存的 Mac 就能跑 3-bit 版本&#xff0c…...

告别Telnet和Jmeter!用Apifox 2.3.24一站式调试Dubbo 3.x接口(保姆级Nacos集成教程)

告别Telnet和Jmeter!用Apifox 2.3.24一站式调试Dubbo 3.x接口(保姆级Nacos集成教程) 如果你正在使用Dubbo 3.x构建微服务,可能已经发现传统的调试工具越来越力不从心。Telnet虽然简单但功能有限,Jmeter需要额外插件且对…...

Level2行情接口全解析:从实时数据订阅到历史回测的量化实战指南

1. Level2行情接口入门:为什么量化交易离不开它 第一次接触Level2行情时,我也被那些专业术语搞得一头雾水。直到有次亲眼看到两个量化团队用相同策略回测,用Level1数据的团队年化收益12%,而用Level2数据的团队达到21%,…...

告别环境冲突:在Anaconda中为PyTorch创建独立的Python 3.10 + CUDA 12.1虚拟环境

深度隔离:用Anaconda构建PyTorchCUDA开发环境的工程化实践 在深度学习项目开发中,环境管理往往是最容易被忽视却最关键的一环。想象一下这样的场景:你正在开发一个基于Transformer的NLP模型,突然需要切换到另一个使用不同CUDA版本…...

告别黑盒!用MMDetection 3.x生成检测热力图,5分钟搞定论文级可视化

深度学习目标检测热力图可视化:5步打造学术级模型解释方案 在计算机视觉领域,目标检测模型的可解释性一直是研究者关注的焦点。当我们在学术论文或技术报告中展示检测结果时,传统的边界框往往难以直观呈现模型的注意力分布——而这正是热力图…...

AI赋能智能制造:预测性维护在工业4.0中的落地实践

1. 预测性维护:从被动维修到智能预防的革命 想象一下,你家的空调突然在炎热的夏天罢工了,维修师傅告诉你:"这个零件本来三个月前就该换了"。这种场景在工业生产中放大1000倍,就是传统维护方式带来的痛点。预…...

嵌入式EEPROM文件化存储库:轻量级持久化方案

1. 项目概述PersistentStorage 是一个面向嵌入式设备 EEPROM 的轻量级、文件语义化持久化存储库,专为资源受限的 MCU(如 ESP32、STM32F0/F1、nRF52 等)设计。其核心设计理念是在无文件系统(FS)的裸机或 RTOS 环境中&am…...

boss __zp_stoken__

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 部分python代码result ctx.…...

P0400YE FBM04输入输出模块

P0400YE FBM04输入输出模块是一款面向工业自动化系统的通用I/O单元,主要用于实现现场设备与控制系统之间的信号交互,具备高可靠性和良好扩展性,广泛应用于生产线、过程控制及分布式控制系统中。支持多通道数字输入输出,提高系统控…...

MMC储能、分布式储能Simulink仿真及DCDC升降压储能模块的SOC均衡控制采用模型预测控制

mmc储能 分布式储能simulink仿真 soc均衡控制 采用模型预测控制 dcdc升降压储能模块最近在搞MMC储能的仿真项目,发现这玩意儿真是电网调频的宝藏工具。特别是当分布式储能单元遇上模块化多电平换流器,SOC均衡控制就成了最烧脑的环节。今天咱们就撸起袖…...

面向“实时空间孪生系统”在煤化工行业落地应用:专家质询18问18答

《专家质询18问18答(煤化工专用版)》——面向“实时空间孪生系统”在煤化工行业落地应用的专家答辩标准话术一、系统定位类质询1. 专家问:你们这个系统和传统数字孪生到底有什么本质区别?不要泛泛而谈。答: 传统数字孪…...

设置 Docker 化的 Python 环境 — 优雅的方式

原文:towardsdatascience.com/setting-a-dockerized-python-environment-the-elegant-way-f716ef85571d?sourcecollection_archive---------1-----------------------#2024-04-02 本文提供了一个逐步指南,介绍如何使用 VScode 和 Dev Containers 扩展设…...

Span<T>跨平台序列化加速,深度集成System.Text.Json与MessagePack(含Benchmark实测:吞吐量提升4.2倍)

第一章&#xff1a;Span<T>跨平台序列化加速&#xff0c;深度集成System.Text.Json与MessagePack&#xff08;含Benchmark实测&#xff1a;吞吐量提升4.2倍&#xff09;<T> 作为 .NET Core 2.1 引入的零分配内存视图类型&#xff0c;为高性能序列化提供了底层基石。…...

【医疗信息化开发者必修课】:C# FHIR SDK实战指南——从零构建符合HL7 FHIR R4规范的患者数据服务

第一章&#xff1a;FHIR标准与医疗信息化开发全景概览 FHIR&#xff08;Fast Healthcare Interoperability Resources&#xff09;是由HL7组织制定的现代医疗数据交换标准&#xff0c;旨在通过RESTful API、结构化资源和开放格式&#xff08;如JSON/XML&#xff09;弥合异构医疗…...

Altium Designer原理图高效绘制:如何利用模板和快捷键提升3倍工作效率

Altium Designer原理图高效绘制&#xff1a;如何利用模板和快捷键提升3倍工作效率 在电子设计领域&#xff0c;效率往往决定着项目成败。当面对复杂电路设计时&#xff0c;熟练的设计师与新手之间的差距不仅体现在设计质量上&#xff0c;更体现在完成速度上。我曾参与过一个工业…...

ETASOLUTIONS钰泰 ETA3409S2F SOT23-5 DC-DC电源芯片

特性 宽输入电压范围:2.4-7.3V待机电流42uA(输出电压1.2V&#xff0c;输出电流0A) 最高可达96%效率最大输出电流可达3安培1MHz频率轻载运行内部补偿功能微型S0T23-5封装...

C# Span<T>性能优化实战指南(90%开发者忽略的栈内存安全边界与Unsafe.As<T>陷阱)

第一章&#xff1a;C# Span性能优化实战指南&#xff08;90%开发者忽略的栈内存安全边界与Unsafe.As陷阱&#xff09;Span 的栈内存安全边界 Span<T> 在栈上分配元数据&#xff08;仅 16 字节&#xff09;&#xff0c;但其指向的数据仍可能位于堆、本机内存或栈。关键约束…...

.NET 9边缘测试黄金标准(微软内部CI/CD流水线首次公开):含12项必验指标与3种硬件故障注入模板

第一章&#xff1a;.NET 9边缘部署测试的演进与战略定位.NET 9标志着微软在云边协同架构上的关键跃迁——其原生支持AOT编译、精简运行时&#xff08;Microsoft.NETCore.App.Runtime.Minimal&#xff09;及轻量级容器镜像&#xff0c;为边缘场景下的确定性启动、低内存占用与快…...

HsMod终极指南:如何让炉石传说体验提升300%

HsMod终极指南&#xff1a;如何让炉石传说体验提升300% 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 如果你是一位炉石传说玩家&#xff0c;是否曾经为漫长的动画等待、繁琐的开包操作或…...

【Python原生AOT编译2026企业落地白皮书】:覆盖金融/车载/边缘场景的7大不可替代性验证数据

第一章&#xff1a;Python原生AOT编译的2026企业级定位与战略价值从运行时依赖到零依赖交付 2026年&#xff0c;Python原生AOT&#xff08;Ahead-of-Time&#xff09;编译已突破实验阶段&#xff0c;成为金融、电信与边缘IoT等高合规、低延迟场景的核心交付范式。它不再依赖CPy…...

高光谱成像基础(完)光谱融合(Spectral Fusion)肆

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单&#xff0c;下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...

字符串拼接用“+”还是 StringBuilder?别再凭感觉写了嘏

前言 Kubernetes 本身并不复杂&#xff0c;是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps&#xff0c;这些基础组件简单直接&#xff0c;甚至显得有些枯燥。但后来我…...

【C语言】自定义数据类型——结构体

目录 一、引入结构体 二、结构体的定义、创建与初始化 1.定义 2.创建 ①定义后直接创建 ②先定义再创建 ③使用匿名结构体&#xff08;不推荐&#xff0c;因为无法再次使用该类型&#xff09; ④创建结构体数组 3.初始化 ①按成员顺序初始化 ②按照任意顺序初始化 …...