【问题标题】:Variable substitution in Java App Engine 11 project's app.yamlJava App Engine 11 项目的 app.yaml 中的变量替换
【发布时间】:2021-11-27 02:37:45
【问题描述】:

我们有几个 Java App Engine 标准项目,我正在 Spring Boot 上从 App Engine 8 迁移到 App Engine 11。他们中的许多人在他们的appengine-web.xml 文件中使用vpc-access-connector,我们在maven-war-plugin 期间使用资源过滤注入了该文件。配置应用引擎的新方法是使用 src/main/appengine/app.yaml 文件和 jar 而不是战争作为工件,但是我无法确定如何将变量替换到 app.yaml 文件中。我试过包括这是我的 maven 部分,但它不起作用:

<resources>
  <resource>
    <directory>src/main/appengine</directory>
    <filtering>true</filtering>
  </resource>
</resources>

我需要根据正在运行的 Maven 配置文件注入不同的值。我们目前在配置文件中的 maven 属性部分定义 vpc 访问连接器值,这些值与我们的每个部署环境的 spring 配置文件一致,例如 test、ea 和 prod。

这里有什么解决办法?

有什么方法可以根据调用的配置文件使用不同的 app.yaml 文件吗? (这不是最好的解决方案,因为这意味着大部分文件内容将是静态副本,尽管常见的东西可以移动到包含的 yaml 中。)

或者是否有一些我无法在线找到的语法允许我设置环境变量或 maven 属性并从 src/main/appengine/app.yaml 文件中引用它?

感谢您的帮助!

汤姆·哈里斯

【问题讨论】:

  • 您可以在app.yaml 文件上添加env_variables: SPRING_PROFILES_ACTIVE: "gcp",然后在PRD 上将看到application-gcp.properties 上的所有值
  • 据我所知,vpc 访问连接器需要在 app.yaml 文件中,而不是在 spring 属性文件中。
  • 嗨,OP。让我们知道答案是否有帮助。如果它有用,请考虑支持它。如果它回答了你的问题,那么请接受它。这样其他人就知道你已经(充分地)得到了帮助。另见What should I do when someone answers my question?

标签: java maven google-app-engine java-11 app.yaml


【解决方案1】:

此功能不存在,但有一种方法可以实现您想要的输出。

YAML 是一种标准格式,包含许多用于读写的库。它也是一个文本文件,因此一个简单的解决方案可以简单地复制一个模板并将任何您想要的占位符替换为适当的值。

话虽如此,我尝试创建一个示例应用程序以将我定义的值注入到 maven 配置文件中。

  1. pom.xmlbuild 下添加您的“资源”代码sn-p 后,我在pom.xml 文件中添加了profiles
<profiles>
    <profile>
        <id>Test_ID</id>
        <properties>
            <appengine.vpc-access-connector>
                projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
            </appengine.vpc-access-connector>
        </properties>
    </profile>
</profiles> 
  1. 在“/src/main/appengine/app.yaml”下的app.yaml 文件下,我做了以下操作:
vpc_access_connector: 
  name: "${appengine.vpc-access-connector}"
  egress_setting: all-traffic
  1. 最后,我尝试使用Maven Filtering 命令运行它:$ mvn resources:resources -P Test_ID,并在“/target/classes/app.yaml”下获得了一个新的app.yaml 文件,该文件具有以下输出:
vpc_access_connector: 
  name: "projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME"
  egress_setting: all-traffic

对于 deploying 生成的 app.yaml 文件,运行文档中也包含的以下命令:gcloud app deploy --appyaml=target/classes/app.yaml

还有一个可用的指南来进一步了解您的migrating options to Java App Engine 11

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 2020-09-01
    • 2020-12-19
    • 2021-08-12
    • 1970-01-01
    • 2019-06-06
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多