AWS CLI 实战:使用 `codeartifact describe-repository` 查询 CodeArtifact 仓库详情
2026/9/15 15:03:02 网站建设 项目流程

AWS CLI 实战:使用codeartifact describe-repository查询 CodeArtifact 仓库详情

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

本指南以 AWS CLI 官方示例 describe-repository.rst 为蓝本,系统讲解aws codeartifact describe-repository命令的用法:如何传入--domain--repository参数查询仓库信息、如何解读返回的RepositoryDescription对象中每个字段的含义,并结合本仓库内的服务模型(service-2.json)与相关示例(如 create-repository.rst、list-repositories.rst)深入剖析其底层实现。读完本文,你将掌握查询 CodeArtifact 仓库配置(上游仓库、外部连接、ARN、域归属等)的完整实操方法与诊断思路。

命令概览:一条命令拿到仓库全貌

aws codeartifact describe-repository是 AWS CLI 中 CodeArtifact 服务的查询类命令,其作用是从 CodeArtifact 服务端获取指定仓库的完整描述信息(RepositoryDescription)。该命令只读、不产生任何变更,适合在以下场景使用:

  • 部署前核对仓库是否已创建、归属哪个域、属于哪个 AWS 账户;
  • 排查仓库为何拉不到某个上游包——检查upstreamsexternalConnections配置;
  • 获取仓库 ARN 以在 IAM 策略、资源标签或自动化脚本中引用;
  • create-repositoryupdate-repository的输出对比,验证配置是否生效。

其最小调用形式如下(取自仓库示例文档 describe-repository.rst):

aws codeartifact describe-repository \ --domain test-domain \ --repository test-repo

命令执行后返回一个 JSON 对象,其中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", "description": "This is a test repository.", "upstreams": [], "externalConnections": [] } }

提示:默认输出格式为 JSON。若只需 ARN 或某个字段,可结合--query--output text使用,例如aws codeartifact describe-repository --domain test-domain --repository test-repo --query 'repository.arn' --output text

参数详解:必填与可选参数

从服务模型中DescribeRepositoryRequest的定义(service-2.json)可以看出,该接口接受三个参数,其中两个为必填:

参数类型必填说明
--domainString包含目标仓库的 CodeArtifact 域的名称。域名称有严格的格式约束(见下文)。
--repositoryString要查询的仓库名称。
--domain-ownerString拥有该域的 AWS 账户的 12 位账户 ID(不含短横线或空格)。默认情况下 AWS CLI 会使用当前凭据所属的账户,仅在查询其他账户共享给你的域时才有必要显式指定。

这三个参数在 HTTP 层面均通过 URL query string 传递(请求方法为GET /v1/repository),也就是说describe-repository是一次无请求体的只读 GET 调用,天然安全、可幂等重试。

名称约束:提前规避 400 错误

仓库中的名称不是任意字符串,服务模型给出了明确的格式校验:

  • 域名称(DomainName:长度 2~50 个字符,必须匹配正则[a-z][a-z0-9\-]{0,48}[a-z0-9](service-2.json),即小写字母开头、以小写字母或数字结尾,中间可含小写字母、数字与连字符。
  • 账户 ID(AccountId:固定 12 位数字,正则[0-9]{12}(service-2.json)。
  • 仓库名称(RepositoryName:长度 2~100 个字符,匹配[A-Za-z0-9][A-Za-z0-9._\-]{1,99}(service-2.json),字母、数字、点、下划线和连字符均可使用。

若传入的名称不合规或仓库不存在,服务端会返回ValidationExceptionResourceNotFoundException,CLI 会将这些异常以错误消息的形式输出。查询前先通过aws codeartifact list-repositoriesaws codeartifact list-repositories-in-domain(示例见 list-repositories.rst)确认名称拼写,可减少无效调用。

返回值逐字段解读:RepositoryDescription

接口的返回结构DescribeRepositoryResult只包含一个repository成员,其类型为RepositoryDescription(service-2.json)。下表对照示例输出逐字段解释:

字段类型含义
nameString仓库名称,与查询参数一致。
administratorAccountString管理该仓库的 AWS 账户的 12 位账户 ID。
domainNameString仓库所属 CodeArtifact 域的名称。
domainOwnerString拥有该域的 AWS 账户的 12 位账户 ID(不含短横线与空格)。
arnString仓库的 Amazon Resource Name(ARN),格式为arn:aws:codeartifact:<region>:<account-id>:repository/<domain>/<repository>,可用于 IAM 策略与资源级授权。
descriptionString仓库的文本描述(最长 1000 个字符,见Description类型定义,service-2.json)。
upstreamsList与仓库关联的上游仓库列表。列表中各上游仓库的顺序即优先级顺序——CodeArtifact 按此顺序查找请求的包版本(官方文档称之为 "Working with upstream repositories")。
externalConnectionsList与仓库关联的外部连接数组(如公共 npm、PyPI、Maven 仓库的连接)。
createdTimeTimestamp仓库创建时间(示例输出中未展示,但服务模型已定义该字段)。

在示例输出中upstreamsexternalConnections均为空数组[],表示这是一个尚未配置上游/外部连接的独立仓库——这与 create-repository.rst 中创建仓库时的初始状态完全一致(该示例创建的test-repo同样返回"upstreams": []"externalConnections": [])。

上游仓库与外部连接:两个关键字段的诊断价值

  • upstreams(上游仓库):每个成员包含上游仓库的名称等信息。当仓库配置了上游后,包管理客户端(npm、pip、Maven、NuGet 等)在本地仓库找不到包时,会按upstreams列表中的顺序向上游继续查找。若你发现拉包行为异常(如拉到旧版本),应通过describe-repository核对upstreams的排列顺序。
  • externalConnections(外部连接):每个成员形如RepositoryExternalConnectionInfo(service-2.json),包含externalConnectionNamepackageFormatstatus三个字段。packageFormat取值包括npmpypimavennugetgenericrubyswiftcargo等;status目前唯一的合法值是Available

新增上游或外部连接分别对应aws codeartifact update-repositoryassociate-external-connection命令(示例见 associate-external-connection.rst),而查询其当前状态的最佳手段正是describe-repository

典型实战场景

场景一:创建后立即验证仓库配置

配合 create-repository.rst 中的创建命令:

aws codeartifact create-repository \ --domain test-domain \ --domain-owner 111122223333 \ --repository test-repo \ --description "This is a test repository."

执行成功后,运行describe-repository即可确认描述、ARN、归属账户均正确落库。两者的返回结构相同,便于直接比对。

场景二:跨账户查询共享域中的仓库

当仓库位于其他账户拥有的域中时,必须显式传入--domain-owner

aws codeartifact describe-repository \ --domain shared-domain \ --domain-owner 222233334444 \ --repository shared-repo

此时调用方需要具备对该域/仓库的读取权限(通常通过 CodeArtifact 的资源策略或 IAM 授权),否则会收到AccessDeniedException(HTTP 403,见DescribeRepository的错误列表,service-2.json)。

场景三:在脚本中解析仓库 ARN

在自动化脚本中提取仓库 ARN 用于后续 IAM 策略生成:

REPO_ARN=$(aws codeartifact describe-repository \ --domain test-domain \ --repository test-repo \ --query 'repository.arn' \ --output text) echo "$REPO_ARN" # 输出: arn:aws:codeartifact:us-west-2:111122223333:repository/test-domain/test-repo

场景四:排查拉包失败

pip installnpm install从 CodeArtifact 拉取包失败时,先用describe-repository检查upstreamsexternalConnections是否为空、顺序是否符合预期;再配合aws codeartifact get-repository-endpoint --format pypi --domain test-domain --repository test-repo核对仓库端点,以及aws codeartifact get-authorization-token --domain test-domain获取临时令牌(有效期为 12 小时,相关逻辑见 login.py 中的CodeArtifactLogin.DESCRIPTION),形成完整的排查链路。

源码视角:命令背后的实现路径

服务模型:一切参数与返回结构的权威定义

describe-repository的命令骨架并非硬编码,而是由 botocore 从服务模型 service-2.json 自动生成的。关键定义包括:

  • 操作定义(第 308-324 行):"DescribeRepository",HTTP 方法GET,请求路径/v1/repository,声明了五种错误类型:AccessDeniedExceptionInternalServerExceptionResourceNotFoundExceptionThrottlingExceptionValidationException
  • 请求结构(第 1716-1742 行):DescribeRepositoryRequest,必填domainrepository,可选domainOwner
  • 响应结构(第 1743-1751 行):DescribeRepositoryResult,单成员repository
  • 返回对象(第 3994-4035 行):RepositoryDescription的全部字段定义。

AWS CLI 的codeartifact命令会自动读取该模型生成参数解析、校验与输出序列化逻辑。仓库中的examples-1.json与各类.rst示例文件(describe-repository.rst 等)则负责为命令生成帮助文档与示例。

配套命令:login 定制化逻辑

除标准的模型驱动命令外,aws codeartifact login是仓库中唯一带定制化实现的 CodeArtifact 命令,其源码位于 login.py。虽然它与describe-repository的查询能力无关,但二者常在同一条使用链路中出现:login内部会调用get_authorization_tokenget_repository_endpoint来配置 npm/pip/NuGet 等工具(见 TOOL_MAP 中swiftnugetdotnetnpmpiptwine六种工具的映射),而describe-repository则用于确认仓库本身的配置状态。

测试与验证

在仓库的单元测试中,CodeArtifact 的模型驱动命令(包括describe-repository)由 botocore 的通用命令测试覆盖,验证了参数的序列化、错误映射与输出格式;login命令则有专门的定制测试,可参考tests/unit/customizations/codeartifact/目录下的测试用例(如test_login.py),其中对 token 过期时间计算(get_relative_expiration_time)、.npmrc/.pypirc写入等逻辑均有断言。这提示我们:凡是查询类命令,其参数与返回结构均以服务模型为准;凡是定制命令,其行为以customizations/下的源码为准。

常见错误与排查建议

报错现象可能原因排查动作
ResourceNotFoundException仓库不存在,或--domain/--repository拼写错误先执行aws codeartifact list-repositories核对名称
AccessDeniedException(HTTP 403)当前账户无权读取该仓库/域检查 IAM 策略与域的资源配置策略;跨账户查询时补传--domain-owner
ValidationException名称违反格式约束(如域名为大写开头)对照上文名称约束一节核对正则
ThrottlingException请求过于频繁适当退避重试

小结

aws codeartifact describe-repository是 CodeArtifact 运维与排障的基础命令:

  • 两个必填参数--domain--repository,跨账户场景追加--domain-owner
  • 返回的RepositoryDescription覆盖仓库名称、管理员账户、所属域、ARN、描述、上游仓库、外部连接与创建时间八个维度;
  • 上游仓库顺序即拉包优先级externalConnections反映公共仓库连接状态,二者是诊断拉包问题的第一手证据;
  • 命令实现由服务模型驱动,参数与返回结构的权威定义位于 service-2.json,可随时查阅。

配合本仓库中的其他示例(create-repository.rst、update-repository.rst、associate-external-connection.rst)即可完成从创建、配置到查询验证的完整闭环。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询