我正在使用CDK构建我的静态文件(HTML,JavaScript),并将它们上传到S3桶中,这是我部署的一部分。但是,我的源文件需要知道它们将被部署到的最终URL,因为这将影响内部URL。因此,我尝试传递一个从API网关的URL派生的环境变量。
const api = new apigateway.RestApi(this, 'restApi');
const staticRoute = api.root.addResource('static');
new s3deploy.BucketDeployment(this, 'DeployWebsite', {
sources: [s3deploy.Source.asset("./path/to/source/files", {
bundling: {
image: cdk.DockerImage.fromRegistry("node:latest"),
command: [
'bash', '-c', `
cd /asset-input \
&& npm install \
&& npm run build \
&& mv build/* /asset-output
`,
],
environment: {
'PUBLIC_URL': api.urlForPath(staticRoute.path)
}
},
})],
destinationBucket: this.websiteBucket,
});
但是,在实践中,这段代码不起作用,因为它只是将CloudFormation标记插入到PUBLIC_URL
变量中,我得到了类似于'https://${Token[TOKEN.380]}.execute-api.us-east-1.${Token[AWS.URLSuffix.10]}/${Token[TOKEN.399]}/static/'
的内容,这显然是行不通的。在编译静态内容时,如何在构建时将这些令牌解析为实际的字符串组件?
发布于 2021-11-30 01:38:54
如果您说的是构建时间,您是指在堆栈执行之前吗?因为这不可能。CDK使用这些标记,因为在实际部署堆栈之前不可能有这些值。
有几个选项可以解决这个问题,例如,您可以拆分堆栈,使用API部署堆栈,并在第二个堆栈中使用API的URL作为参数。您可以将URL作为参数传递,也可以将CDK与aws组合起来,以便检索必要的参数。您可以从服务本身检索它,也可以将它定义为第一个堆栈中的输出并以这种方式检索它。
https://stackoverflow.com/questions/70162670
复制相似问题