簡體   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