Я использую AWS CDK (Java) для загрузки своих лямбда-выражений на 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));
}




Я думаю, что мог бы найти лучший способ сделать это, который сочетает загрузку кода с созданием лямбда. Меня по-прежнему интересуют мысли экспертов CDK, есть ли лучший подход.
Кстати, «лямбда» — это просто объект, который я создал для хранения соответствующих атрибутов различных функций, которые у меня есть.
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 используется для создания библиотек AWS CDK Construct для других поддерживаемых языков (Java, .NET, Python и т. д.). То, что я описываю ниже, по-прежнему должно иметь отношение к CDK для Java.
Я согласен с тем, что избегать устаревшего кода — это хорошая практика в целом. Но это конкретное предупреждение об устаревании, по крайней мере частично, является вводящим в заблуждение результатом некоторого рефакторинга CDK (см. ниже). Я называю это «вводящим в заблуждение», потому что это заставило некоторых разработчиков, таких как я, (неверно) интерпретировать это как означающее, что exclude больше не будет поддерживаться в будущем. Поскольку никакой четкой альтернативы предложено не было, это очень беспокоило.
Однако после прочтения репозитория github функциональность exclude выглядит так, как будто она останется доступной и поддерживается, хотя точный синтаксис может измениться.
После прочтения исходного кода aws-cdk, запросов на включение 7708 и 12700 (всего 10 дней назад) , а также сопутствующих проблем 9447 и 10125, похоже, что exclude на самом деле не устарела. с практической точки зрения. Некоторые комментарии прямо указывают на недоразумение. В исходном коде TypeScript exclude перемещается из AssetOptions в модуле assets (где это свойство является устаревшим) в CopyOptions (через FileOptions) в модуле core (где оно не является устаревшим).
Вот ключевой момент: поскольку assets.AssetOptions наследуется от core.CopyOptions, который, в свою очередь, наследуется от copy.FileOptions, exclude эффективно остается на месте в интерфейсе AssetOptions... по крайней мере, для CDK V1!
Некоторые говорят, что для версии 2 они хотят отказаться от всего модуля ресурсов, а не просто перенести некоторые общие типы в ядро. Я не смог найти исчерпывающую ссылку на окончательные изменения V2, но я интерпретирую дух того, что я нашел, что я могу безопасно продолжать использовать шаблоны glob с exclude для настройки развертываний S3. Если модуль ресурсов действительно исчезнет в V2, я ожидаю, что необходимые обновления кода будут незначительными — может быть, даже такими простыми, как импорт и/или изменение имени типа или два (конечно, YMMV).
Спасибо за понимание. Я нашел лучшее решение, но это может оказаться полезным в будущем.