Java 使用自动SSL证书在AWS Elastic Beanstalk上部署Spring引导应用程序

Java 使用自动SSL证书在AWS Elastic Beanstalk上部署Spring引导应用程序,java,amazon-web-services,spring-boot,ssl,amazon-elastic-beanstalk,Java,Amazon Web Services,Spring Boot,Ssl,Amazon Elastic Beanstalk,假设我有一个Spring Boot项目,它生成一个JAR文件www.example.com.JAR,该文件使用其嵌入式HTTP服务器显示一个显示“example”一词的示例页面 我想在AWS Elastic Beanstalk上部署这个裸JAR文件 我希望自定义域支持SSL/TLS,即https://www.example.com/ 我想使用Amazon自己的Amazon证书管理器 我希望Amazon证书管理器根据需要自动续订证书 如果需要DNS,我很乐意使用亚马逊的53号路线 如有必要,我愿

假设我有一个Spring Boot项目,它生成一个JAR文件
www.example.com.JAR
,该文件使用其嵌入式HTTP服务器显示一个显示“example”一词的示例页面

  • 我想在AWS Elastic Beanstalk上部署这个裸JAR文件
  • 我希望自定义域支持SSL/TLS,即
    https://www.example.com/
  • 我想使用Amazon自己的Amazon证书管理器
  • 我希望Amazon证书管理器根据需要自动续订证书
  • 如果需要DNS,我很乐意使用亚马逊的53号路线
  • 如有必要,我愿意使用负载平衡器
  • 如有必要,我愿意使用亚马逊的CloudFront
  • 我不想要一个解决方案,使我手动更新证书,并随时复制到某个地方
  • 我不想要一个需要我创建EC2实例的解决方案;我想部署一个裸JAR
满足所有这些要求的选项是什么?(我看到的大多数教程都跳过了SSL部分,尽管SSL在今天的web上是强制性的)

最后,如果裸JAR文件不可能做到这一点,但裸Docker映像可以做到这一点,那么我希望使用裸Docker映像满足这些相同的要求

  • 我想在AWS Elastic Beanstalk上部署这个裸JAR文件

  • 我不想要一个需要我创建EC2实例的解决方案;我想部署一个裸JAR


这两种说法对我来说毫无意义。您想使用Elastic Beanstalk,但不想使用EC2实例?Elastic Beanstalk只是一个为您管理EC2实例的服务。当您使用Elastic Beanstalk部署应用程序时,它将创建一个或多个EC2实例,并在这些实例上部署应用程序

要将Spring引导应用程序部署到Elastic Beanstalk,请执行以下操作

为了满足SSL要求,您需要在AWS ACM中为您拥有的域()创建SSL证书,并选择DNS验证。然后创建它告诉您的DNS记录,以验证您对域的所有权


接下来,使用负载平衡器将Java应用程序部署到Elastic Beanstalk。然后将AWS ACM证书附加到负载平衡器。最后,为
www.example.com
创建一个DNS CNAME记录,该记录指向负载平衡器的DNS名称。除非您试图将根域(
example.com
而不是
www.example.com
)指向您的负载平衡器,否则不需要使用Route53来实现此目的。

可能已经满足了所有这些要求,但可能自动续订/重新安装证书除外:

  • 是的,AWS Elastic Beanstalk上的裸Spring引导JAR文件
  • 是的,我的自定义域的SSL/TLS支持,即
  • 是的,确实使用了亚马逊自己的亚马逊证书管理器
  • 我不知道,但我希望Amazon证书管理器会根据需要自动更新证书
  • 是的,亚马逊的53号路线是我用于DNS的
  • 是的,我崩溃了,愿意使用负载平衡器,并且使用了一个
  • 我还不知道CloudFront的情况
  • 不必直接设置EC2实例
最困难的部分之一是安排将HTTP流量重定向到HTTPS。文档将我引向一个.ebextensions配置解决方案——但这似乎有问题,因为它似乎为测试配置设置了一个鸡和蛋的问题。当我找到一些关于如何配置负载平衡器规则的文档时,我松了一口气,这些文档实际上引导我找到了在负载平衡器本身中设置重定向所需的功能:

在重定向到HTTPS之前,我必须在负载平衡器上设置HTTPS。我用的那个医生是

为了为我的自定义域设置公共证书,我使用了ACM:

最初,我为我的自定义域创建了一个托管区域,路径53。我不得不去我的域名注册商godaddy,设置DNS条目以利用路由53。一旦DNS被指向AWS托管的区域DNS主机,我就不必再回到godaddy了


我已经做了四五天了,所以我的头还是有点发晕。我最初启动应用程序时遵循的方向是。

“Elastic Beanstalk只不过是为您管理EC2实例的服务。”我不清楚这一部分。根据描述,我认为Elastic Beanstalk会获取我的JAR文件并“只需部署它”;如果它需要在幕后创建一个EC2实例,我想它会对我隐瞒这一点。我已经广泛使用了S3内容的静态网站服务,在这种情况下,AWS隐藏了所有虚拟机和HTTP服务器实现细节;我想在这里也一样。我现在正在阅读官方的开发者指南,也许这会变得更清晰。它不会对你隐瞒任何事情。它为您创建的EC2实例和负载平衡器将显示在您的EC2控制台中。不过,您不必登录到这些服务器并执行任何管理任务。Elastic Beanstalk可以为您处理所有这些。这很有帮助,但正如我想象的那样,有很多与SSL相关的问题无法自动处理,而且信息很难处理。目前我正在尝试将HTTP重定向到HTTPS。每个Elastic Beanstalk应用程序/环境是否都有自己独立的应用程序负载平衡器?我如何判断哪个负载平衡器用于某个环境?我是否必须在EC2部分的负载平衡器中添加HTTP->HTTPS规则?为什么我不能在Elastic Beanstalk负载平衡器配置部分指定此规则?是否有更简单的方法重定向所有HTTP->HTTPS f