怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行

怎么运行aws的示例程序

之前的 几篇 文章中,我描述了如何设置Spring Boot应用程序并在AWS Elastic Beanstalk上运行它。 尽管这是从物理服务器到云服务器的重要一步,但还有更好的可能! 走向无服务器 。 这意味着无需花费任何服务器费用,也无需维护或配置服务器! 听起来不错吧? 结合使用AWS LambdaAWS API GatewayAWS使得无服务器变得非常容易。 在这篇文章中,我将描述运行在Elastic BeanStalk上的Spring Boot应用程序运行相同的无服务器功能所需要的处理。

我采取的第一步是摆脱Spring Boot依赖关系,因为我们不再需要该容器了。 我用Spring Core和Spring Configuration的依赖关系替换了它们。 此外,还对插件进行了更改,以构建可用于AWS Lambda的jar。
pom最重要的部分来自于此:

...
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
  </dependency>
  ...
  ...
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
  ...

对此:

...
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  ...
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <configuration>
      <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  ...

下一步是修改Java代码,以便通过实现AWS Lambda接口来调用RestController功能:

public class LambdaFunctionHandler implements RequestHandler<InvoiceRequest, InvoiceResponse> {

    private static final Logger LOGGER = LoggerFactory.getLogger(EasyInvoiceController.class);

    private EasyInvoiceController easyInvoiceController;

    @Override
    public InvoiceResponse handleRequest(InvoiceRequest input, Context context) {

        easyInvoiceController = Application.getBean(EasyInvoiceController.class);
        InvoiceResponse result = null;
        try {
            result = easyInvoiceController.generate(input);
        } catch (ExecutionException e) {
            LOGGER.error(e);
        } catch (InterruptedException e) {
            LOGGER.error(e);
        }
        return result;
    }
}

使用此类(以及一些简单的Spring配置),最初由传入HTTP请求调用的RestController功能现在由Lambda请求调用。
就我而言,由于我不需要在Lambda代码中保护传入的请求,因此我也可以摆脱Spring Security代码,因为这将在API网关中完成。

下一步是上传Lambda功能(在目标文件夹中生成的jar文件),并通过对其进行测试来确保其正常工作。 我利用了S3存储桶上传工具,并添加了一些环境变量:

screenshot-at-nov-27-20-09-45

最后一步是通过定义API从API网关调用Lambda。 有关示例,请参见屏幕截图:

screenshot-at-nov-30-08-21-35

我必须说,这种无服务器架构可能不适用于所有用例,但至少在设计新的应用程序/(微)服务时或无论如何对架构进行更改时都应该考虑它。
另一个需要注意的是,我花了相当多的精力才能使API网关与我创建的Lambda一起使用,但是我仍然认为这对于某些情况是一个很好的解决方案。

翻译自: https://www.javacodegeeks.com/2016/12/making-spring-boot-application-run-serverless-aws.html

怎么运行aws的示例程序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值