AWS CDK Java - 文件上传到 S3
AWS CDK Java - File Upload to S3
我正在使用 AWS CDK (Java) 通过以下代码将我的 lambda 上传到 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、Python 等)生成 AWS CDK Construct 库.).我在下面描述的内容应该仍然与 Java.
的 CDK 相关
我同意避免弃用代码通常是一种很好的做法。但该特定弃用警告似乎至少部分是某些 CDK 重构的误导性结果(见下文)。我称它为 'misleading',因为它导致像我这样的一些开发人员(错误地)将其解释为将来不再支持 exclude
。由于没有提供明确的替代方案,这非常令人担忧。
然而,在阅读了更多 github 存储库之后,exclude
功能看起来仍然可用并受支持,尽管确切的语法可能会发生变化。
阅读 aws-cdk 源代码后,拉取请求 7708 and 12700 (from only 10 days ago), along with related issues 9447 and 10125,从实际的角度来看,exclude
似乎并没有被弃用。一些评论直接指出了误解。在 TypeScript 源代码中,exclude
正在从 assets
模块中的 AssetOptions
(它已被弃用 属性)移动到 CopyOptions
(通过 FileOptions
) 在 core
模块中(未弃用)。
这里有一个关键点:因为 assets.AssetOptions
继承自 core.CopyOptions
—— 而后者又继承自 copy.FileOptions
—— exclude
在 AssetOptions
接口...至少对于 CDK V1!
对于 V2,一些人表示他们希望弃用整个资产模块,而不仅仅是将一些共享类型移至核心。我找不到关于最终 V2 更改的明确参考,但我将我所发现的精神解释为我可以安全地继续使用带有 exclude
的 glob 模式来自定义 S3 部署。如果 assets 模块确实在 V2 中消失了,我希望所需的代码更新是次要的——甚至可能像导入 and/or 类型名称更改或两个(当然是 YMMV)一样简单。
我正在使用 AWS CDK (Java) 通过以下代码将我的 lambda 上传到 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、Python 等)生成 AWS CDK Construct 库.).我在下面描述的内容应该仍然与 Java.
的 CDK 相关我同意避免弃用代码通常是一种很好的做法。但该特定弃用警告似乎至少部分是某些 CDK 重构的误导性结果(见下文)。我称它为 'misleading',因为它导致像我这样的一些开发人员(错误地)将其解释为将来不再支持 exclude
。由于没有提供明确的替代方案,这非常令人担忧。
然而,在阅读了更多 github 存储库之后,exclude
功能看起来仍然可用并受支持,尽管确切的语法可能会发生变化。
阅读 aws-cdk 源代码后,拉取请求 7708 and 12700 (from only 10 days ago), along with related issues 9447 and 10125,从实际的角度来看,exclude
似乎并没有被弃用。一些评论直接指出了误解。在 TypeScript 源代码中,exclude
正在从 assets
模块中的 AssetOptions
(它已被弃用 属性)移动到 CopyOptions
(通过 FileOptions
) 在 core
模块中(未弃用)。
这里有一个关键点:因为 assets.AssetOptions
继承自 core.CopyOptions
—— 而后者又继承自 copy.FileOptions
—— exclude
在 AssetOptions
接口...至少对于 CDK V1!
对于 V2,一些人表示他们希望弃用整个资产模块,而不仅仅是将一些共享类型移至核心。我找不到关于最终 V2 更改的明确参考,但我将我所发现的精神解释为我可以安全地继续使用带有 exclude
的 glob 模式来自定义 S3 部署。如果 assets 模块确实在 V2 中消失了,我希望所需的代码更新是次要的——甚至可能像导入 and/or 类型名称更改或两个(当然是 YMMV)一样简单。