Как непрерывно развертывать Spring Cloud Function в AWS lambda - PullRequest
1 голос
/ 26 июня 2019

Возможно ли непрерывное развертывание функции Spring Cloud в AWS Lambda.

Я хочу использовать конвейер gradle и bitbucket или, если есть какой-либо эффективный способ, который я могу использовать.

Должен ли я использовать аннотацию @EnableFunctionDeployer? Какой самый лучший способ?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

@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

Дайте мне знать ваши мысли.

1 голос
/ 02 июля 2019

Amazon предоставляет инструмент для непрерывного развертывания под названием AWS CodePipeline.Вы можете использовать его самостоятельно для непрерывного развертывания приложения или перенести свою функцию в проект AWS Codestar, он создает все ресурсы, необходимые для построения и развертывания вашей функции.Уровень бесплатного пользования AWS предлагает один бесплатный активный конвейер в месяц, а Codestar бесплатен, поэтому вы можете проверить его без каких-либо затрат.

...