【问题标题】:Extract domains from deployed serverless endpoints从已部署的无服务器端点中提取域
【发布时间】:2025-12-10 08:45:02
【问题描述】:

运行无服务部署命令后,我想检索已部署端点的域名,以便在其他服务中进一步使用。到目前为止,我想到的最好的方法是 grep sls info 输出。

例如 sls info --stage integration | grep GET - | head -1 | egrep -o 'https?://[^ ]+' | awk -F[/:] '{print $4}'

有没有更好、更简单的方法来实现这一点?

【问题讨论】:

    标签: serverless-framework


    【解决方案1】:

    你可以使用this插件。

    在你的serverless.yml

    plugins:
     - serverless-scriptable-plugin
    
    custom:
      scriptHooks:
        after:deploy:finalize:
          - scripts/postDeploy.js
    
    

    postDeploy.js

    const getStackOutputs = async () => {
      const provider = serverless.getProvider('aws');  
      const { stage, region } = provider.options;
      const stackName = provider.naming.getStackName();
      const result = await provider.request(
        'CloudFormation',
        'describeStacks',
        { StackName: stackName },
        stage,
        region,
      );
    
      const outputsArray = result.Stacks[0].Outputs;
    
      const outputs = {};
      for (let i = 0; i < outputsArray.length; i++) {
        outputs[outputsArray[i].OutputKey] = outputsArray[i].OutputValue;
      }
    
      const hostname = new (require('url')).URL(outputs.ServiceEndpoint).hostname;
      console.log(hostname);
    };
    
    getStackOutputs();
    

    另一个选项是this plugin,但您需要使用here 所述的分叉版本。

    【讨论】: