将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

而已。 在下一段中,您将学习如何使用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://www.javacodegeeks.com/2020/03/deploy-quarkus-application-to-aws-elastic-beanstalk.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值