AWS CDK Java — загрузка файлов в S3

Я использую 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));
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
425
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, что мог бы найти лучший способ сделать это, который сочетает загрузку кода с созданием лямбда. Меня по-прежнему интересуют мысли экспертов 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).

Спасибо за понимание. Я нашел лучшее решение, но это может оказаться полезным в будущем.

RodP 12.02.2021 23:11

Другие вопросы по теме