繁体   English   中英

AWS CDK Java - 文件上传到 S3

[英]AWS CDK Java - File Upload to S3

我正在使用 AWS CDK (Java) 使用以下代码将我的 lambdas 上传到 S3。 我不希望 CDK 解压缩我的 jar 文件。 这似乎是实现这一目标的唯一方法(它确实有效),但它在 AssetOptions.builder().exclude() 上使用了已弃用的代码。 在 Java 中是否有更好的方法可以在不使用已弃用代码的情况下执行此操作?

List<ISource> lambdaSources = new ArrayList<>();
for(String lambda: lambdas) {   
    AssetOptions assetOptions = AssetOptions.builder().exclude(
        Arrays.asList("**", "!" + lambda + "-" + VERSION + SUFFIX)).build();
    lambdaSources.add(Source.asset("../" + lambda + "/build/libs/", assetOptions));
}

我想我可能已经找到了一种更好的方法,它将代码上传与 lambda 创建相结合。 如果有更好的方法,我仍然对 CDK 专家的想法感兴趣。

顺便说一句,“lambda”只是我创建的一个实体,用于保存我拥有的各种功能的相关属性。

Function.Builder fnBuilder = Function.Builder.create(this, "Builder"); 
 fnBuilder.code(lambda.getCode())
    .functionName(lambda.getName())
    .handler(lambda.getHandler())
    .memorySize(lambda.getSize())
    .role(lambda.constructRole(this))
    .runtime(LambdaDetails.RUNTIME)
    .timeout(lambda.duration())
    .securityGroups(Arrays.asList(lambda.constructSecurityGroup(this)))
    .vpcSubnets(lambda.constructSubnets(this))
    .build();

我不是 CDK 团队的成员,也不是 CDK 专家,也没有具体的 Java 代码可提供。 但是,我在使用 TypeScript CDK 时发现了有关弃用警告的其他上下文,这可能会有所帮助。

TLDR:我选择忽略弃用。 原因如下:

AWS CDK 源码使用 TypeScript 编写, jsii用于为其他支持的语言(Java、.NET、ZA7F5F35426B927411FC9231B56382173 等)生成 AWS CDK Construct 库。 我在下面描述的内容应该仍然与 Java 的 CDK 相关。

我同意,一般来说,避免弃用的代码是一种很好的做法。 但是,该特定的弃用警告似乎至少部分是某些 CDK 重构的误导性结果(见下文)。 我称之为“误导”,因为它导致像我这样的一些开发人员(错误地)将其解释为将来不再支持exclude 由于没有提供明确的替代方案,因此非常令人担忧。

但是,在阅读了 github 存储库的更多内容后, exclude功能看起来仍然可用并受支持,尽管确切的语法可能会改变。

在阅读 aws-cdk 源代码、拉取请求770812700(仅 10 天前)以及相关问题944710125之后,从实际的角度来看,似乎exclude并没有真正被弃用。 一些评论直接指出了误解。 在 TypeScript 源代码中, exclude正在从assets模块中的AssetOptions (不推荐使用的属性)移动到core模块中的CopyOptions (通过FileOptions )(不推荐使用)。

这里有一个关键点:因为assets.AssetOptions继承自core.CopyOptions —— 而 core.CopyOptions 又继承自copy.FileOptions —— exclude仍然有效地保留在AssetOptions接口上……至少对于 CDK V1!

对于 V2,有人说他们想要弃用整个资产模块,而不仅仅是将一些共享类型移动到核心。 我找不到关于最终 V2 更改的明确参考,但我将我所发现的精神解释为我可以安全地继续使用带exclude的 glob 模式来自定义 S3 部署。 如果资产模块在 V2 中执行 go ,我希望所需的代码更新很小 - 甚至可能像导入和/或类型名称更改或两个一样简单(当然是 YMMV)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM