ARTICLE DETAIL

资讯详情

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

使用 AWS CLI 的 cloudformation describe-type 查询 CloudFormation Registry 扩展类型信息

使用 AWS CLI 的 cloudformation describe-type 查询 CloudFormation Registry 扩展类型信息 使用 AWS CLI 的 cloudformation describe-type 查询 CloudFormation Registry 扩展类型信息【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读aws cloudformation describe-type是 AWS CLI 中用于查询 CloudFormation Registry注册表扩展类型详情的核心命令它可以返回资源类型Resource、模块Module与钩子Hook三类扩展在指定账号与区域内的注册信息、版本状态、Schema 与配置数据。本文以 describe-type.rst 中的实战示例为主线结合 AWS CLI 内置的 CloudFormation 服务模型service-2.json逐字段解读命令参数与返回结果帮助读者掌握如何查询私有扩展、定位版本与 ARN、判断类型是否可用并在此基础上理解 Registry 相关命令如describe-type-registration的完整使用流程。一、命令背景CloudFormation Registry 与 describe-typeCloudFormation Registry 是 CloudFormation 的扩展中心允许用户把自定义资源提供程序resource provider、模块module和钩子hook以类型type的形式注册到自己的账号中并在模板中像使用 AWS 原生资源一样引用它们。DescribeType操作的作用是返回当前账号与区域中 CloudFormation Registry 中某个扩展的详细信息。在 AWS CLI 中对应cloudformation describe-type子命令。根据服务模型的定义service-2.json#L602-L619该操作存在两个约束值得注意若指定了VersionId返回该特定扩展版本的信息否则返回默认扩展版本的信息该操作被标记为idempotent幂等多次重复调用不会产生副作用适合在脚本中反复查询。二、基础用法按类型名称查询扩展信息原文档给出了最典型的调用方式——同时指定--type-name与--type来定位一个私有注册的资源类型aws cloudformation describe-type \ --type-name My::Logs::LogGroup \ --type RESOURCE这里有两个关键参数--type-name扩展的名称。根据 TypeName 的约束定义其长度必须为 10204 个字符且遵循三段式命名规范[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}模块类型允许附加::MODULE后缀例如文档示例中的My::Logs::LogGroup即组织名::服务名::资源名的标准格式--type扩展的类别。该参数取值由 RegistryType 枚举 限定共三种RESOURCE资源类型如自定义资源提供程序MODULE模块可复用的模板片段打包HOOK钩子在资源操作前后执行治理逻辑的扩展。2.1 参数组合的等价性与条件约束describe-type的输入参数不止上面两个。根据 DescribeTypeInput 模型完整参数如下参数说明--type扩展类别RESOURCE / MODULE / HOOK条件参数--type-name扩展名称条件参数--arn扩展的 ARN条件参数--version-id指定扩展版本的 ID即注册时分配的版本 ARN 末尾的值不指定则返回默认版本信息--publisher-id扩展发布者的 IDAWS 官方提供的扩展不分配 publisher ID--public-version-number公共第三方扩展的版本号如1.0.0服务模型对参数组合有明确的二选一约束Conditional必须指定TypeNameType或直接指定Arn。也就是说下面两种调用是等价的定位方式# 方式一类型名称 类型类别 aws cloudformation describe-type \ --type-name My::Logs::LogGroup \ --type RESOURCE # 方式二直接使用类型 ARN aws cloudformation describe-type \ --arn arn:aws:cloudformation:us-west-2:123456789012:type/resource/My-Logs-LogGroup/00000001--version-id与--public-version-number则可进一步把查询范围缩小到某个具体版本用于对比不同版本之间 Schema、DeprecatedStatus等字段的差异。三、逐字段解读返回结果执行上述命令后CloudFormation 会返回如下 JSON摘自 describe-type.rst{ SourceUrl: https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git, Description: Customized resource derived from AWS::Logs::LogGroup, TimeCreated: 2019-12-03T23:29:33.321Z, Visibility: PRIVATE, TypeName: My::Logs::LogGroup, LastUpdated: 2019-12-03T23:29:33.321Z, DeprecatedStatus: LIVE, ProvisioningType: FULLY_MUTABLE, Type: RESOURCE, Arn: arn:aws:cloudformation:us-west-2:123456789012:type/resource/My-Logs-LogGroup/00000001, Schema: [details omitted] }对照 DescribeTypeOutput 模型这个输出中每个字段的业务含义如下字段含义Arn该扩展或版本的 ARN格式为arn:aws:cloudformation:region:account:type/category/Name/versionType扩展类别RESOURCE / MODULE / HOOKTypeName扩展名称若为使用别名激活的公共第三方类型则返回别名Description扩展的描述信息Schema定义该扩展的 JSON Schema如资源类型的属性定义ProvisioningType资源类型的预置行为见下节详解DeprecatedStatus废弃状态LIVE表示可用DEPRECATED表示已停用Visibility可见范围PRIVATE仅在注册账号内可见可用PUBLIC对所有账号可见SourceUrl扩展源代码仓库地址DocumentationUrl扩展详细文档页面地址TimeCreated该私有扩展版本注册/激活时间LastUpdated最近一次注册更新时间示例输出中的Schema字段被 CloudFormation 省略为[details omitted]这符合 Schema 体积较大的实际情况如需完整 Schema可在命令行中加入--output json配合jq提取或按需直接读取该字段本仓库示例为展示可读性做了省略。3.1 ProvisioningType理解资源类型的预置行为ProvisioningType是判断资源类型能否正常创建/更新/删除的关键字段取值由 ProvisioningType 枚举 限定共三档FULLY_MUTABLE类型包含 update handler可在堆栈更新时直接修改资源示例中的My::Logs::LogGroup即属此类IMMUTABLE类型不包含 update handler更新时必须替换删除重建而非就地修改NON_PROVISIONABLE类型缺少 create / read / delete 三类 handler 中的某些部分无法真正被预置仅能作为抽象引用。该值由 CloudFormation 在注册时根据提交的 handler 包自动判定用户无法手工指定describe-type的作用之一就是让使用者确认这个类型到底能不能被我的模板真正创建出来。3.2 公共扩展专属字段与版本控制对于公共第三方扩展PUBLICdescribe-type还会返回一组补充字段PublisherId扩展发布者 ID仅公共第三方扩展有值AWS 官方与私有扩展返回nullPublicVersionNumber公共扩展的语义化版本号如1.0.0正则约束见 service-2.json#L5978-L5982LatestPublicVersion当前可用的最新公共版本IsActivated该扩展是否已在本账号与区域激活AutoUpdate是否在发布者发布新次要版本时自动更新主版本必须手动更新OriginalTypeName/OriginalTypeArn若使用了类型名别名激活公共扩展返回原始类型名称与 ARN。3.3 私有扩展专属字段配置、执行角色与契约测试私有注册扩展会额外返回DefaultVersionId默认版本 ID未指定版本时使用可用SetTypeDefaultVersion修改默认版本IsDefaultVersion当前查询的版本是否为默认版本TypeTestsStatus/TypeTestsStatusDescription契约测试状态取值为PASSED全部通过可发布、FAILED存在失败用例、IN_PROGRESS测试进行中、NOT_TESTED未测试。只有PASSED状态才允许发布公共扩展ExecutionRoleArn注册时使用的 IAM 执行角色 ARNCloudFormation 在调用扩展 API 时扮演该角色LoggingConfig私有扩展的日志配置ConfigurationSchema本账号本区域中该扩展的当前配置数据JSON 字符串可用SetTypeConfiguration修改。四、与其他 Registry 命令配合完整的类型管理流程describe-type通常不单独出现而是与注册、状态查询、发布等命令组成一个闭环。仓库中提供了配套示例 describe-type-registration.rst对应的典型流程为注册使用aws cloudformation register-type提交扩展获得RegistrationToken查询注册进度使用aws cloudformation describe-type-registration --registration-token token轮询注册状态COMPLETE后返回类型 ARN 与版本 ARN。服务模型中明确说明service-2.json#L620-L636注册完成后应改用describe-type获取扩展的详细信息查询详情使用本文讲解的aws cloudformation describe-type检查ProvisioningType、DeprecatedStatus、TypeTestsStatus等状态发布/设置默认版本按需使用publish-type、set-type-default-version完成版本管理。这一闭环中describe-type扮演的是最终确认角色——注册是否成功、默认版本是否正确、类型是否可被模板使用都可以通过它一次性确认。五、常见错误与排障思路根据 DescribeType 的 errors 定义该命令可能抛出两种异常TypeNotFoundException指定的类型不存在。可能原因包括--type-name拼写错误、类型不在当前账号与区域注册或未激活、ARN 写错、--type类别与实际注册类别不符例如把 MODULE 写成了 RESOURCECFNRegistryExceptionRegistry 层面的通用错误通常是权限不足或参数组合非法。实际使用中的高频错误是参数组合不满足条件约束——既没有提供TypeNameType也没有提供Arn。排障时可先通过aws cloudformation list-types确认类型确实存在再核对名称格式三段式命名、类别与区域是否匹配。六、实践要点小结describe-type支持按TypeNameType或Arn两种方式定位扩展Type仅支持RESOURCE/MODULE/HOOK三种取值不带--version-id时返回默认版本信息需要审计历史版本时务必显式指定版本用ProvisioningType判断资源是否可创建/更新/替换用DeprecatedStatus判断是否已被废弃用TypeTestsStatus判断私有扩展是否具备发布资格该操作幂等、只读可在 CI 或运维脚本中安全地反复调用用于校验扩展状态想深入理解命令的完整参数与返回结构可直接查阅仓库内置服务模型 service-2.json 中DescribeType、DescribeTypeInput、DescribeTypeOutput三处定义以及示例文件 describe-type.rst 与 describe-type-registration.rst。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表