【发布时间】:2025-12-10 08:45:02
【问题描述】:
运行无服务部署命令后,我想检索已部署端点的域名,以便在其他服务中进一步使用。到目前为止,我想到的最好的方法是 grep sls info 输出。
例如
sls info --stage integration | grep GET - | head -1 | egrep -o 'https?://[^ ]+' | awk -F[/:] '{print $4}'
有没有更好、更简单的方法来实现这一点?
【问题讨论】:
运行无服务部署命令后,我想检索已部署端点的域名,以便在其他服务中进一步使用。到目前为止,我想到的最好的方法是 grep sls info 输出。
例如
sls info --stage integration | grep GET - | head -1 | egrep -o 'https?://[^ ]+' | awk -F[/:] '{print $4}'
有没有更好、更简单的方法来实现这一点?
【问题讨论】:
你可以使用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 所述的分叉版本。
【讨论】: