【免费下载链接】context-hub项目地址https://gitcode.com/gh_mirrors/co/context-hub点击查看免费下载本文基于 Context Hub 仓库中维护的aws/acmJavaScript 文档content/aws/docs/acm/javascript/DOC.md系统讲解如何在 Node.js 中用aws-sdk/client-acm完成 ACM 证书的申请、DNS 验证、轮询等待、分页列举、PEM 导入与清理等全生命周期操作。读完本文你可以直接在可信后端服务中落地一套可运行的证书管理代码并理解该文档在 Context Hub 中如何被检索、分发和消费。在 Context Hub 中获取本文对应文档Context Hub 为编码 Agent 提供按语言、按版本分发的 API 文档。本仓库中该文档位于多语言目录结构下符合 Content Guide 定义的多语言约定author/docs/entry-name/ javascript/ DOC.md # JavaScript 变体文件的 YAML frontmatter 声明了它的元数据name: acm、languages: javascript、versions: 3.1007.0、source: maintainer这些字段与 Content Guide 中 DOC.md frontmatter 的必填项name、description、metadata.languages、metadata.versions、metadata.revision、metadata.updated-on、metadata.source一一对应用于构建注册表和搜索索引。安装 CLI 后通过以下命令即可取回该文档npm install -g aisuite/chub chub search aws acm # 搜索得到条目 ID aws/acm chub get aws/acm --lang js # 拉取 JavaScript 变体从源码结构看chub get的解析链路是get.js 调用 registry.js 中的getEntry()按 ID 定位条目再用resolveDocPath(entry, lang, version)根据语言与recommendedVersion选出具体版本的path最后由resolveEntryFile()拼接出DOC.md的文件路径。frontmatter 的解析由 frontmatter.js 中的parseFrontmatter()完成——它会抛出带行列位置的FrontmatterParseError保证构建期能报出文件级准确的错误位置。安装与前置条件安装包npm install aws-sdk/client-acm如果应用代码中需要显式的 profile、SSO 或 assume-role 凭证提供者按需安装凭证辅助包npm install aws-sdk/credential-providersACM 是区域化Regional服务客户端必须创建在证书所在或即将创建的 AWS 区域。典型的本地环境配置export AWS_REGIONus-east-1 export AWS_PROFILEdev或使用直连凭证export AWS_REGIONus-east-1 export AWS_ACCESS_KEY_ID... export AWS_SECRET_ACCESS_KEY... export AWS_SESSION_TOKEN...在 Node.js 中如果凭证已经来自环境变量、共享 AWS 配置文件、ECS、EC2 实例元数据或 IAM Identity Center默认凭证链通常就够用。一个重要的安全前提ACM 管理操作应放在可信的后端或自动化代码中而不是不受信任的浏览器端。客户端配置最小 Node.js 客户端import { ACMClient } from aws-sdk/client-acm; const acm new ACMClient({ region: process.env.AWS_REGION ?? us-east-1, });显式指定 profile 的凭证import { ACMClient } from aws-sdk/client-acm; import { fromIni } from aws-sdk/credential-providers; const acm new ACMClient({ region: us-east-1, credentials: fromIni({ profile: dev }), });fromIni读取本地~/.aws/credentials/~/.aws/config中指定的 profile适合在 CI 或多人共用机器上避免依赖环境变量。核心调用模式client.send(new Command(input))AWS SDK v3 的客户端统一采用客户端 显式命令的调用方式每条 API 都是一个独立的 Command 类import { ACMClient, DescribeCertificateCommand, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); const response await acm.send( new DescribeCertificateCommand({ CertificateArn: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012, }), ); console.log(response.Certificate?.Status);新代码建议采用ACMClient加显式命令导入的组合命令按需导入便于打包器做 tree-shaking。常见工作流1. 申请公网证书并做 DNS 验证RequestCertificateCommand只返回证书 ARN不会返回 DNS 验证记录。需要再调用DescribeCertificateCommand从Certificate.DomainValidationOptions[].ResourceRecord中读出要发布的 DNS 记录import { ACMClient, DescribeCertificateCommand, RequestCertificateCommand, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); const request await acm.send( new RequestCertificateCommand({ DomainName: api.example.com, SubjectAlternativeNames: [www.example.com], ValidationMethod: DNS, IdempotencyToken: api-example-com, Tags: [{ Key: service, Value: edge-api }], }), ); const certificateArn request.CertificateArn; if (!certificateArn) { throw new Error(RequestCertificate did not return a certificate ARN); } const details await acm.send( new DescribeCertificateCommand({ CertificateArn: certificateArn, }), ); for (const option of details.Certificate?.DomainValidationOptions ?? []) { const record option.ResourceRecord; if (record) { console.log({ domain: option.DomainName, name: record.Name, type: record.Type, value: record.Value, }); } }要点说明ValidationMethod: DNS表示通过 DNS TXT 记录完成域名所有权验证若改用邮件验证ACM 还提供ResendValidationEmailCommand用于重试邮件验证流程。IdempotencyToken保证重复提交同一申请时的幂等性适合脚本化申请证书。每个 SANSubjectAlternativeNames中的域名都会产生一条独立的验证记录循环打印时可以逐条发布。2. 轮询等待验证完成SDK 内置的 ACM waiter 会轮询DescribeCertificate直到所有域名的验证状态都变为SUCCESS如果证书状态变成FAILEDwaiter 会抛错import { ACMClient, waitUntilCertificateValidated, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); await waitUntilCertificateValidated( { client: acm, maxWaitTime: 30 * 60 }, { CertificateArn: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012, }, );maxWaitTime单位为秒示例中设置为 30 分钟覆盖 DNS 记录生效与 ACM 完成验证所需的窗口。3. 用分页器列举证书ACM 暴露一个ListCertificates分页器。当证书数量超过单页返回上限时用paginateListCertificates逐页扫描import { ACMClient, paginateListCertificates, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); for await (const page of paginateListCertificates( { client: acm }, { CertificateStatuses: [ISSUED, PENDING_VALIDATION], }, )) { for (const cert of page.CertificateSummaryList ?? []) { console.log(cert.CertificateArn, cert.DomainName, cert.Status); } }CertificateStatuses允许只关注特定状态的证书如ISSUED、PENDING_VALIDATION减少无意义的翻页。4. 读取已签发证书的主体与证书链GetCertificateCommand返回证书 PEM 与证书链 PEM不返回私钥import { ACMClient, GetCertificateCommand, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); const response await acm.send( new GetCertificateCommand({ CertificateArn: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012, }), ); console.log(response.Certificate); console.log(response.CertificateChain);这两个字段可以直接拼进需要证书材料的配置例如配合 client-cloudfront 一类文档完成分发配置。5. 导入已有 PEM 证书当你已经持有证书 PEM 与私钥 PEM 时使用ImportCertificateCommand。在 Node.js 中readFileSync()返回Buffer可直接作为 ACM blob 输入import { readFileSync } from node:fs; import { ACMClient, ImportCertificateCommand, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); const response await acm.send( new ImportCertificateCommand({ Certificate: readFileSync(./tls/certificate.pem), PrivateKey: readFileSync(./tls/private-key.pem), CertificateChain: readFileSync(./tls/certificate-chain.pem), Tags: [{ Key: environment, Value: production }], }), ); console.log(response.CertificateArn);安全红线私钥只保留在可信基础设施上绝不能提交到源代码库。6. 打标签与移除标签import { ACMClient, AddTagsToCertificateCommand, RemoveTagsFromCertificateCommand, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); const certificateArn arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012; await acm.send( new AddTagsToCertificateCommand({ CertificateArn: certificateArn, Tags: [ { Key: service, Value: payments }, { Key: owner, Value: platform }, ], }), ); await acm.send( new RemoveTagsFromCertificateCommand({ CertificateArn: certificateArn, Tags: [{ Key: owner }], }), );标签对成本分摊和批量运维例如按owner标签找出某团队的证书很有用建议在申请证书时RequestCertificateCommand的Tags就打好标签。7. 删除不再使用的证书import { ACMClient, DeleteCertificateCommand, } from aws-sdk/client-acm; const acm new ACMClient({ region: us-east-1 }); await acm.send( new DeleteCertificateCommand({ CertificateArn: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012, }), );如果 AWS 报告证书仍在使用中先把它从依赖服务ALB、CloudFront 等上解绑再重试删除。常见陷阱Common Pitfalls以下是原文档总结的高频踩坑点排查问题时优先对照RequestCertificateCommand的响应中不包含DNS 验证记录。必须调用DescribeCertificateCommand并读取Certificate.DomainValidationOptions[].ResourceRecord。ACM 是区域化的在错误的区域执行列举或描述找不到你期望的 ARN。GetCertificateCommand返回证书主体和证书链不返回私钥。ImportCertificateCommand要求证书 PEM 字节和私钥字节。在 Node.js 中传入Buffer值例如readFileSync()的结果。DeleteCertificateCommand在证书仍被其他服务引用时会失败ResourceInUseException。如果使用ExportCertificateCommandPassphrase需要按字节传递且只对开启了导出的证书生效。配套 SDK 包围绕证书申请后的自动化常用的相关包包括aws-sdk/credential-providers显式 profile、SSO、Cognito 与 assume-role 凭证流程。aws-sdk/client-route-53如果你用 Route 53 管理 DNS可自动创建 DNS 验证记录。aws-sdk/client-elastic-load-balancing-v2把 ACM 证书挂到 ALB / NLB 监听器。aws-sdk/client-cloudfront在 CloudFront 分发中引用 ACM 证书。版本说明与适用前提本文对应aws-sdk/client-acm版本3.1007.0即 frontmatter 中metadata.versions的取值与 Content Guide 中versions字段始终指 npm 上的包版本的约定一致。当前 ACM API 模型暴露一个ListCertificates分页器和一个证书验证 waiter对应 SDK 中的paginateListCertificates与waitUntilCertificateValidated。文中所有代码以 Node.js ESMimport为前提凭证来自环境变量、共享配置文件、实例元数据或 IAM Identity Center 之一。如果你发现文档遗漏了某个操作细节例如某区域的行为差异、特殊错误码可以直接用本地注解沉淀下来供后续会话复用chub annotate aws/acm 在 us-east-1 之外区域CloudFront 证书必须创建在 us-east-1 chub feedback aws/acm up DNS 验证工作流示例完整可运行注解的语义与信任边界见 Feedback and Annotations命令的完整参数见 CLI Reference。赞分享【免费下载链接】context-hub项目地址https://gitcode.com/gh_mirrors/co/context-hub点击查看免费下载相关推荐使用 AWS SDK for Ruby 实战 AWS Lambda从 Hello World 到完整函数生命周期管理使用 AWS SDK for Ruby 实战 AWS Lambda从 Hello World 到完整函数生命周期管理 导读 本文以 ruby/example_示例工程教程后端探索Wan2.1开启智能视频生成新纪元的开源力量探索Wan2.1开启智能视频生成新纪元的开源力量 你是否曾经梦想过只需一张静态图片或一段文字描述就能轻松创造出流畅生动的视频内容传统视频制作需要专业的技大模型深度学习音视频计算机视觉使用 AWS SDK for Java 2.x 操作 CloudFormation栈生命周期管理完整实战使用 AWS SDK for Java 2.x 操作 CloudFormation栈生命周期管理完整实战 导读 本文以 javav2/example_code示例工程教程后端上一篇RustFS 远程锁 RPC 风暴防护从 GOAWAY too_many_resets 日志洪泛到可观测的优雅降级下一篇Vibe-Trading SEC EDGAR 文件分析实战从 10-K 到 Form 4 的美股基本面与事件信号框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?