ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 AWS CLI 的 associate-external-connection 命令为 CodeArtifact 仓库添加外部连接

使用 AWS CLI 的 associate-external-connection 命令为 CodeArtifact 仓库添加外部连接 使用 AWS CLI 的 associate-external-connection 命令为 CodeArtifact 仓库添加外部连接【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本指南以 associate-external-connection.rst 为核心系统讲解如何在 AWS CodeArtifact 中通过 AWS CLI 为仓库关联 npm、Maven、PyPI、NuGet 等公有软件源让私有仓库能够直接拉取并缓存上游公共包。读完本文后你将掌握associate-external-connection的完整命令参数、支持的全部外部连接名称、典型输出字段的语义以及如何用disassociate-external-connection反向移除连接并结合 AWS CLI 源码理解该 API 的底层实现。什么是 CodeArtifact 外部连接AWS CodeArtifact 是 Amazon Web Services 提供的一项完全托管的制品仓库服务兼容 npm、Apache Maven、pip、NuGet、Swift、RubyGems、Cargo 等语言生态的包管理器。在 CodeArtifact 中仓库Repository是存放包版本Package Version及其资产Asset的核心容器一个账号下最多可创建 100 个仓库且单个仓库可以同时容纳任意受支持类型的包即多语言仓库——这一能力在 service-2.json 的RepositoryDescription文档中有明确描述。外部连接External Connection是 CodeArtifact 的一项关键能力它把公开的第三方软件源如 npmjs.com、Maven Central、PyPI以只读上游的方式关联到你的 CodeArtifact 仓库。关联之后当包管理器客户端请求一个包时如果本地仓库没有该包版本CodeArtifact 会代表客户端从对应的公有源拉取并将拉取到的包版本缓存到仓库中此后同一版本再次被请求时即可直接从缓存命中从而获得更快的拉取速度与更可控的依赖供应链。从实现层面看associate-external-connection对应的 REST 接口是PUT /v1/repository/external-connection这一信息可以在 service-2.json 的AssociateExternalConnection操作定义中确认该操作通过向仓库追加一个external-connection查询参数来完成关联。命令语法与参数详解在 AWS CLI 中associate-external-connection是aws codeartifact服务下的子命令其请求模型定义于 AssociateExternalConnectionRequest共包含 4 个参数参数必填说明--domain是包含该仓库的 CodeArtifact 域名Domain名称--domain-owner否拥有该域名的 AWS 账号的 12 位账号 ID不带短横线或空格默认使用当前凭据所属账号--repository是要添加外部连接的仓库名称--external-connection是要关联的外部连接名称详见下文支持的外部连接从服务端模型可以看到这 4 个参数都通过查询字符串querystring传递domain-owner的查询参数名为domain-ownerexternal-connection的查询参数名为external-connection与命令行选项一一对应。需要特别注意的是domain、repository、externalConnection三个成员在模型中都被标记为required因此三者缺一不可。--domain-owner的默认行为当不显式传入时AWS CLI 默认以当前 IAM 凭据所对应的账号作为域的所有者。只有当域由其他账号拥有、而你以跨账号身份操作时才需要显式指定这与登录脚本 login.py 中对--domain-owner参数用于指定拥有域名的 AWS 账号 ID的描述一致。支持的外部连接External Connection清单--external-connection参数接受的服务端定义值可在 service-2.json 的AssociateExternalConnectionRequest.externalConnection文档中找到共包含 10 个可用的公有源外部连接名称对应公有源包格式public:npmjsnpm 公共仓库npmjs.comnpmpublic:nuget-orgNuGet Gallerynugetpublic:pypiPython Package IndexPyPIpypipublic:maven-centralMaven Centralmavenpublic:maven-googleandroidGoogle Android 仓库mavenpublic:maven-gradlepluginsGradle 插件仓库mavenpublic:maven-commonswareCommonsWare Android 仓库mavenpublic:maven-clojarsClojars 仓库mavenpublic:ruby-gems-orgRubyGems.orgrubypublic:crates-ioCrates.iocargo从类型约束看ExternalConnectionName字符串类型的长度范围是 2100 个字符允许的字符模式为[A-Za-z0-9][A-Za-z0-9._\-:]{1,99}即首字符为字母或数字后续可包含点、下划线、短横线与冒号——public:xxx这一命名中的冒号正是该模式的合法组成部分见 service-2.json。每个仓库在同一时刻只能关联一个给定格式的外部连接。例如Maven 相关的公有源有多个Maven Central、Google Android、Gradle plugins 等你只能为 Maven 格式选择其中一个进行关联同理npm、PyPI、NuGet、RubyGems、Crates.io 各对应一个可选项。这一限制意味着在添加新的外部连接之前如果该包格式已有连接需要先执行disassociate-external-connection移除旧连接。核心示例为仓库关联 npmjs.com以下是 associate-external-connection.rst 中的原始示例它把public:npmjs外部连接添加到名为test-repo的仓库该仓库位于域test-domain中aws codeartifact associate-external-connection \ --repository test-repo \ --domain test-domain \ --external-connection public:npmjs执行成功后命令返回仓库的最新描述信息AssociateExternalConnectionResult只包含repository一个成员即处理请求之后的仓库详情{ repository: { name: test-repo, administratorAccount: 111122223333, domainName: test-domain, domainOwner: 111122223333, arn: arn:aws:codeartifact:us-west-2:111122223333:repository/test-domain/test-repo, upstreams: [], externalConnections: [ { externalConnectionName: public:npmjs, packageFormat: npm, status: AVAILABLE } ] } }对输出字段的解读如下name/domainName/domainOwner仓库名称、所在域名、域所有者账号与命令参数一一对应administratorAccount拥有该仓库的管理员 AWS 账号12 位数字arn仓库的 Amazon Resource Name格式为arn:aws:codeartifact:region:account-id:repository/domain/repositoryupstreams上游仓库列表此处为空数组表示该仓库没有配置上游仓库upstream repositoriesexternalConnections外部连接数组关联成功后包含一条记录externalConnectionName外部连接名称即public:npmjspackageFormat该连接对应的包格式此处为npm。合法的包格式包括npm、pypi、maven、nuget、generic、ruby、swift、cargo见 service-2.jsonstatus连接状态唯一的合法取值为AVAILABLE服务端模型ExternalConnectionStatus的枚举仅包含Available见 service-2.json。验证与反向操作查看与移除外部连接关联完成后可以通过其他 CodeArtifact 命令验证或管理外部连接aws codeartifact describe-repository --domain test-domain --repository test-repo查看仓库详情externalConnections字段会列出当前已关联的外部连接aws codeartifact list-repositories列出账号下的仓库其摘要同样会携带外部连接信息。如需移除某个外部连接使用 disassociate-external-connection.rst 中演示的disassociate-external-connection命令语法与关联命令对称aws codeartifact disassociate-external-connection \ --repository test-repo \ --domain test-domain \ --external-connection public:npmjs移除成功后的输出中externalConnections字段会变为空数组{ repository: { name: test-repo, administratorAccount: 111122223333, domainName: test-domain, domainOwner: 111122223333, arn: arn:aws:codeartifact:us-west-2:111122223333:repository/test-domain/test-repo, upstreams: [], externalConnections: [] } }在 service-2.json 附近可以找到DisassociateExternalConnection操作的定义它同样作用于/v1/repository/external-connection端点通过 HTTP DELETE 方法移除查询参数指定的外部连接。关联与移除两个操作共用同一组参数模型因此--domain、--repository、--external-connection的使用方式完全一致。外部连接与上游仓库Upstream的配合使用外部连接与上游仓库是 CodeArtifact 两种不同的依赖来源机制理解它们的区别有助于正确规划仓库拓扑上游仓库Upstream Repository指向另一个 CodeArtifact 仓库。当客户端请求的包在当前仓库中不存在时CodeArtifact 会按优先级顺序从上游仓库中查找。上游关系让多个仓库可以合并内容视图且每个仓库可以配置多个上游并指定优先级顺序见 service-2.json 中upstreams字段的说明。外部连接External Connection指向仓库外部的公有源。外部连接相当于把整个公有源作为该仓库的远程上游且每个包格式在同一仓库中只能存在一个外部连接。一个常见的生产实践是仓库 A 关联public:maven-central作为外部连接仓库 B 将仓库 A 设为上游。这样 B 既能消费 A 中的私有包也能间接获取 A 通过外部连接缓存的公共包。在示例输出中upstreams: []表示test-repo尚未配置上游仓库因此当前只有外部连接一个外部包来源。关联外部连接后从包管理器客户端视角看CodeArtifact 会生成对应格式的仓库端点。配合aws codeartifact login命令其实现位于 login.py可以让 npm、pip、twine、nuget、dotnet、swift 等客户端工具自动配置为使用该仓库——登录令牌的有效期最长 12 小时到期后需重新登录。例如为上述关联了public:npmjs的test-repo配置 npm 客户端aws codeartifact login --tool npm --domain test-domain --repository test-repo此后执行npm install package时npm 会先向 CodeArtifact 仓库端点请求若仓库内没有该包CodeArtifact 便会经由public:npmjs外部连接从 npmjs.com 拉取并缓存。前置条件与使用限制在使用associate-external-connection之前需要满足以下条件已安装并配置 AWS CLI本仓库即 AWS CLI 的完整源码实现入口位于 awscli/main.py安装后确保aws --version可用并已通过aws configure配置了具有 CodeArtifact 操作权限的 IAM 凭证与默认区域。已有 CodeArtifact 域和仓库仓库可通过aws codeartifact create-repository --domain domain --repository repo创建创建时仓库的externalConnections为空数组见 create-repository.rst 中的示例输出。权限要求调用者需要具备codeartifact:AssociateExternalConnectionIAM 权限对目标域和仓库否则请求会被拒绝。需要注意的限制以当前仓库中 service-2.json 的模型为准--external-connection与--repository、--domain均为必填参数缺少任一参数都会导致参数校验失败每个包格式在同一仓库中只能关联一个外部连接如需更换需先disassociate-external-connection再重新关联ExternalConnectionName的合法长度范围为 2100 个字符超出或不符合字符模式的值会被拒绝。小结通过aws codeartifact associate-external-connection你可以用一条命令为 CodeArtifact 仓库接入 npmjs、Maven Central、PyPI、NuGet Gallery、RubyGems.org、Crates.io 等 10 个主流公有软件源使私有制品仓库获得按需拉取并缓存公共包的能力。本文基于 associate-external-connection.rst 展开并结合 service-2.json 中的服务模型逐字段解读了命令参数与返回结构同时介绍了与之配套的disassociate-external-connection移除操作与aws codeartifact login客户端配置流程。无论是搭建统一的依赖缓存层还是构建可控的软件供应链掌握外部连接的管理都是 CodeArtifact 使用中的关键一环。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表