将Quarkus应用程序部署到AWS Elastic Beanstalk

Elastic Beanstalk允许在AWS云中部署和管理应用程序,而无需了解运行这些应用程序的基础架构。

使用Elastic Beanstalk,您可以运行可处理HTTP请求的网站,Web应用程序或Web API,但也可以运行辅助应用程序以运行长任务。 Elastic Beanstalk支持多个预配置平台,包括Go.NETJava (仅Java 8),也支持通用Docker平台。

您只需使用AWS CLIAWS EB CLIElastic Beanstack console上传应用程序,然后Elastic Beanstalk即可自动处理其余部分。

在此博客文章中,您将学习如何在Elastic Beanstalk上使用基于Quarkus的应用程序启动单容器Docker环境。

注意:此博客没有描述从头开始创建应用程序。 相反,它基于我为Quarkus入门博客文章创建的Quarkus Pet Clinic REST API应用程序 。 可以在Github上找到源代码: https : //github.com/kolorobot/quarkus-petclinic-api

TL; DR:创建软件包并上传到Elastic Beanstalk

在Elastic Beanstalk控制台中创建新的应用程序

如果您还不是AWS客户,则需要创建一个AWS账户。 通过注册,您可以访问Elastic Beanstalk和其他所需的AWS服务。

  • 使用以下链接打开Elastic Beanstalk控制台: https ://us-west-2.console.aws.amazon.com/elasticbeanstalk/home?region=us-west-2#/gettingStarted?applicationName =Pet诊所API
  • 对于Platform选择Docker
  • 对于Application Code选择Sample Application
  • 选择Configure more options
    • 在列表中找到Database ,然后单击Modify
  • 点击Create app

Elastic Beanstalk将使用所有必需的资源(包括RDS)为您创建示例应用程序。

创建应用程序后,您将可以看到该应用程序的链接。

注意:以上步骤基于官方文档: https : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html

Preapare应用程序包

  • 克隆存储库
 git clone https: //github.com/kolorobot/quarkus-petclinic-api 
  • 导航到应用程序目录并执行:
 ./mvnw clean package assembly:single -Dquarkus. package .uber-jar= true 

上面的命令创建具有以下内容的软件包:

 $ unzip -l target/quarkus-petclinic-api- 1.0 . 1 -eb.zip  Archive: target/quarkus-petclinic-api- 1.0 . 1 -eb.zip Length     Date   Time   Name  --------- ---------- -----  ---- 0 03 - 15 - 2020 13 : 35 config/ 2059 03 - 15 - 2020 13 : 34 Dockerfile 369 03 - 15 - 2020 13 : 34 config/application.properties 38604205 03 - 15 - 2020 13 : 35 quarkus-petclinic-api- 1.0 . 1 -runner.jar  ---------                    ------- 38606633 4 files 

将应用程序上传到Elastic Beanstalk

  • 使用Elastic Beanstalk控制台上传软件包
    • 导航到https://console.aws.amazon.com/elasticbeanstalk

而已。 在下一段中,您将学习如何使用Maven准备软件包。

循序渐进:为Elastic Beanstalk配置应用程序

运行时配置

让我们从特定于Elastic Beanstalk环境的应用程序配置开始。

Quarkus提供了几种在运行时覆盖属性的选项。 我决定将这种方法与配置文件一起放在config/application.properties文件中。 Quarkus将自动读取该文件,并且该文件中的所有属性都优先于默认值。

创建src/main/resources/application-eb.properties文件,并将quarkus.http.port设置为5000因为这是Elastic Beanstalk Web应用程序的默认端口。

随着应用程序将连接到RDS(PostgreSQL),下一个属性与数据源配置有关。 RDS实例的连接信息可通过运行容器可用的RDS_*环境属性提供给在Elastic Beanstalk上运行的应用程序。 要使用此属性,请设置以下属性:

 quarkus.datasource.url=jdbc:postgresql: //${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}  quarkus.datasource.username=${RDS_USERNAME}  quarkus.datasource.password=${RDS_PASSWORD} 

阅读有关将应用程序连接到RDS的更多信息: https : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html

Dockerfile

Elastic Beanstalk使用Dockerfile构建和运行映像。 该文件必须位于应用程序目录的root目录中。 我使用了原始的src/main/docker/Dockerfile.jvm并进行了以下调整:

  • config/application.properties复制到容器
  • 暴露端口5000而不是8080

完整的src/main/docker/Dockerfile.eb

 FROM registry.access.redhat.com/ubi8/ubi-minimal: 8.1  ARG JAVA_PACKAGE=java- 11 -openjdk-headless  ARG RUN_JAVA_VERSION= 1.3 . 5  ENV LANG= 'en_US.UTF-8' LANGUAGE= 'en_US:en'  # Install java and the run-java script  # Also set up permissions for user ` 1001 `  RUN microdnf install openssl curl ca-certificates ${JAVA_PACKAGE} \ && microdnf update \ && microdnf clean all \ && mkdir /deployments \ && chown 1001 /deployments \ && chmod "g+rwX" /deployments \ && chown 1001 :root /deployments \ && curl https: //repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \ && chown 1001 /deployments/run-java.sh \ && chmod 540 /deployments/run-java.sh \ && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security  ENV JAVA_OPTIONS= "-Djava.util.logging.manager=org.jboss.logmanager.LogManager"  COPY *-runner.jar /deployments/app.jar  COPY config /deployments/config  EXPOSE 5000  USER 1001  ENTRYPOINT [ "/deployments/run-java.sh" ] 

使用Maven创建应用程序包

到目前为止,已创建以下两个文件:

  • src/main/resources/application-eb.properties具有特定于Elastic Beanstalk环境的属性
  • src/main/docker/Dockerfile.eb具有用于Elastic Beanstack环境的容器配置。

要完成配置和配置程序包组装,我们将使用“ Copy Rename Maven Plugin和“ Maven Assembly Plugin

准备组装文件

修改pom.xml并添加复制和重命名将存储在最终应用程序包zip文件中的文件的目标:

 < build > < plugin > < groupId >com.coderplus.maven.plugins</ groupId > < artifactId >copy-rename-maven-plugin</ artifactId > < version >1.0</ version > < executions > < execution > < id >copy-file</ id > < phase >package</ phase > < goals > < goal >copy</ goal > </ goals > < configuration > < fileSets > < fileSet > < sourceFile >src/main/resources/application-eb.properties</ sourceFile > < destinationFile >target/eb/application.properties</ destinationFile > </ fileSet > < fileSet > < sourceFile >src/main/docker/Dockerfile.eb</ sourceFile > < destinationFile >target/eb/Dockerfile</ destinationFile > </ fileSet > </ fileSets > </ configuration > </ execution > </ executions > </ plugin >  </ build > 

copy-file目标将在package阶段运行,并将先前创建的文件(名称已调整)复制到target/eb

配置程序集插件

Maven Assembly Plugin将用于创建应用程序包。 将以下配置添加到pom.xml

 < build > < plugin > < artifactId >maven-assembly-plugin</ artifactId > < version >3.2.0</ version > < configuration > < descriptors > < descriptor >src/assembly/eb.xml</ descriptor > </ descriptors > </ configuration > </ plugin >  </ build > 

现在,创建src/assembly/eb.xml指示所述组件插件来创建一个描述符zip含有Dockerfileconfig/application.properties和Quarkus uber-jar 。 所有这三个文件将位于存档的root中:

 < assembly > < id >eb</ id > < formats > < format >zip</ format > </ formats > < includeBaseDirectory >false</ includeBaseDirectory > < files > < file > < source >target/eb/Dockerfile</ source > < outputDirectory ></ outputDirectory > < filtered >false</ filtered > </ file > < file > < source >target/eb/application.properties</ source > < outputDirectory >config</ outputDirectory > < filtered >false</ filtered > </ file > < file > < source >target/${project.build.finalName}-runner.jar</ source > < outputDirectory ></ outputDirectory > < filtered >false</ filtered > </ file > </ files >  </ assembly > 

这样就完成了配置。 现在,您可以通过运行以下命令创建包(程序集):

经过以上所有更改,我们可以创建程序包:

 ./mvnw clean package assembly:single -Dquarkus. package .uber-jar= true 

在本地测试软件包

要在本地测试包,请运行:

 unzip target/quarkus-petclinic-api- 1.0 . 1 -eb.zip -d target/eb-dist && cd target/eb-dist  docker build -t quarkus/petclinic-api-jvm-eb . 

在运行容器之前,请启动数据库:

 docker run -it --name petclinic-db -p 5432 : 5432 -e POSTGRES_DB=petclinic -e POSTGRES_USER=petclinic -e POSTGRES_PASSWORD=petclinic -d postgres: 11.6 -alpine 

运行传递RDS环境变量的应用程序并链接到数据库容器:

 docker run -i --rm -p 8080 : 5000 --link petclinic-db -e RDS_HOSTNAME=petclinic-db -e RDS_PORT= 5432 -e RDS_DB_NAME=petclinic -e RDS_USERNAME=petclinic -e RDS_PASSWORD=petclinic quarkus/petclinic-api-jvm-eb 

在浏览器中打开http://localhost:8080 ,您应该会看到主页。

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/quarkus-petclinic-api

参考文献

  • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/single-container-docker.html
  • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html
  • https://quarkus.io/guides/config#package-and-run-the-application

也可以看看

  • Quarkus入门
  • 使用Testcontainers和PostgreSQL进行Quarkus测试

翻译自: https://www.javacodegeeks.com/2020/03/deploy-quarkus-application-to-aws-elastic-beanstalk.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中rand()%900,c语言 n=rand()%5是什么意思

rand()函数会产生范围为0至32767的随机数&#xff0c;% 让它与5求余&#xff0c;变成0至4的随机数&#xff0c;不过每次启动程序产生的随机数都相等&#xff0c;在用srand(unsigned int)输入种子数后产生的才不一样&#xff0c;一般都用的 srand((unsigned int)time(NULL)) 产生…

gradle 构建应用流程_使用Gradle构建和应用AST转换

gradle 构建应用流程最近&#xff0c;我想在Gradle项目中构建并应用本地ast转换。 虽然我可以找到几个有关如何编写转换的示例&#xff0c;但找不到完整的示例来显示完整的构建过程。 转换必须单独编译然后放在类路径中&#xff0c;因此其源代码不能简单地放在Groovy源代码树的…

c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现

任何一个对C稍稍有了解的人都知道malloc、calloc、free。前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间&#xff0c;然后可以通过free释放&#xff0c;但是&#xff0c;同时也会有很多人对其背后的实现机制不了解。这篇文章则是通过介绍这三个函数&#xff0c;并简单…

在雅加达EE TCK中使用Arquillian的可能方法

最近&#xff0c;我们讨论了如何创建独立的Jakarta Batch测试套件&#xff08;TCK&#xff09;。 对于大多数提交者而言&#xff0c;使用Arquillian将测试从实现中如何执行抽象化是很自然的。 但是Romain提出了一个有趣的想法&#xff0c;即使用纯JUnit5引起了我的思考。 它并没…

c语言怎么循环输入单个字符,c语言 帮我检查一下 输入一段文字,每行用回车结束,文字输入完毕可以使用某个特殊字符作为结束,...

c语言 帮我检查一下 输入一段文字&#xff0c;每行用回车结束&#xff0c;文字输入完毕可以使用某个特殊字符作为结束&#xff0c;0HIDE152019.04.28浏览4次分享举报c语言输入一段文字&#xff0c;每行用回车结束&#xff0c;文字输入完毕可以使用某个特殊字符作为结束&#xf…

gradle发布jar_使用Gradle将JAR工件发布到Artifactory

gradle发布jar因此&#xff0c;我浪费了一两天&#xff08;只是投资&#xff09;来了解如何使用Gradle将JAR发布到本地运行的Artifactory服务器。 我使用Gradle Artifactory插件进行发布。 我迷失在无穷循环中&#xff0c;包括各种版本的各种插件和执行各种任务。 是的&#xf…

c++语言 自己构造函数 成员对象构造函数 调用顺序,C++类成员构造函数和析构函数顺序示例详细讲解...

对象并不是突然建立起来的&#xff0c;创建对象必须时必须同时创建父类以及包含于其中的对象。C遵循如下的创建顺序&#xff1a;(1)如果某个类具体基类&#xff0c;执行基类的默认构造函数。(2)类的非静态数据成员&#xff0c;按照声明的顺序创建。(3)执行该类的构造函数。即构…

最新的20多个JMS面试问答(2020)

快速浏览JMS&#xff08;Java消息服务&#xff09;常见问题面试问题和答案。 2020年以来的最新问题已添加到列表中。 1.简介 在本教程中&#xff0c;我们将了解2020年常见的JMS面试问题。作为面试的一部分&#xff0c;如果您有6年以上的经验&#xff0c;就有机会在JMS领域提出…

【学习笔记】SAR相关概念

文章目录 1. 基础SAR—复数据转换—多视处理—自适应滤波—地理编码—斜地距转换—地形辐射校正—转DB影像 2. SAR 平差—自动匹配—区域网平差—几何精校正—镶嵌线编辑 3.干涉 SAR(InSAR/DInSAR)—配准—干涉图计算—基线计算—去除平地相位—相干性计算—干涉图滤波—相位解…

c语言逆序输出6A8F,【C语言】将二进制数逆序输出。比如6为000...0110,逆序后为0110....

//将二进制数逆序输出。比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;int bit;unsigned new_num 0;for (i 0; i//将二进制数逆序输出。比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;in…

加载dll api_运行时类加载以支持不断变化的API

加载dll api我维护一个IntelliJ插件 &#xff0c;可以改善编写Spock规范的体验。 这个项目的挑战是在单个代码库中支持多个且不兼容的IntelliJ API版本。 回想起来&#xff0c;该解决方案很简单&#xff08;这是野外适配器模式的一个示例&#xff09;&#xff0c;但是最初它需要…

12生肖 c语言设计,语言十二生肖教案

十二生肖中班教案十二生肖教案反思语言教案十二生肖点击进入查看全文2010虎年运势测算&#xff0c;走好运&#xff0c;发大财&#xff01;宝宝三个月&#xff0c;来说一说之前购买的海量的婴儿用品的使用况(配合图片)&#xff0c;大家可以都来讨论一下吧。太败了&#xff0c;之…

Quarkus的其他(非标准)CDI功能

Quarkus支持CDI&#xff08;上下文和依赖注入&#xff09;2.0&#xff0c;但并非全部&#xff0c;仅支持最常见的功能。 但是&#xff0c;Quarkus确实包含一些非标准功能&#xff0c;这些功能对于开发人员非常方便&#xff0c;我想在下面的视频中进行展示。 不管您是否熟悉CDI…

c语言输出星期几的英语表达,C语言程序设计: 输入年月日 然后输出是星期几...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include main(){int year,month,day0,a,b,week,c,i,sum0,days,d;printf("please input year,month,days\n");scanf("%d,%d,%d",&year,&month,&days);for(i1;i{if (year%40){if(year%1000){if (ye…

将Visual Studio Code设置为jshell中的默认编辑器

Java Shell&#xff08; jshell &#xff09;是用于在Java中学习和进行原型制作的交互式工具。 它是在Java 9中引入的&#xff0c;从那以后&#xff0c;我在演示过程中偶尔使用它来进行一些快速原型制作&#xff0c;或者只是为了验证Java语言中的新功能。 由于jshell是命令行工…

c语言中组合函数,排列组合c怎么算 公式是什么

排列有两种定义&#xff0c;但计算方法只有一种&#xff0c;凡是符合这两种定义的都用这种方法计算。定义的前提条件是m≦n&#xff0c;m与n均为自然数。下面介绍排列组合c的计算方法及公式&#xff0c;供参考。排列组合中A和C怎么算排列A(n,m)n(n-1).(n-m1)n!/(n-m)!(n为下标,…

使用Spring WebFlux构建反应性REST API –第1部分

在本文中&#xff0c;我们将看到如何使用Spring WebFlux构建响应式REST API。 在进入反应式API之前&#xff0c;让我们看看系统是如何发展的&#xff0c;传统REST实现遇到的问题以及现代API的需求。 如果您查看从旧版系统到下文所述的现代系统的期望&#xff0c; 现代系统的期…

c语言中大写a对应的数字,123456789a

大写数字网今天精心准备的是《123456789a》&#xff0c;下面是详解&#xff01;html里&#xff0c;怎么把&#xff1c;a&#xff1e;123456789&#xff1c;&#xff0f;a&#xff1e;弄到中间来例如把a标签的字移到中间来&#xff1c;a123456789&#xff1e;&#xff1c;&#…

gradle引入依赖:_Gradle善良:获得更多的依赖性见解

gradle引入依赖:在我们的大多数项目中&#xff0c;我们都依赖于其他代码&#xff0c;例如库或其他项目。 Gradle有一个不错的DSL来定义依赖关系。 依赖性在依赖性配置中分组。 这些配置可以自己创建&#xff0c;也可以通过插件添加。 一旦定义了依赖关系&#xff0c;我们就可以…

android popupwindow 调用方法,Android PopUpWindow使用详解

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;一、概述1、PopupWindow与AlertDialog的区别最关键的区别是AlertDialog不能指定显示位置&#xff0c;只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以指定显示位置…