资讯详情

资讯详情

Serverless Framework 的 `serverless info` 命令详解:查询已部署 AWS 服务全貌

Serverless Framework 的serverless info命令详解查询已部署 AWS 服务全貌【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverlessserverless info是 Serverless Framework 中用来查询“已部署服务”状态的命令它会展示服务的名称、stage、region、API Key、REST/HTTP API 端点、函数与 Layers 列表并通过--verbose、--json等选项输出 CloudFormation Stack Outputs 或结构化数据。本文以仓库内的官方文档 info.md 为骨架并结合本仓库 AWS 插件源码packages/serverless/lib/plugins/aws/info/剖析其数据收集流程与生命周期机制帮助你准确解读每次查询输出并将它接入部署验证、脚本与 CI 流水线。命令概述它能告诉你什么info面向的是已经成功部署到 AWS 的堆栈而不是本地配置。它读取 CloudFormation 栈的实际状态并回答一组固定的问题服务叫什么部署在哪个 stage、哪个 regionCloudFormation 栈名是什么有没有 API Gateway API Key值是什么在--conceal下可隐藏对外暴露了哪些端点REST API、HTTP API、WebSocket、CloudFront、Lambda Function URL服务里有哪几个 Lambda 函数、几个 Layers对应的部署后真实名称/ARN是什么整个栈现在包含多少个资源其基础用法只有一条命令serverless info命令依赖已部署的栈因此如果在本地刚写完配置还没有部署它会因为找不到对应的 CloudFormation 栈而报错先执行serverless deploy再执行serverless info才是典型的“部署后核查”流程。完整选项表文档给出了info的核心选项在源码中该命令的选项由 commands-schema.js 统一定义并注册。把两者合并可以得到如下更完整的选项说明选项缩写类型说明--stage-sstring指定要查询的服务 stage例如dev、prod--region-rstring指定该 stage 下要查询的 AWS 区域--aws-profile—string指定本次查询使用的 AWS 凭证 profile--json—boolean以 JSON 结构输出全部信息适合脚本/CI 解析--verbose—boolean在输出末尾追加展示所有 Stack Outputs--conceal—boolean隐藏输出中的敏感信息例如 API Key 明文值源码中选项说明为 “Hide secrets from the output (e.g. API Gateway key values)”--stack—string自定义 CloudFormation 栈名schema 标注为 “CloudFormation/SAM Only”适用存在非标准栈名的场景典型组合示例# 查询 prod stage、eu-west-1 区域的部署信息 serverless info --stage prod --region eu-west-1 # 使用指定 AWS profile 查询 serverless info --aws-profile mycompany-prod # 以结构化 JSON 输出并隐藏 API Key 明文 serverless info --json --conceal注意命令定义中的serviceDependencyMode: required表明该命令必须在包含serverless.yml的服务目录内运行而hasAwsExtension: true意味着它拥有 AWS 专属实现。数据从哪来CloudFormation Outputs AWS SDK 的双通道采集官方文档明确指出在 AWS 上 info 插件使用 CloudFormation 栈的Outputs段并结合 AWS SDK 收集所需信息。这一点在源码中得到完全印证栈信息核心调用CloudFormation.describeStacks读取当前栈的全部Outputs进而从中还原函数、Layers、端点、CloudFront 域名等部署产物见 get-stack-info.js。HTTP API 外部 ID 处理若serverless.yml中配置了provider.httpApi.id引用了外部 HTTP API源码会先调用ApiGatewayV2.getApi解析出ApiEndpoint再把形如httpApi: https://xxx.execute-api.region.amazonaws.com的条目追加进端点列表若该 id 是Fn::ImportValue形式的跨栈引用则会先解析 CloudFormation ImportValue 再查询见 get-stack-info.js。资源计数通过CloudFormation.listStackResources分页NextToken统计栈内资源总数存入info.resourceCount见 get-resource-count.js。API Key 值先从配置的provider.apiGateway.apiKeys/provider.apiKeys收集 key 名称再describeStackResources过滤出AWS::ApiGateway::ApiKey类型的资源最后用APIGateway.getApiKey(includeValue: true)取回真实值见 get-api-key-values.js。各类信息的还原规则由 get-stack-info.js 的实现可以看出信息组装方式函数遍历service.getAllFunctions()每项记录本地名name、部署后的deployedName、打包产物大小artifactSize以及若存在 Function URL OutputurlLayers遍历service.getAllLayers()把每个 Layer 与形如{LayerName}LambdaLayer的 Output 对应得到其发布 ARNAgentsBedrock AgentCore读取service.ai?.agents优先匹配${logicalId}Url输出得到访问 URL否则回退到${logicalId}ArnAI Gatewayservice.ai?.gateways也以AgentCoreGateway{Name}Url形式被并入 agents 区块展示CloudFront若栈输出中存在 CloudFront 分发的域名 Output则以CloudFront - {domain}形式加入端点段端点过滤匹配 service endpoint 正则的 OutputHttpApiUrl会被格式化为httpApi: {url}其余如 REST API 的ServiceEndpoint直接作为端点值输出。一个实用的“预警”资源数量逼近上限在after:aws:info:gatherData钩子中见 index.js当统计出的resourceCount 450时插件会打印警告提示服务即将逼近 CloudFormation 单栈 500 个资源的硬性上限。因此info不只是“查看”它还是一台内置的容量体检仪——规模增长期值得每次部署后跑一遍。命令执行机制生命周期事件与“spawn”关系官方文档只列出了info:info这一个生命周期事件但把它和源码结合执行链路其实相当清晰顶层命令info在 plugins/info.js 中注册生命周期事件为info:info由于该命令声明了hasAwsExtension: true执行到info:info钩子时AWS 插件packages/serverless/lib/plugins/aws/info/index.js会通过pluginManager.spawn(aws:info)把控制权转交给 AWS 专属实现aws:info定义了完整的内部生命周期见 index.jsvalidate → gatherData → displayServiceInfo → displayApiKeys → displayEndpoints → displayFunctions → displayLayers → displayAgents → displayStackOutputs其中gatherData顺序执行三个数据采集方法栈信息、资源计数、API Key 值随后按 display 各阶段把结果写入serverless.serviceOutputs统一输出。与deploy的联动部署完成即打印摘要值得注意的一个事实是源码中不仅info:info会触发该流程deploy:deploy钩子同样会spawn(aws:info)见 index.js。也就是说serverless deploy成功后框架本身就会自动调用一次 info 数据采集来展示刚刚部署的端点与函数摘要——这与本文文首展示的serverless info独立输出是同一套实现。二者的区别体现在最终输出格式上finalize钩子index.js只在命令确为info时才走 JSON/服务输出逻辑。深入解读输出内容标准输出人读友好格式$ serverless info Service Information service: my-serverless-service stage: dev region: us-east-1 api keys: myKey: some123valid456api789key1011for1213api1415gateway endpoints: GET - https://dxaynpuzd4.execute-api.us-east-1.amazonaws.com/dev/users functions: my-serverless-service-dev-hello对照 display.js 的实现这段输出有几个细节值得了解service / stage / region / stack来自displayServiceInfo()直接取本地服务名、provider 当前 stage/region以及通过provider.naming.getStackName()得到的栈名即{service}-{stage}并非“查询到”的部署产物api keys来自displayApiKeys()。默认展示名称: 值使用--conceal时只展示名称与描述避免 API Key 明文出现在终端或日志里endpoints来自displayEndpoints()它对https://开头的 REST 端点会遍历服务的 http 事件并拼出METHOD - url/pathhttpApi:前缀的条目则通过 HTTP API 插件解析出每个函数的method pathWebSocketwss等端点原样输出CloudFront 输出为CloudFront - {domain}Lambda Function URL 也会被追加为{函数名}: {url}functions来自displayFunctions()输出格式为本地名: 部署名若服务通过package记录了artifactSize还会在后面以人类可读的文件大小借助 filesize.js 实现例如(3.2 MB)标注打包产物体积layers / agentsLayers 显示名称: ARNAgents 优先显示 URL无 URL 时回退到 ARN。Verbose追加全部 Stack Outputs使用--verbose后displayStackOutputs()会把 CloudFormation 栈的所有 Output 追加到末尾见 display.js$ serverless info --verbose Service Information service: my-serverless-service stage: dev region: us-east-1 api keys: myKey: some123valid456api789key1011for1213api1415gateway endpoints: GET - https://dxaynpuzd4.execute-api.us-east-1.amazonaws.com/dev/users functions: my-serverless-service-dev-hello Stack Outputs CloudFrontUrl: d2d10e2tyk1pei.cloudfront.net ScreenshotBucket: dev-svdgraaf-screenshots ServiceEndpoint: https://12341jc801.execute-api.us-east-1.amazonaws.com/dev ServerlessDeploymentBucketName: lambda-screenshots-dev-serverlessdeploymentbucket-15b7pkc04f98a这里的Stack Outputs正是 CloudFormation 栈Outputs段的逐项回显。另外源码还会把这些 Output 同步写入this.serverless.stackOutputs对象供后续插件或自定义脚本读取。JSON面向脚本与 CI 的结构化输出使用--json时finalize钩子会把采集到的gatheredData与服务插件输出合并后整体序列化见 index.js。官方文档给出了完整示例$ serverless info --json { info: { functions: [ { name: hello, deployedName: my-serverless-service-dev-hello } ], layers: [], endpoints: [ httpApi: https://mnpgyjhfqj.execute-api.us-east-1.amazonaws.com ], service: my-serverless-service, stage: dev, region: us-east-1, stack: my-serverless-service-dev, resourceCount: 4, apiKeys: [] }, outputs: [ { OutputKey: HelloLambdaFunctionQualifiedArn, OutputValue: arn:aws:lambda:us-east-1:012345678901:function:my-serverless-service-dev-hello:26, Description: Current Lambda function version, ExportName: sls-my-serverless-service-dev-hello-HelloLambdaFunctionQualifiedArn }, { OutputKey: ServerlessDeploymentBucketName, OutputValue: serverless-framework-deployments-us-east-1-d7b2bf38-2784, ExportName: sls-my-serverless-service-dev-ServerlessDeploymentBucketName }, { OutputKey: HttpApiId, OutputValue: mnpgyjhfqj, Description: Id of the HTTP API, ExportName: sls-my-serverless-service-dev-HttpApiId }, { OutputKey: HttpApiUrl, OutputValue: https://mnpgyjhfqj.execute-api.us-east-1.amazonaws.com, Description: URL of the HTTP API, ExportName: sls-my-serverless-service-dev-HttpApiUrl } ] }可以把这个结构拆成两层理解info节点是采集到的“高价值摘要”functions[].name是 serverless.yml 中的本地函数名deployedName是 AWS 上真实部署名通常带{service}-{stage}-前缀endpoints为规范化的端点列表REST 网关 URL、httpApi:前缀的 HTTP API URL 等service/stage/region/stack为服务定位信息resourceCount为栈资源总数apiKeys为该服务下 API Key 的名称/值/描述/customerId 数组layers为 Layer 及其 ARN 列表outputs节点则是 CloudFormation 栈 Output 的“原始全集”保留了OutputKey、OutputValue、Description、ExportName四个字段——例如示例中的HelloLambdaFunctionQualifiedArn可用于拿到某函数当前带版本号的 ARN。由于--json输出是标准 JSON配合命令行解析工具jq等即可在脚本或 CI 中直接提取信息例如“拿到部署后的函数完整名称”或“校验某 Output 是否存在”。实战建议与注意事项部署后立刻核查serverless deploy结束时会自动展示同样一套信息摘要若部署之后还想重看直接跑serverless info即可无需重新部署。脚本里用--json而不是解析文本文本输出面向人类字段会随版本演进微调--json的结构化字段是机器消费的稳定入口。隐藏敏感值在共享终端、录屏或日志采集场景下执行serverless info时建议带上--conceal避免 API Key 明文泄出。多环境查询通过-s/-r或--aws-profile组合即可在一条命令内查看不同 stage/region/profile 的部署状态例如先查dev再查prod做差异对比。资源规模预警输出中的resourceCount若逼近 450源码内置的告警阈值CloudFormation 单栈上限为 500应尽早规划拆分服务。小结serverless info是把“本地 serverless.yml 期望状态”和“AWS 上 CloudFormation 实际状态”对齐的关键命令文档定义的--stage、--region、--aws-profile、--json、--verbose等选项配合仓库中gatherData采集链与display*输出链的实现使其既能给出人读摘要也能输出机器可解析的完整栈信息。需要更深一层排查资源映射关系或自定义解析输出时可直接阅读 plugins/aws/info/index.js、get-stack-info.js 与 display.js 这三个文件。【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →