【发布时间】:2020-05-21 07:03:12
【问题描述】:
我正在尝试在单个堆栈中部署 S3 静态网站和 API 网关/lambda。
S3 静态站点中的 javascript 调用 lambda 以填充 HTML 列表,但它需要知道用于 lambda 集成的 API Gateway URL。
目前,我像这样生成一个 RestApi...
const handler = new lambda.Function(this, "TestHandler", {
runtime: lambda.Runtime.NODEJS_10_X,
code: lambda.Code.asset("build/test-service"),
handler: "index.handler",
environment: {
}
});
this.api = new apigateway.RestApi(this, "test-api", {
restApiName: "Test Service"
});
const getIntegration = new apigateway.LambdaIntegration(handler, {
requestTemplates: { "application/json": '{ "statusCode": "200" }' }
});
const apiUrl = this.api.url;
但是在 cdk deploy 上,apiUrl =
"https://${Token[TOKEN.39]}.execute-api.${Token[AWS::Region.4]}.${Token[AWS::URLSuffix.1]}/${Token[TOKEN.45]}/"
因此,在静态站点需要该值之前,不会解析/生成 url。
如何计算/查找/获取 API Gateway URL 并更新 cdk deploy 上的 javascript?
或者有更好的方法吗?即静态javascript是否有一种优雅的方式来检索lambda api网关url?
谢谢。
【问题讨论】:
-
只是为了确保,您想创建一个新的 api 网关,然后使用 url ?
-
是的,我正在研究创建一个名为 config.json 的 S3Object,其内容为 { "apiurl" : !Sub "https://${restApiId}.execute-api.${AWS: :Region}.amazonaws.com/${apiGatewayStageName}" } 但我无法在 cdk 部署期间获取 restApiId。 “稍后使用 url”是指在堆栈部署的后期,我想用 url 值填充 S3 文件。
-
@benito_h 看看我的回答:stackoverflow.com/a/61580083/9931092
-
@Tim 你能找到解决方案吗?正在考虑使用 url 作为参数创建一个自定义资源来创建该对象,但很想听听是否有更优雅的解决方案。
-
看到他们正在关闭您的问题 @alex9311,我在 github.com/aws/aws-cdk/issues/12903 提出了一个功能请求,可能更符合 CDK 的愿景
标签: aws-lambda aws-api-gateway aws-cdk