在.NET CDK部署中获取AWS::Transfer::WebApp访问端点并配置S3 CORS问题
我正尝试在.NET CDK部署期间获取AWS::Transfer::WebApp的Access Endpoint,以便将其传入关联S3存储桶的CORS策略(该策略接受字符串数组)。
部署Web应用的代码如下:
var webApp = new CfnWebApp(this, "MyWebApp", new CfnWebAppProps() { IdentityProviderDetails = new IdentityProviderDetailsProperty() { InstanceArn = .... Role = ... } });
我无法直接访问webApp.AccessEndpoint,因为部署期间该值为NULL——这符合逻辑,毕竟资源还没部署完成。
我知道Token可用于延迟解析属性,于是尝试了以下代码:
var endpoint = webApp.GetAtt("AccessEndpoint").ToString()
但部署时收到错误:"Requested attribute AccessEndpoint must be a readonly property in schema for AWS::Transfer::WebApp"。
我还尝试了另一种写法:
var endpoint = Fn.GetAtt(webApp.LogicalId, "AccessEndpoint").ToString()
结果还是收到相同的只读属性错误。
我清楚Fn.GetAtt(webApp.LogicalId, "AccessEndpoint")返回IResolvable,但不知道该怎么把它传入CORS的AllowedOrigins(字符串数组)。我是CDK新手,可能漏掉了关键知识点。
更新
问题好像不是获取AccessEndpoint的问题,而是把它传入S3存储桶的过程中出了问题。我可以正常打印Token:
Console.WriteLine(Token.AsString(webApp.GetAtt("AccessEndpoint"))); Console.WriteLine(Token.AsString(Fn.GetAtt(webApp.LogicalId, "AccessEndpoint")));
输出为${Token[TOKEN.43]}和${Token[TOKEN.44]}。
但当我把它传入S3存储桶的CORS规则时:
new Bucket(this, "MyBucket", new BucketProps() { BucketName = "myBucketName", //.... Cors = [ new CorsRule() { AllowedHeaders = //... AllowedMethods = //... AllowedOrigins = [Token.AsString(webApp.GetAtt("AccessEndpoint"))] } ] });
部署时就会报错,看起来是把Token传入CorsRule导致的:"Requested attribute AccessEndpoint must be a readonly property in schema for AWS::Transfer::WebApp"。
内容的提问来源于stack exchange,提问作者danwag

