ARTICLE DETAIL

资讯详情

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

aws-cli 创建 CodeArtifact Domain 完全指南:create-domain 命令详解与源码级原理

aws-cli 创建 CodeArtifact Domain 完全指南:create-domain 命令详解与源码级原理 aws-cli 创建 CodeArtifact Domain 完全指南create-domain 命令详解与源码级原理【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读本文围绕 aws-cli 仓库中awscli/examples/codeartifact/create-domain.rst这一官方示例文档展开系统讲解aws codeartifact create-domain命令的完整用法从最基本的创建命令、返回 JSON 字段解读到--domain、--encryption-key、--tags三个核心参数的技术细节与约束再结合仓库内 CodeArtifact 服务模型service-2.json与登录定制实现login.py深入剖析其底层原理。读完本文你将掌握在 AWS 账户中创建 CodeArtifact 领域Domain、解读返回状态、规避常见错误并理解领域与仓库Repository、KMS 加密键之间的层级关系从而搭建出可用的软件包托管环境。一句话理解什么是 CodeArtifact DomainCodeArtifact 的**领域Domain**是承载软件包仓库Repository的顶层容器。根据仓库内awscli/botocore/data/codeartifact/2018-09-22/service-2.json中CreateDomain操作的官方文档描述领域存在的核心价值在于帮助组织在多个团队、多个 AWS 账户之间统一管理大量仓库可以在领域级别为不同账户拥有的多个仓库统一应用权限策略同一资产asset在领域中只存储一次即使它同时存在于多个仓库中例如同一个 npm 包被多个仓库引用物理存储只有一份。AWS 官方建议生产环境中只保留一个包含全部已发布制品的领域便于开发团队查找和共享软件包另设一个预生产领域用于验证对生产领域配置的变更。你可以在一个账户中创建多个领域但从治理与成本角度一个生产领域 一个预生产领域是推荐形态。基本用法创建第一个 Domain这是create-domain.rst中给出的最核心示例——创建一个名为test-domain的领域aws codeartifact create-domain \ --domain test-domain命令执行成功后返回如下 JSON{ domain: { name: test-domain, owner: 111122223333, arn: arn:aws:codeartifact:us-west-2:111122223333:domain/test-domain, status: Active, createdTime: 2020-10-20T13:16:48.559000-04:00, encryptionKey: arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111, repositoryCount: 0, assetSizeBytes: 0 } }从返回结构可以看到新建的领域status为Active表示领域已可用repositoryCount为0因为此时领域中还没有任何仓库assetSizeBytes为0领域内尚未存储任何制品。领域创建后是空的需要继续创建仓库才能发布和拉取软件包详见下文从领域到仓库一节。三个核心参数详解对照服务模型CreateDomainRequest的定义见service-2.json的shapes.CreateDomainRequestcreate-domain共支持三个参数其中仅--domain为必填。1.--domain必填领域名称约束项取值最短长度2 个字符最大长度50 个字符正则约束[a-z][a-z0-9\-]{0,48}[a-z0-9]唯一性同一 AWS 账户、同一区域内必须唯一从shapes.DomainName的正则可以看出必须以小写字母开头以字母或数字结尾中间只能包含小写字母、数字和连字符-不能以下划线、大写字母或点开头名称会被用作 DNS 主机名的前缀因此不要在领域名中放置敏感信息——它属于公开可发现的字符串。例如合法的名称my-domain、prod-artifacts、testdomain。2.--encryption-key可选KMS 加密键该参数指定用于加密领域内内容的 KMS 密钥取值为shapes.Arn长度 11011正则\S。可接受以下任一形式KMS 键 IDKMS 键 ARN键别名alias键别名 ARN。需要特别注意的约束必须使用对称 CMK官方明确强调不要为领域关联非对称 CMK指定--encryption-key时当前 IAM 角色必须对该密钥拥有kms:DescribeKey和kms:CreateGrant两项权限否则会因权限不足而失败。如果省略该参数CodeArtifact 会为领域自动创建并关联一个 AWS 托管的 KMS 键通常形如arn:aws:kms:region:account:key/...这从示例输出中返回的encryptionKey字段即可看到。3.--tags可选资源标签通过--tags可以为领域打上键值对标签用于管理、搜索和过滤 CodeArtifact 资源。服务模型对标签的约束为字段约束标签数量0200 个TagList的 min/max标签键TagKey1128 字符正则\P{C}不可含控制字符标签值TagValue0256 字符可为空串正则\P{C}*命令行写法示例aws codeartifact create-domain \ --domain test-domain \ --encryption-key arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --tags Keyteam,Valueplatform Keyenv,Valuedev返回字段逐个拆解CreateDomain的返回体是shapes.CreateDomainResult其中嵌套了shapes.DomainDescription结构字段含义如下字段类型说明namestring领域名称ownerstring拥有该领域的 AWS 账户 IDarnstring领域的 Amazon 资源名称ARNstatusstring领域当前状态枚举值为Active活跃或Deleted已删除createdTimetimestamp领域创建时间戳encryptionKeystring与领域关联的 KMS 键 ARNrepositoryCountinteger领域内的仓库数量assetSizeByteslong领域内所有资产的总大小字节s3BucketArnstring用于存储领域内软件包资产的 S3 存储桶 ARN其中s3BucketArn在示例输出中未展示但属于服务模型确认的返回字段——CodeArtifact 使用账户内的 S3 桶承载领域资产assetSizeBytes正是衡量该桶中数据量的指标。这两个字段是后续监控领域存储成本、规划容量的重要依据。常见错误与排查CreateDomain操作在service-2.json中声明了以下 7 类错误创建失败时按如下思路排查异常典型触发场景AccessDeniedExceptionIAM 凭据缺少codeartifact:CreateDomain权限或指定encryptionKey时缺少kms:DescribeKey/kms:CreateGrant权限ConflictException同名领域已存在于当前账户与区域名称冲突或领域处于删除中的过渡状态InternalServerExceptionCodeArtifact 服务端内部错误可稍后重试ResourceNotFoundException指定的 KMS 加密键不存在或不可访问ServiceQuotaExceededException账户已达到领域的数量上限配额需在配额中心申请提升ThrottlingException请求过于频繁被限流按指数退避重试ValidationException参数非法最常见的是领域名不符合[a-z][a-z0-9\-]{0,48}[a-z0-9]正则、长度越界或使用了非对称 CMK出现失败时可先通过aws codeartifact list-domains确认当前账户下已存在的领域避免重复创建。从领域到仓库完整的落地工作流创建领域只是第一步。参照仓库内同一目录下的配套示例完整的 CodeArtifact 落地流程是1. 创建领域aws codeartifact create-domain --domain test-domain2. 在领域内创建仓库参见awscli/examples/codeartifact/create-repository.rst的示例——仓库必须归属某个领域通过--domain指定必要时用--domain-owner指定拥有该领域的账户 ID跨账户场景aws codeartifact create-repository \ --domain test-domain \ --domain-owner 111122223333 \ --repository test-repo \ --description This is a test repository.返回的repository对象中domainName为test-domain、arn形如arn:aws:codeartifact:us-west-2:111122223333:repository/test-domain/test-repo清晰体现了领域 → 仓库的两级层级。3. 查看领域与仓库列表用awscli/examples/codeartifact/list-domains.rst中的命令确认创建结果aws codeartifact list-domains输出会列出当前账户拥有的所有领域摘要名称、所有者、状态、加密键其中status字段与create-domain返回的枚举一致可用于判断领域是否处于Active可用状态。4. 获取授权令牌并接入包管理工具领域、仓库就绪后配合仓库内的awscli/examples/codeartifact/login.rst示例可将 npm、pip、twine、nuget、dotnet、swift 等工具一键接入仓库。此处领域名同样通过--domain传入aws codeartifact login --tool npm --domain test-domain --repository test-repo源码级原理从 CLI 参数到 HTTP 请求服务模型的映射在awscli/botocore/data/codeartifact/2018-09-22/service-2.json中CreateDomain操作的 HTTP 定义为方法POST请求 URI/v1/domain其中--domain参数在CreateDomainRequest中被标记为location: querystring、locationName: domain即最终以查询字符串?domaintest-domain的形式附加在 POST 请求 URL 上而encryptionKey与tags则走请求体。create-domain是 aws-cli 对该 REST API 的薄封装所有参数校验名称正则、标签数量、KMS 键形式均由底层 botocore 服务模型在发送前完成序列化校验。权限模型与登录定制的关联领域是 CodeArtifact 权限体系的第一级作用域。在awscli/customizations/codeartifact/login.py的CodeArtifactLogin定制命令中get_authorization_token方法向GetAuthorizationToken发起调用时仅以domain以及可选的domainOwner为参数即可换取最长 12 小时有效的授权令牌——领域名是签发令牌的唯一凭证维度。这印证了领域即权限边界的设计令牌、权限策略、包管理工具接入都以领域为锚点仓库则在该边界内进一步细分。同时login.py的TOOL_MAP展示了 6 种包格式swift/nuget/dotnet/npm/pip/twine各自的接入适配类其登录逻辑会分别写入.npmrc、.pypirc、NuGet.Config或~/.netrc等配置文件而这一切的前提正是领域与仓库已通过create-domain、create-repository创建完毕。运维要点小结名称即 DNS 前缀领域名会暴露在主机名中命名时避开敏感信息且注意全小写 连字符的格式约束加密键一经指定不可轻改领域与 KMS 键强绑定生产领域建议显式使用自有对称 CMK确保 IAM 具备kms:DescribeKey与kms:CreateGrant便于集中审计与密钥轮换配额提前规划领域数量受账户配额限制多团队场景遵循单一生产领域建议避免为每个团队各建一个领域导致配额与成本失控用list-domains校验状态status为Active才可正常创建仓库与签发令牌创建后建议立即校验。相关仓库参考create-domain.rst、create-repository.rst、list-domains.rst、服务模型 service-2.json、登录定制 login.py。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表