Elastic Beanstalk允许在AWS云中部署和办理运用程序,而不用了解运转这些运用程序的基础设施。
经过Elastic Beanstalk,你能够运转一个网站、网络运用程序或供给HTTP恳求的网络API,但你也能够运转一个作业程序来运转长任务。Elastic Beanstalk支撑几个预装备的平台,包含Go
、.NET
或Java
(仅适用于Java 8),但也支撑通用的Docker
平台。
你只需用AWS CLI
、AWS EB CLI
,或用Elastic Beanstack console
,上传你的运用程序,Elastic Beanstalk会主动处理剩余的事情。
在这篇博文中,你将学习如安在Elastic Beanstalk上用根据Quarkus的运用程序启动单容器Docker
环境:
留意:这篇博客并没有描述从头开始创立运用程序。相反,它是根据Quarkus宠物诊所的REST API运用,该运用是我为开始运用Quarkus博文而创立的。源代码能够在Github上找到: https://github.com/kolorobot/quarkus-petclinic-api
-
TL;DR:创立包并上传到Elastic Beanstalk
- 在Elastic Beanstalk控制台创立新的运用程序
- 预先准备好运用程序包
- 上传运用程序到Elastic Beanstalk
-
一步一步来。为Elastic Beanstalk装备运用程序
- 运转时装备
Dockerfile
-
用Maven创立运用程序包
- 为程序集准备文件
- 装备程序集插件
- 在本地测验程序包
- 源代码
- 参考文献
- 也请拜见
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 Clinic API
- 关于
Platform
,挑选Docker
- 关于
Application Code
,挑选Sample Application
- 挑选
Configure more options
- 在列表中找到
Database
,然后点击Modify
- 关于
Engine
,挑选postgres
- 关于
Engine version
,挑选11.6
- 设置你挑选的
username
和password
- 关于
Retention
,假如你不创立snaphost,就挑选Delete
。 - 点击
Save
。
- 在列表中找到
- 点击
Create app
Elastic Beanstalk将为你创立具有一切必要资源(包含RDS)的示例运用程序。
一旦运用程序创立完结,你就能够看到该运用程序的链接:
留意:以上步骤是根据官方文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html
准备运用程序包
- 克隆资源库
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控制台上传软件包
- 导航到console.aws.amazon.com/elasticbean…
- 导航到运用程序仪表板
- 点击
Upload and Deploy
- 挑选上一步创立的包,然后点击
Deploy
- 等候运用程序被部署
就这样了。鄙人一段中,你将学习怎么运用Maven准备软件包。
一步一步来:为Elastic Beanstalk装备运用程序
运转时装备
让咱们从Elastic Beanstalk环境的特定运用装备开始。
Quarkus供给了几个选项,能够在运转时掩盖特点。我决定运用将装备文件放在config/application.properties
文件中的办法。这个文件会被Quarkus主动读取,而且这个文件的一切特点都优先于默认值。
创立src/main/resources/application-eb.properties
文件,并将quarkus.http.port
设为5000
,由于这是Elastic Beanstalk网络运用的默认端口。
接下来的特点与数据源装备有关,由于运用程序将衔接到RDS(PostgreSQL)。在Elastic Beanstalk上运转的运用程序能够经过RDS_*
环境特点获得RDS实例的衔接信息,该特点对运转中的容器可用。要运用它,请设置以下特点:
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
描述符,指示汇编插件创立一个包含Dockerfile
、config/application.properties
和 Quarkusuber-jar
的zip
。一切这三个文件都将坐落存档的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>
这样就完结了装备,现在你能够经过运转创立包(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
参考资料
- docs.aws.amazon.com/elasticbean…
- docs.aws.amazon.com/elasticbean…
- quarkus.io/guides/conf…
另见
- 开始运用Quarkus
- 运用Testcontainers和PostgreSQL进行Quarkus测验