@EnableFunctionDeployer
не выполнит задачу, которую вы ищете. `
Аннотация для использования в приложении Spring Boot, если оно хочет
разверните файл jar, содержащий определение функции.
Ниже приведен пример того, как Spring-Cloud-Function-Deployer использует эту аннотацию.
@SpringBootApplication
@EnableFunctionDeployer
public class FunctionApplication {
public static void main(String[] args) throws IOException {
new ApplicationBootstrap().run(FunctionApplication.class, args);
}
}
Дополнительная информация о EnableFunctionDeployer.
https://cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/multi/multi__deploying_a_packaged_function.html
Хотя я не могу найти плагин gradle
, который может выполнять развертывание непосредственно в AWS Lambda, но это легко сделать с помощью maven
с множеством плагинов и способов.
Один пример - В этой статье AWS есть архетип maven, который генерирует кодовую базу с pom.xml , которая выполняет прямое развертывание в AWS Lambda (используя CloudFormation в фоновом режиме). Ниже приведена конфигурация плагина, которая используется для запуска aws cloudformation
исполняемого файла.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>sam-local-invoke</id>
<phase>verify</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>sam</executable>
<arguments>
<argument>local</argument>
<argument>invoke</argument>
<argument>-e</argument>
<argument>event.json</argument>
</arguments>
<skip>${skipLocalInvoke}</skip>
</configuration>
</execution>
<execution>
<id>sam-package</id>
<phase>install</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>aws</executable>
<arguments>
<argument>cloudformation</argument>
<argument>package</argument>
<argument>--region=${awsRegion}</argument>
<argument>--template-file=template.yaml</argument>
<argument>--output-template-file=target/sam.yaml</argument>
<argument>--s3-bucket=${s3Bucket}</argument>
<argument>--s3-prefix=${s3Prefix}</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>sam-deploy</id>
<phase>deploy</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>aws</executable>
<arguments>
<argument>cloudformation</argument>
<argument>deploy</argument>
<argument>--region=${awsRegion}</argument>
<argument>--template-file=target/sam.yaml</argument>
<argument>--stack-name=${stackName}</argument>
<argument>--capabilities=CAPABILITY_IAM</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Если вы настаиваете на том, чтобы быть в gradle, вероятно, один из вариантов - это выполнить maven deploy
команду из gradle, используя gradle-maven-exec-plugin (хотя нужно проверить это).
Мое личное мнение состояло бы в том, чтобы собрать jar с использованием gradle / maven и развернуть с использованием безсерверной инфраструктуры, разделяющей развертывание и сборку различными инструментами.
Пример -
https://gist.github.com/lobster1234/201fb83dc2847a1e2a106a098636bc1f
Дайте мне знать ваши мысли.