如何将无服务器cloudformation输出变量导出到文件或任务运行器?

rap*_*dko 1 amazon-web-services aws-cloudformation serverless-framework

我正在使用serverless.yml在AWS cloudformation中创建几个服务,特别是:cognitoUserPool和UserPoolClient。

这两个创建都将返回ID,这些ID将用于在我的带有ognito库的平面html文件上连接到Amazon cognito的ID,因此,由于我从S3提供平面文件,因此我需要将这些值编码在文件中。

现在,我正在寻找一种自动化的方法,也许在文件中保留一个占位符,然后通过预处理器运行它们,该预处理器会使用输出值更改占位符,然后再将其上传到S3。

有什么想法可以实现吗?我的第一个猜测是从无服务器部署中导出输出变量,然后在任务运行器上使用这些值。

Gaz*_*dge 5

要在不使用无服务器插件的情况下实现此目的,请将以下内容添加到package.json文件中:

  "scripts": {
    "sls:info": "sls info --verbose | tee ./.slsinfo",
  }
Run Code Online (Sandbox Code Playgroud)

这将创建.slsinfo包含无服务器输出的文件(以及其他内容)。通过调用运行npm run sls:info

然后可以更新package.json:

  "scripts": {
    "sls:deploy": "sls deploy && npm run sls:info",
    "sls:info": "sls info --verbose | tee .slsinfo",
  }
Run Code Online (Sandbox Code Playgroud)

现在您可以调用npm run sls:deploy,它将部署您的服务并将您的输出添加到.slsinfo文件。

.slsinfo最简单的方式使用信息是使用正则表达式。下面的例子:

const slsinfo = require('fs').readFileSync('./.slsinfo', 'utf8');

function getOutput(output) {
  return slsinfo.match(new RegExp('('+output+': )((.?)+)(\\n)'))[2];
}
Run Code Online (Sandbox Code Playgroud)

使用以上方法,您可以得到如下输出:

const var = getOutput('MyOutputName')
Run Code Online (Sandbox Code Playgroud)