在这篇博文中,我将告诉你如何使用Terraform将一个简单的Quarkus应用程序手动部署到Azure,这要感谢NubesGen。
这篇博文包括哪些内容?
为了更详细地介绍,本篇博文将涉及以下几个主题:
- 什么是Terraform?
- 什么是NubesGen?
- 生成一个基本的QuarkusREST端点。
- 将Quarkus应用程序打包成Uber-JAR。
- 使用NubesGen为一个简单的Quarkus应用程序生成Terraform配置文件。
- 使用Azure Maven插件,将Quarkus应用手动部署到Azure。
- 通过Web控制台和Azure CLI检查在Azure上部署的应用程序。
使用案例
这篇博文的目标是关注Terraform、Azure和NubesGen。 因此,我们的想法是使用Quarkus开发一个非常简单的REST端点,说你好(又是一个你好的世界)。然后我们将这个REST端点打包成Uber-JAR,并通过Terraform和Azure Maven插件将其部署在Azure上。


将REST端点打包成Uber-JAR并部署到Azure上
前提条件
要编写代码并执行代码样本,你需要在你的机器上安装以下工具:
- 一个IDE、JDK 11和Maven(如果你愿意,Quarkus也支持Gradle)
- Azure CLI(
brew install azure-cli在Mac上安装) - Terraform CLI(
brew install hashicorp/tap/terraformon Mac) - 有一个Azure订阅
- cURL
什么是Terraform?
但在我们开始编码之前,让我介绍一下Terraform。Terraform是一个用GO编写的开源工具,用于配置和管理基础设施。这可以在不同的云供应商上进行,但也可以在企业内部进行。
正如其网站上所说,Terraform是一个基础设施即代码(IaC)的工具,用于*"安全和有效地建立、改变、版本和销毁基础设施"。*其理念是用代码定义你的基础设施是什么样子,让Terraform为你自动提供这个基础设施。在Terraform文件中,你描述你的整体拓扑结构(网络、安全组角色、虚拟机、负载均衡器等),让Terraform来创建它。如果你的应用程序的拓扑结构随着时间的推移而发生变化(例如,你添加了防火墙、DNS、CDN等),Terraform会计算延迟,并只创建/销毁/更新已经改变的内容。
这些Terraform文件是用HashiCorp配置语言(HCL)编写的,它是人类可读的,看起来像JSON和YAML的混合物(但它也可以用纯JSON表达)。用代码来声明你的基础设施的好处是,你可以很容易地阅读它,改变它,将它存储在你的应用代码中,并对它进行版本管理,等等。
Terraform工作流程
为了能够配置你的基础设施,Terraform要经过一个特定的工作流程:


Terraform工作流程
该工作流程的不同步骤如下:
- 启动。初始化代码并下载配置文件中提到的要求(如Azure供应商)。
- 计划。审查已部署的基础设施和将要部署的基础设施之间的变化。基本上,Terraform向云提供商检查目前正在运行的内容,因此它可以获得基础设施的最新情况。然后,它找出它需要做的事情,将实际运行的内容与我们希望运行的内容*(理想状态*)进行协调。
- 应用。对真实的基础设施进行修改,使其从正在运行的状态变成期望的状态。
- 销毁。销毁基础设施。
Terraform架构
Terraform的优势之一是它的生态系统。基本上,你可以在大多数云计算供应商或企业内部创建任何类型的资源。为什么呢?因为Terraform使用了一个扩展机制,供应商可以建立他们的扩展(例如,Azure供应商允许你创建几个Azure资源)。


Terraform架构
Terraform架构由一个核心和几个供应商组成:
- 核心。核心是处理我们刚才看到的工作流生命周期的。它接收配置文件,计算需要创建/更新/销毁的内容......然后将这些任务委托给提供者。
- 提供者的集合。有许多提供者。IaaS(可以是AWS、Azure、GCP等云提供商,也可以是Open Stack、VM Ware等内部提供商),PaaS(Heroku、Kubernetes等),以及SaaS(DataDog、Fastly、Github Teams等)。
Terraform和Azure
Terraform可以跨多个云供应商配置基础设施。这只是这个云提供商提供正确的Terraform模块的问题。下面是一个Terraform配置文件,其中声明了Azure提供商(azurerm):
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 2.56"
}
}
}
provider "azurerm" {
features {}
}
什么是NubesGen?
有几种方法可以将Java应用程序手动部署到Azure。你可以使用Azure命令行、Azure管理控制台或Maven Azure插件。但你需要先创建基础设施(安全角色、存储、配置DNS等)。这时Terraform就能派上用场了。
但是,根据基础设施的复杂性,编写Terraform配置文件可能很麻烦。这时NubesGen就变得非常方便:我们可以使用NubesGen为我们生成Terraform文件。
NubesGen是一个开源项目,于2021年启动。它可以让你为Azure(谁知道呢,也许将来还能为其他云供应商)生成Terraform配置文件(也许将来还有Pulumi和Bicep)。这些配置文件可以通过NubesGen的网页界面或cURL命令来生成。
为了了解NubesGen的运行情况,让我们启动一个简单的Quarkus应用程序并生成一些Terraform配置文件。
生成一个简单的Quarkus应用程序
首先,让我们生成一个简单的Quarkus应用程序。为了简单起见,我们将启动一个应用程序,暴露一个REST端点,返回*"Hello NubesGen with Terraform"。*没有太多花哨的东西,但这使我们能够专注于部署,而不是业务代码。
引导Quarkus应用程序
要想轻松引导Quarkus应用,你可以去code.quarkus.io或者使用以下Maven命令。
$ mvn -U io.quarkus:quarkus-maven-plugin:create \
-DprojectGroupId=org.agoncal.article \
-DprojectArtifactId=quarkus-nubesgen-terraform \
-DpackageName="org.agoncal.article.nubesgen.terraform" \
-Dextensions="quarkus-resteasy"
这将创建一个Maven结构,包含所有需要的Quarkus配置以及一些生成的业务代码。事实上,一旦生成,整个项目就全部设置完毕,可以运行和测试。你可以使用以下命令来执行Quarkus,测试应用程序并调用REST端点。
$ mvn quarkus:dev
$ mvn test
$ curl http://localhost:8080/hello
更新生成的代码
让我们改变生成的代码,使我们的REST端点返回Hello NubesGen与Terraform的时间戳:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello NubesGen with Terraform " + Instant.now();
}
}
如果我们想让测试通过,只需改变RESTAssured测试就可以了:
@QuarkusTest
public class GreetingResourceTest {
@Test
public void testHelloEndpoint() {
given()
.when().get("/hello")
.then()
.statusCode(200)
.body(startsWith("Hello NubesGen"));
}
}
业务代码已经足够了,是时候打包和部署应用程序了。
打包应用程序
Quarkus有不同的方式来打包应用程序:Docker镜像、本地二进制(感谢GraalVM)或可执行的JAR。事实上,它还允许你在几种JAR格式中选择,但这是另一个话题。让我们把应用程序打包成一个可执行的Uber-JAR。它的部署很简单,而且便于携带。要构建Uber-JAR,执行以下命令:
$ mvn package -Dquarkus.package.type=uber-jar
作为一种选择,你也可以在application.properties (quarkus.package.type=uber-jar)中设置属性,这样你就不必把它传到命令行中,只需执行mvn package 。
在target 目录中,你最终会得到两个JAR文件。.jar.original 文件是由Maven自动打包的文件,不可执行(它只是一个包含我们代码的JAR文件)。另一个文件(-runner.jar )有12MB,是可执行的。这就是我们要部署的那个:
$ ll target/
-rw-r--r-- 12M quarkus-nubesgen-terraform-1.0.0-SNAPSHOT-runner.jar
-rw-r--r-- 6.3K quarkus-nubesgen-terraform-1.0.0-SNAPSHOT.jar.original
执行打包后的应用程序
现在我们已经建立了可执行的JAR,运行应用程序只是一个执行的问题:
$ java -jar target/quarkus-nubesgen-terraform-1.0.0-SNAPSHOT-runner.jar
一旦Quarkus启动并运行,执行以下cURL命令,你应该看到我们的Hello NubesGen与Terraform:
$ curl http://localhost:8080/hello
Hello NubesGen with Terraform 2021-07-07T14:21:54.314396Z
用NubesGen生成Terraform配置文件
我们有一个简单的应用程序,没有数据库,没有认证,什么都没有,被打包在一个可执行的Uber-JAR中。让我们要求NubesGen生成Terraform配置文件,以便我们能够创建所需的Azure基础设施。为此,我们可以使用NubesGen网站或cURL命令。
使用网站生成
如果你决定从NubesGen网站上生成Terraform配置文件,你需要手动选择你的基础设施所需要的东西。在我们的例子中,你需要给项目取一个名字(例如:quarkus-nubesgen-terraform ),选择一个区域,并从组合框中选择Quarkus。然后你可以指定应用程序是否需要一个关系型数据库、Redis缓存或MongoDB。在我们的例子中,我们不需要任何东西,只要不勾选这些复选框就可以了。
点击下载配置文件,这将下载一个包含生成的Terraform文件的压缩文件,你可以将其添加到你的项目根目录中。


使用NubesGen网站生成Terraform文件
用cURL命令生成
如果像我一样,你喜欢用命令行,NubesGen允许你通过cURL命令下载这些配置文件。如果你点击或复制cURL脚本,你会得到以下cURL命令。
$ curl "https://nubesgen.com/quarkus-nubesgen-terraform.tgz?iactool=TERRAFORM®ion=northeurope&application=APP_SERVICE.free&runtime=QUARKUS&database=NONE.free" | tar -xzvf -
这个命令的参数与网站相同。第一个参数是项目名称(这里是quarkus-nubesgen-terraform ),然后是你要部署的地区(这里是北欧),Azure计划(免费),运行时间(在我们的例子中是Quarkus),我们没有数据库。
在你项目的根部执行这个命令,你将得到一组生成的文件。
生成的文件
在我们Quarkus项目的根部,NubesGens已经在一个叫做terraform 的目录下生成了一组Terraform文件。在这个目录下,尽管有README.md 和.gitignore 文件,但所有的文件都有 Terraform 的后缀tf 。这些文件是
main.tf:包含一个模块的主要配置集。variables.tf:包含一个模块的变量定义。outputs.tf:包含一个模块的输出定义。
这些文件可以在terraform 目录的根部找到,但也可以在modules/app-service 目录下找到。


生成的Terraform文件目录结构
基本上,在terraform 目录的根部,这些文件用于定义需要的提供者(在我们的例子中是Azure),并聚合其他Terraform文件。在子目录modules ,你会发现我们基础设施的所有需要的模块(应用程序、数据库等)。在我们的案例中,我们只有一个Quarkus应用程序,所以它被配置在app-service 目录下。
根部Terraform文件
在根目录下,main.tf 文件以声明Azure提供商开始。这很重要,因为我们需要Terraform在Azure上创建我们的基础设施:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 2.56"
}
}
}
provider "azurerm" {
features {}
}
然后,main.tf 文件聚合了所有其他模块。在我们的案例中,我们只有一个应用程序,这就是为什么main.tf 只包括./modules/app-service 下的模块:
module "application" {
source = "./modules/app-service"
resource_group = azurerm_resource_group.main.name
application_name = local.application_name
environment = local.environment
location = var.location
}
variables.tf 文件定义了我们基础设施所需的变量。在这里我们定义了我们的Quarkus应用程序的名称quarkus-nubesgen-terraform :
variable "application_name" {
type = string
description = "The name of your application"
default = "quarkus-nubesgen-terraform"
}
应用程序 Terraform 文件
在modules 目录下,还有一个叫做app-service 的子目录。这就是我们对Quarkus应用程序本身进行配置的地方。例如,这个文件设置了HTTPs,Java的版本(这里是11),或者Quarkus的监听端口:
resource "azurerm_app_service" "application" {
name = "app-${var.application_name}-001"
resource_group_name = var.resource_group
location = var.location
app_service_plan_id = azurerm_app_service_plan.application.id
https_only = true
tags = {
"environment" = var.environment
}
site_config {
linux_fx_version = "JAVA|11-java11"
always_on = false
use_32_bit_worker_process = true
ftps_state = "FtpsOnly"
}
app_settings = {
"WEBSITES_ENABLE_APP_SERVICE_STORAGE" = "false"
# These are app specific environment variables
"QUARKUS_HTTP_PORT" = 80
"QUARKUS_PROFILE" = "prod"
}
}
执行Terraform配置文件
感谢NubesGen,我们有了所有需要的Terraform文件来配置我们的基础设施来运行我们的REST端点。是时候执行Terraform了。有几种方法,但我将使用Terraform CLI,并逐步进行,以便你了解幕后发生的事情。
初始化配置
首先,我们来初始化Terraform的配置文件。为此,你需要在terraform 的根目录下,执行terraform init 。
terraform$ terraform init
Initializing modules...
- application in modules/app-service
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/azurerm versions matching ">= 2.56.0"...
- Installing hashicorp/azurerm v2.66.0...
- Installed hashicorp/azurerm v2.66.0 (signed by HashiCorp)
Terraform has been successfully initialized!
在初始化阶段,Terraform创建了一个带有生成文件的.terraform 目录,例如modules.json 或.terraform.lock.hcl 文件。但它也会下载配置所需的GO可执行文件(这里是terraform-provider-azurerm_v2.66.0_x5 可执行文件):


生成的临时文件
你还可以用validate 命令检查配置是否有效,用show 命令显示执行计划的状态:
terraform$ terraform validate
Success! The configuration is valid.
terraform$ terraform show
No state.
如果你安装了GraphViz,你甚至可以用graph命令生成一个执行计划的可视化表示:
terraform$ terraform graph
terraform$ terraform graph | dot -Tpng > graph.png
视觉方面看起来像这样:


执行计划的图形表示
登录到Azure
如果这时,你没有登录到Azure,想定义计划(用terraform plan ),你会得到以下错误。
terraform$ terraform plan
│ Error: Error building AzureRM Client: obtain subscription() from Azure CLI: Error parsing json result from the Azure CLI: Error waiting for the Azure CLI: exit status 1: ERROR: Please run 'az login' to set up account.
这是因为你需要登录到Azure。你可以用以下Azure CLI命令轻松登录:
terraform$ az login
You have logged in.
terraform$ az account show
{
"environmentName": "AzureCloud",
"homeTenantId": "1234-abcd",
"id": "abcd-1234",
"isDefault": true,
"managedByTenants": [],
"state": "Enabled",
"tenantId": "1234-abcd",
"user": {
"name": "my.email@gmail.com",
"type": "user"
}
}
计划执行
是时候计划执行了。plan 命令显示了当前配置所需的更改。执行计划还没有执行,这个命令只是显示了如果你决定执行该计划将执行的内容:
terraform$ terraform plan
Terraform will perform the following actions:
# azurerm_resource_group.main will be created
# module.application.azurerm_app_service.application will be created
# module.application.azurerm_app_service_plan.application will be created
Plan: 3 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ application_hostname = (known after apply)
+ resource_group = "rg-quarkus-nubesgen-terraform-001"
日志显示,从目前部署的内容(在我们的例子中还没有什么)和我们在Terraform文件中定义的内容来看,将做三个改变:
- 创建一个Azure主组。
- 创建应用服务。
- 为应用程序创建计划。
是时候执行这个计划了!
应用执行计划
如果我们同意准备好的更改(由plan 命令显示),我们需要用apply 命令来应用它们。这个命令需要一点时间,因为它需要与Azure沟通,以创建所需的资源:
terraform$ terraform apply
azurerm_resource_group.main: Creating...
azurerm_resource_group.main: Creation complete after 0s [id=/subscriptions/1234-abcd/resourceGroups/rg-quarkus-nubesgen-terraform-001]
module.application.azurerm_app_service_plan.application: Creating...
module.application.azurerm_app_service_plan.application: Creation complete after 19s [id=/subscriptions/1234-abcd/resourceGroups/rg-quarkus-nubesgen-terraform-001/providers/Microsoft.Web/serverfarms/plan-quarkus-nubesgen-terraform-001] module.application.azurerm_app_service.application: Creating...
module.application.azurerm_app_service.application: Creation complete after 30s [id=/subscriptions/1234-abcd/resourceGroups/rg-quarkus-nubesgen-terraform-001/providers/Microsoft.Web/sites/app-quarkus-nubesgen-terraform-001]
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:
application_hostname = "https://app-quarkus-nubesgen-terraform-001.azurewebsites.net"
resource_group = "rg-quarkus-nubesgen-terraform-001"
正如你所看到的,该方法apply ,显示了两个非常重要的信息:我们可以针对我们的应用程序的URL和Azure资源组。下面会有更多介绍。
在运行apply ,你可以执行terraform show ,它将显示执行计划。另一方面,如果Terraform发现基础设施已经创建,不需要更新,你会得到一个信息,如:
terraform$ terraform apply
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
application_hostname = "https://app-quarkus-nubesgen-terraform-001.azurewebsites.net"
resource_group = "rg-quarkus-nubesgen-terraform-001"
酷!"。让我们打开浏览器,指向我们的URL。
$ open https://app-quarkus-nubesgen-terraform-001.azurewebsites.net
这是令人失望的!没有显示Hello NubesGen与Terraform,而是一个网页,告诉我们应用服务已经启动并运行。是的,但是没有我们的应用程序。嗯,那是因为我们需要部署我们的Uber JAR!


还没有部署网络应用程序
手动部署应用程序
多亏了Terraform配置文件,我们的基础设施已经准备好承载我们的Quarkus应用程序。我们只需要部署它。事实上,有几种方法来部署我们的Uber-JAR。但我们还是使用Azure Maven插件来手动部署吧。
配置Azure Maven插件
配置Azure Maven插件有一个非常方便的方法,那就是调用config 目标。当你这样做时,该插件会问你一组问题:
$ mvn com.microsoft.azure:azure-webapp-maven-plugin:2.0.0:config
Auth type: AZURE_CLI
Default subscription: (1234-abcd)
Username: my.email@gmail.com
Java SE Web Apps in subscription:
* 1: <create>
2: app-quarkus-nubesgen-terraform-001 (Linux|Java 11|Java SE)
Please confirm webapp properties
Subscription Id : 1234-abcd
AppName : app-quarkus-nubesgen-terraform-001
ResourceGroup : rg-quarkus-nubesgen-terraform-001
Region : northeurope
PricingTier : F1
OS : Linux
Java : Java 11
Web server stack: Java SE
Deploy to slot : false
Confirm (Y/N) [Y]:
一旦这些问题得到回答,你的pom.xml ,就会自动配置大量的信息。事实上,我们不需要在pom.xml 中设置所有的配置,因为我们的基础设施已经在Terraform配置文件中定义。只需在subscriptionId 、resourceGroup 和appName 中设置即可:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>1234-abcd</subscriptionId>
<resourceGroup>rg-quarkus-nubesgen-terraform-001</resourceGroup>
<appName>app-quarkus-nubesgen-terraform-001</appName>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
使用Azure Maven插件部署Uber-JAR
现在,只需要使用插件来部署我们的Uber-JAR。为此,我们调用了deploy 目标:
$ mvn azure-webapp:deploy
Auth type: AZURE_CLI
Default subscription: (1234-abcd)
Username: my.email@gmail.com
[INFO] Updating target Web App app-quarkus-nubesgen-terraform-001...
[INFO] Successfully updated Web App app-quarkus-nubesgen-terraform-001.
[INFO] Trying to deploy artifact to app-quarkus-nubesgen-terraform-001...
[INFO] Deploying (target/quarkus-nubesgen-terraform-1.0.0-SNAPSHOT-runner.jar)[jar] ...
[INFO] Successfully deployed the artifact to https://app-quarkus-nubesgen-terraform-001.azurewebsites.net
就这样了!看起来应用程序已经部署完毕,让我们来检查一下。
检查在Azure上部署的应用程序
首先,我们需要检查我们的REST端点是否有反应。为此,我们使用计划执行后显示的URL,并添加我们的hello 路径。
$ curl https://app-quarkus-nubesgen-terraform-001.azurewebsites.net/hello
很好!REST端点用Terraform回复了Hello NubesGen,所以它已经启动并运行了。让我们检查一下Azure控制台。
检查Azure控制台
如果你想看看部署了什么,一种方法是进入Azure门户。为此,进入portal.azure.com,检查资源。你应该看到应用程序和计划。


Azure门户
使用Azure CLI进行检查
你也可以使用Azure CLI。有几个命令你可以使用,但webapp list 是信息最多的一个。
$ az webapp list -g rg-quarkus-nubesgen-terraform-001
$ az webapp list -g rg-quarkus-nubesgen-terraform-001 --output table
演进应用程序
基础设施建立起来了,应用程序也部署好了。但正如你所知,事情是不断发展的。如果在未来,应用程序需要一个数据库,那么你需要更新你的基础设施。为此,你要改变Terraform的配置文件,在Azure上应用这些变化,并重新部署你的应用程序。如果基础设施没有变化,那么你只需要重新部署应用程序,就可以了。
重新部署新版本的应用程序
既然Azure Maven插件已经配置好了,重新部署新版本的应用程序就很容易了:修改REST端点的代码,进行编译,重建一个新的Uber-JAR并重新部署。
$ mvn package -Dquarkus.package.type=uber-jar
$ mvn azure-webapp:deploy
$ curl https://app-quarkus-nubesgen-terraform-001.azurewebsites.net/hello
破坏基础设施
如果有一天你需要摆脱整个基础设施,Terraform会帮助你。一个简单的destroy 命令就会浏览所有需要销毁的资源,并将它们逐一删除。
terraform$ terraform destroy
Terraform will perform the following actions:
# azurerm_resource_group.main will be destroyed
# module.application.azurerm_app_service.application will be destroyed
# module.application.azurerm_app_service_plan.application will be destroyed
Plan: 0 to add, 0 to change, 3 to destroy.
Changes to Outputs:
- application_hostname = "https://app-quarkus-nubesgen-terraform-001.azurewebsites.net" -> null
- resource_group = "rg-quarkus-nubesgen-terraform-001" -> null
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value:
module.application.azurerm_app_service.application: Destroying... [id=/subscriptions/1234-abcd/resourceGroups/rg-quarkus-nubesgen-terraform-001/providers/Microsoft.Web/sites/app-quarkus-nubesgen-terraform-001]
module.application.azurerm_app_service_plan.application: Destroying... [id=/subscriptions/1234-abcd/resourceGroups/rg-quarkus-nubesgen-terraform-001/providers/Microsoft.Web/serverfarms/plan-quarkus-nubesgen-terraform-001]
azurerm_resource_group.main: Destroying... [id=/subscriptions/1234-abcd/resourceGroups/rg-quarkus-nubesgen-terraform-001]
azurerm_resource_group.main: Destruction complete after 46s
Destroy complete! Resources: 3 destroyed.
这时,terraform show 命令会显示......什么都没有。你可以使用Azure CLI来检查资源组是否已经被删除。
$ az webapp list -g rg-quarkus-nubesgen-terraform-001
(ResourceGroupNotFound) Resource group 'rg-quarkus-nubesgen-terraform-001' could not be found.
结论
今天,"基础设施即代码"越来越多地被用于项目中。这是一种用代码来定义我们的基础设施的好方法,Terraform是这个领域的主要参与者。但是Terraform可能很棘手。它的语言语法很简单,但它的生态系统很庞大,你需要了解所有的模块和参数来配置你的基础设施。部署到云端,即使是一个简单的Java应用程序,也需要你写几行的配置。编写配置文件容易出错,而且反馈回路需要时间:你改变配置文件,应用它,等待它被应用,意识到有一个错误,改变文件,应用它......这时NubesGen帮助你。
NubesGen只是一个Terraform配置文件的生成器(Pulumi和Bicep计划被支持)。这个项目很年轻,但发展速度很快。它允许你配置Quarkus应用程序的基础设施,以及Spring应用程序,一个简单的Java应用程序,无论是否打包成Docker镜像。你可以为简单的用例生成配置文件(就像我们刚才做的那样),也可以为更复杂的用例,如使用关系型数据库、MongoDB或Redis缓存。顺便说一下,一旦你生成了你的配置文件,你就可以把它们和你的代码一起提交,并按你的要求进行修改。NubesGen只是生成这些文件,然后,它们属于你的项目,你可以让它们不断发展。
如果你打算把你的Java应用部署到Azure,你一定要试一试NubesGen!
顺便说一句。我不知道你怎么想的,但我不希望用Azure Maven插件来部署应用程序,而是希望有一个CI/CD环境来构建我的Quarkus应用程序,并在我提交新版本的代码时自动部署到Azure。也许可以使用GitHub Actions。你有什么看法?但是,这需要创建GitHub Actions的配置文件,我不知道该怎么做。等等,也许NubesGen可以帮忙?是时候写另一篇文章了...
