Рубрики
Без рубрики

Веб-приложение Azure для контейнеров 環境で Конфигурация микропрофиля 動作検証

1. Приложение проверки поведения конфигурации МИКРОПРОФИЛЯ в среде Azure Web App for Containers предоставляет информацию о подключении для интеграции с внешними системами… Помечен как java, micro profile, azure.

1. Веб-приложение Azure для контейнеров 環境で Конфигурация микропрофиля 動作検証

Приложение может легко переключать назначение и настройки соединения, отделяя информацию о соединении (БД, внешняя конечная точка HTTP) для связи с внешними системами и различия в настройках среды, таких как среды разработки, тестирования и производства, от исходного кода программы и записывая его во внешний конфигурационный файл. Кроме того, записывая его во внешний конфигурационный файл и т.д., Вам не нужно редактировать или создавать исходный код приложения для переключения назначения, и вы можете использовать тот же исходный код и библиотеку выполнения.

Для создания облачных приложений очень важно оставить информацию о конфигурации позади. “//См. также: Двенадцать факторов из III. Настройки//: Сохранить настройки в переменных среды”

Twelve-Factorは 設定をコードから厳密に分離すること を要求する。

Конфигурация МИКРОПРОФИЛЯ позволяет извлекать информацию о конфигурации из различных местоположений, таких как 。 Эти местоположения конфигурации называются configsources, и если одно и то же свойство определено более чем в одном configSource, вы применяете политику и указываете, какие значения являются допустимыми.

  • Из системных свойств виртуальной машины Java
  • Переменные среды операционной системы
  • Внешний конфигурационный файл (.properties, .From (xml)
  • LDAP, DB, Ключ-Значение Магазин

В некоторых ситуациях может потребоваться динамическое переключение между некоторыми источниками данных.И измененные значения должны использовать обновленное содержимое из программы без необходимости перезапуска приложения.Чтобы удовлетворить эти потребности, microprofile Config позволяет вам использовать настроенные значения сразу после их изменения.

О реализации конфигурации микропрофиля

Конфигурация микропрофиля определяет только API//и не включает реализацию.//реализации конфигурации микропрофиля предоставляются отдельно каждым поставщиком реализации микропрофиля.

Конфигурация микропрофиля:概要

Конфигурация микропрофиля состоит из нескольких API.

API конфигурации микропрофиля 1.4

Конфигурационный источник:優先順位

Конфигурация:、、、、.eclipse.microprofile.config.spi. Он состоит из информации, собранной из configSource. Эти конфигурационные источники сортируются в соответствии с порядком. Это позволяет вам переопределять настройки, которые менее важны извне.

По умолчанию существует 3 источника конфигурации по умолчанию.

  • System.GetProperties()(優先順位)
  • System.getenv()(優先順位= 300)
  • ClassPath上の мета-инф/microprofile-config файл.свойства、各ファイル中に config_ordinal プロパティを設定して個別に優先順位を設定可能)

Значение по умолчанию может быть указано в файле при упаковке приложения, и позже это значение может быть переопределено для каждого развертывания. “Чем выше значение, тем выше приоритет. 」

Пример получения информации о конфигурации

Спецификация конфигурации микропрофиля предоставляет 2 различных способа считывания значений конфигурации.

  • Получение информации о программной конфигурации
  • Получение информации о конфигурации с помощью аннотаций

1. Получение информации о программной конфигурации

В следующем примере показано, как программно получить экземпляр конфигурации и получить информацию о конфигурации.

public class  MyAppWithGetConfigFromProgram {

    public Response invokeMicroserviceWithConfig() {
        // Config インスタンスの取得
        Config config = ConfigProvider.getConfig();
        // マイクロサービス A の URL を取得
        String microserviceA = config.getValue("URL_OF_MICROSERVICE_A", String.class);
        // マイクロサービス A の呼び出し
        return invokeMicroservice(microserviceA);
    }
}

Чтобы получить информацию о конфигурации, сначала Вы должны получить экземпляр Config//. Чтобы получить экземпляр конфигурации программно,//configprovider#getConfig() Вы можете получить его, позвонив по телефону//. (Экземпляр класса Config создается и регистрируется в загрузчике контекстного класса.)

2. Получение информации о конфигурации с помощью аннотаций (рекомендуется)

Пример использования аннотаций для получения экземпляра конфигурации и использования @CONFIGPROPERTY для получения информации о конфигурации показан ниже.

@ApplicationScoped
public class MyAppWithGetConfigFromAnnotation {

    @Inject
    private Config config;

    //The property myprj.some.url must exist in one of the configsources, otherwise a
    //DeploymentException will be thrown.
    @Inject
    @ConfigProperty(name="myprj.some.url")
    private String someUrl;

    //The following code injects an Optional value of myprj.some.port property.
    //Contrary to natively injecting the configured value, this will not lead to a
    //DeploymentException if the value is missing.
    @Inject
    @ConfigProperty(name="myprj.some.port")
    private Optional somePort;
}

Пример приложения Конфигурации МИКРОПРОФИЛЯ

1. Создание образца проекта конфигурации микропрофиля

Откройте microprofile Starter и создайте проект микропрофиля.

Когда вы нажимаете ссылку (СКАЧАТЬ), mpconfigsample.Вы можете скачать zip-файл.Когда вы разворачиваете файл, автоматически создается следующая конфигурация каталога файлов.

.
├── pom.xml
├── readme.md
└── src
    └── main
        ├── java
        │   └── com
        │       └── yoshio3
        │           └── MPConfigSample
        │               ├── HelloController.java
        │               ├── MPConfigSampleRestApplication.java
        │               └── config
        │                   └── ConfigTestController.java
        ├── resources
        │   └── META-INF
        │       └── microprofile-config.properties
        └── webapp
            ├── WEB-INF
            │   └── beans.xml
            └── index.html
11 directories, 8 files

А пример кода для конфигурации микропрофиля находится в configtestcontroller.Это описано в java следующим образом.

package com.yoshio3.MPConfigSample.config;

import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/config")
@RequestScoped
public class ConfigTestController {

    @Inject
    @ConfigProperty(name = "injected.value")
    private String injectedValue;

    @Path("/injected")
    @GET
    public String getInjectedConfigValue() {
        return "Config value as Injected by CDI " + injectedValue;
    }

    @Path("/lookup")
    @GET
    public String getLookupConfigValue() {
        Config config = ConfigProvider.getConfig();
        String value = config.getValue("value", String.class);
        return "Config value from ConfigProvider " + value;
    }
}

В приведенном выше коде это простой код, который возвращает значение, описанное в свойстве, в качестве HTTP-ответа. Если вы вызовете его с помощью метода HTTP GET следующим образом, будет возвращена строка, описанная в инструкции return.

$ curl -X GET http://localhost:8080/data/config/injected
$ curl -X GET http://localhost:8080/data/config/lookup

Фактическая конфигурация находится в microprofile-config.Каталог META_INF.Он указан в файле свойств.

# プロパティ・ファイルの場所
└── src
    └── main
        ├── resources
        │   └── META-INF
        │       └── microprofile-config.properties

По умолчанию заданы следующие свойства.

# プロパティ・ファイルに設定された値
injected.value=Injected value
value=lookup value

2. Создайте и запустите примерный проект

Чтобы проверить конфигурацию микропрофиля, создайте проект и запустите приложение.

# プロジェクトのビルド
$ mvn clean package

# アプリケーションの実行
$ java -jar target/MPConfigSample-microbundle.jar 

......
Payara Micro URLs:
http://192.168.100.7:8080/

'ROOT' REST Endpoints:
GET     /data/application.wadl
GET     /data/config/injected
GET     /data/config/lookup
GET     /data/hello
GET     /openapi/
GET     /openapi/application.wadl
]]
[2020-03-10T22:19:06.610+0900] [] [情報] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583846346610] [levelValue: 800] Payara Micro  5.194 #badassmicrofish (build 327) ready in 32,755 (ms)
[2020-03-10T22:19:33.646+0900] [] [情報] [] [javax.enterprise.system.container.web.com.sun.web.security] [tid: _ThreadID=29 _ThreadName=http-thread-pool::http-listener(1)] [timeMillis: 1583846373646] [levelValue: 800] Context path from ServletContext:  differs from path from bundle: /

После запуска приложения, как описано выше, запустите команду curl, чтобы проверить работу. Если он работает правильно, строка настроек (введенное значение, значение), взятая из файла свойств, будет отображаться, как показано ниже.

# アノテーションで実装されたエンドポイントへの呼び出し
$ curl localhost:8080/data/config/injected
Config value as Injected by CDI Injected value

# プログラムで実装されたエンドポイントへの呼び出し
$ curl localhost:8080/data/config/lookup
Config value from ConfigProvider lookup value

Микропрофиль позволяет переопределять настройки в файле свойств с помощью системных свойств.Затем он устанавливает переменную среды, присваивает значение переменной среды свойству Java system и выполняет его.Вы можете использовать microprofile-config.Вы можете переопределить значение, заданное в файле “свойства”, и проверить, отображается ли значение, заданное в переменной окружения.

# 環境変数の設定 [.(ドット)を _(アンダーバー)に置き換えて設定]
$ export injected_value="Environment Value"

# 環境変数を Java のシステム・プロパティに設定してアプリを実行
$ java -D"$injected_value" -jar target/MPConfigSample-microbundle.jar

# アプリケーションの動作確認
$ curl http://localhost:8080/data/config/injected
Config value as Injected by CDI Environment Value

Примечание: В файле свойств. (Точка) Хотя это описано в обозначении, переменные среды могут быть изменены в зависимости от операционной системы. Обозначение (точка) недоступно.Итак, в настройке переменной окружения. Замените обозначение (точка) на _ (нижняя строка) и установите его.Он автоматически преобразуется внутри реализации.

3. Выполняется в локальной среде Docker

Теперь, когда приложение запущено в локальной среде, мы запустим microprofile в локальной среде Docker.Чтобы создать образ контейнера Docker от Payara Micro, создайте файл Dockerfile следующим образом:

FROM payara/micro:5.201

USER payara
WORKDIR ${PAYARA_HOME}

# Deploy Artifact
COPY ./target/MPConfigSample.war $DEPLOY_DIR

CMD ["--nocluster","--deploymentDir", "/opt/payara/deployments", "--contextroot", "app"]

Далее мы используем этот файл Dockerfile для создания образа контейнера.Запустите команду docker build, чтобы создать образ контейнера.

$ docker build -t tyoshio2002/payara-config-sample:1.0 .

# コマンド実行時のコンソール出力例
Sending build context to Docker daemon  151.2MB
Step 1/5 : FROM payara/micro:5.201
5.201: Pulling from payara/micro
050382585609: Already exists 
59f5185426ac: Already exists 
4d95208cd9c0: Pull complete 
c1409397cf71: Pull complete 
Digest: sha256:3ff92627d0d9b67454ee241cc7d5f2e485e46db81a886c87cf16035df7c80cc8
Status: Downloaded newer image for payara/micro:5.201
 ---> a11a548b0a25
Step 2/5 : USER payara
 ---> Running in cb755e484e79
Removing intermediate container cb755e484e79
 ---> 564283252ae4
Step 3/5 : WORKDIR ${PAYARA_HOME}
 ---> Running in f26dd5cd172c
Removing intermediate container f26dd5cd172c
 ---> f2bf88b18a77
Step 4/5 : COPY ./target/MPConfigSample.war $DEPLOY_DIR
 ---> 1b54373fe95a
Step 5/5 : CMD ["--nocluster","--deploymentDir", "/opt/payara/deployments", "--contextroot", "app"]
 ---> Running in 3eb731eb77c3
Removing intermediate container 3eb731eb77c3
 ---> 1d11549e99b8
Successfully built 1d11549e99b8
Successfully tagged tyoshio2002/payara-config-sample:1.0

После создания образа контейнера контейнер запускается.Выполните следующую команду, чтобы запустить контейнер.

$ docker run -p 8080:8080 -e injected_value=hogehoge -it tyoshio2002/payara-config-sample:1.0

# コマンド実行時のコンソール出力例
..... (中略)
[2020-03-11T07:46:59.119+0000] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583912819119] [levelValue: 800] [[ 
{
    "Instance Configuration": {
        "Host": "3877abb54d57",
        "Http Port(s)": "8080",
        "Https Port(s)": "",
        "Instance Name": "payara-micro",
        "Instance Group": "no-cluster",
        "Deployed": [
            {
                "Name": "MPConfigSample",
                "Type": "war",
                "Context Root": "/app"
            }
        ]
    }
}]]
[2020-03-11T07:46:59.131+0000] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583912819131] [levelValue: 800] [[
Payara Micro URLs:
http://3877abb54d57:8080/app
'MPConfigSample' REST Endpoints:
GET /app/data/application.wadl
GET /app/data/config/injected
GET /app/data/config/lookup
GET /app/data/hello
]]
[2020-03-11T07:46:59.131+0000] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583912819131] [levelValue: 800] Payara Micro  5.201 #badassmicrofish (build 512) ready in 31,286 (ms)

Теперь, когда вы запустили контейнер, подключитесь к приложению, запущенному в контейнере. На этот раз, поскольку порт 8080 внутри контейнера сопоставляется с локальным портом 8080 при запуске, вы можете подключиться к приложению контейнера, получив доступ к порту 8080 локальной среды 。 Выполните следующую команду.

$ curl http://localhost:8080/app/data/config/injected
Config value as Injected by CDI hogehoge

Поскольку вы указываете переменную окружения (//-e//) в качестве аргумента при запуске контейнера, будет отображаться строка, введенная вами при запуске.

4. Веб-приложение Azure для Выполняется в среде контейнеров

Поскольку я смог проверить работу в локальной среде Docker, я проверю работу в Web App для контейнеров environment.Проверьте работу в соответствии со следующей процедурой.

  1. Создайте группу ресурсов для реестра контейнеров Azure
  2. Реестр контейнеров Azure を作 を作
  3. Azure Container Registry Реестр контейнеров Azure//
  4. Войдите в реестр контейнеров Azure и нажмите на изображение
  5. Проверьте изображение, загруженное в реестр контейнеров Azure
  6. Создайте группу ресурсов для веб-приложения для контейнеров// Создайте план AppService для веб-приложения для контейнеров//
  7. コンナ-メーージしを指定 |/Веб・приложение для контейнеров//を作 を作 Проверьте работу развернутого приложения
  8. Добавить настройки приложения для веб-приложения для контейнеров// Проверьте работу приложения после изменения настроек

4.1. Создайте группу ресурсов для реестра контейнеров Azure

Прежде всего, Создайте реестр контейнеров Azure и загрузите изображение локально созданного Docker container.So , создайте группу ресурсов для создания реестра контейнеров Azure 。

$ az group create --name WebApp-Containers --location "Japan East"
{
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers",
  "location": "japaneast",
  "managedBy": null,
  "name": "WebApp-Containers",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

4.2. Реестр контейнеров Azure を作成

次に、Azure Container Registry Реестр контейнеров。

  • — имя Укажите имя реестра контейнера в
  • -Укажите -resource-group в качестве имени группы ресурсов, созданной выше
  • –артикул указывает один из “Базовых”, “Стандартных” или “Премиум”.
  • -Установите для параметра -admin・enabled значение true, чтобы разрешить команде docker доступ к реестру контейнеров
$ az acr create --name containerreg4yoshio --resource-group WebApp-Containers --sku Basic --admin-enabled true
{
  "adminUserEnabled": true,
  "creationDate": "2020-03-12T02:27:59.357654+00:00",
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers/providers/Microsoft.ContainerRegistry/registries/containerreg4yoshio",
  "location": "japaneast",
  "loginServer": "containerreg4yoshio.azurecr.io",
  "name": "containerreg4yoshio",
  "networkRuleSet": null,
  "policies": {
    "quarantinePolicy": {
      "status": "disabled"
    },
    "retentionPolicy": {
      "days": 7,
      "lastUpdatedTime": "2020-03-12T02:28:01.654662+00:00",
      "status": "disabled"
    },
    "trustPolicy": {
      "status": "disabled",
      "type": "Notary"
    }
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "WebApp-Containers",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

4.3. Реестр контейнеров Azure (Azure Container Registry )

Затем проверьте пароль для подключения к реестру контейнеров Azure.

  • — имя Укажите имя реестра контейнера в
  • -Укажите -resource-group в качестве имени группы ресурсов, созданной выше
$ az acr credential show --name containerreg4yoshio --resource-group WebApp-Containers
{
  "passwords": [
    {
      "name": "password",
      "value": "4zaIiLk*************+H1XO4AlYFvN"
    },
    {
      "name": "password2",
      "value": "fT03XPs*************Oq2cAZiVHV+L"
    }
  ],
  "username": "containerreg4yoshio"
}

4.4. Войдите в реестр контейнеров Azure и нажмите на изображение

Затем выполните команду docker login для подключения к реестру контейнеров Azure. (Для получения пароля, пожалуйста, введите пароль, полученный выше.))

Когда вход в систему будет завершен, используйте команду docker tag, чтобы пометить изображение.Добавьте имя “LoginServer” реестра контейнера к имени образа контейнера Docker, созданного вами локально (например, “LoginServer”).containerreg4yoshio.azurecr.io Пометьте его добавленным вами именем (“”).

Наконец, запустите команду docker push, чтобы поместить изображение в реестр контейнеров Azure.

# Azure Container Registry にログイン
$ docker login containerreg4yoshio.azurecr.io -u containerreg4yoshio
Password: 
Login Succeeded

# Docker コンテナのタグ付け
$ docker tag tyoshio2002/payara-config-sample:1.0 containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0

# Azure Container Registry にタグ付けしたイメージを Push
$ docker push containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0

The push refers to repository [containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample]
bbd197848553: Pushed 
ec40a5d738cc: Pushed 
f95fe3528c56: Pushed 
bded2364df91: Pushed 
1bfeebd65323: Pushed 
1.0: digest: sha256:689dbacc212d37afe09c43417bc79d8e241c3fa7b5cf71c27097ef535cf77f76 size: 1368

4.5. Реестр контейнеров Azure Проверьте изображение, на которое вы нажали

Убедитесь, что изображение правильно загружается в реестр контейнеров Azure.

$ az acr repository list -n containerreg4yoshio -g WebApp-Containers
Argument 'resource_group_name' has been deprecated and will be removed in a future release.
[
  "tyoshio2002/payara-config-sample"
]

$ az acr repository show-tags --name containerreg4yoshio  --repository tyoshio2002/payara-config-sample
[
  "1.0"
]

4.6. Создайте группу ресурсов для веб-приложения для контейнеров

Контейнер Azure Теперь, когда вы создали реестр, создайте веб-приложение для контейнеров.Сначала вы создаете группу ресурсов, для которой хотите создать веб-приложение для контейнеров.

$ az group create --name WebApp --location "Japan East"
{
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp",
  "location": "japaneast",
  "managedBy": null,
  "name": "WebApp",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

4.7. Создание плана AppService для веб-приложения для контейнеров

Затем, для Linux Создайте план AppService.На этот раз артикул использует B1 для подтверждения операции в среде проверки, но, пожалуйста, выберите его соответствующим образом в соответствии со средой.

  • -Укажите имя плана AppService для -name
  • -Укажите -resource-group в качестве имени группы ресурсов, созданной выше
  • –артикул に F1, B1, P1V2, P2V2, P3V2, I1, I2, Укажите соответствующий артикул (единица учета запасов), например, машину, которую вы хотите запустить, например I3, и цену
  • –is-linux определяет построение в среде Linux.
$ az appservice plan create --name webapp4container --resource-group WebApp --sku B1 --is-linux
{
  "freeOfferExpirationTime": "2020-04-11T02:38:56.873333",
  "geoRegion": "Japan East",
  "hostingEnvironmentProfile": null,
  "hyperV": false,
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp/providers/Microsoft.Web/serverfarms/webapp4container",
  "isSpot": false,
  "isXenon": false,
  "kind": "linux",
  "location": "Japan East",
  "maximumElasticWorkerCount": 1,
  "maximumNumberOfWorkers": 3,
  "name": "webapp4container",
  "numberOfSites": 0,
  "perSiteScaling": false,
  "provisioningState": "Succeeded",
  "reserved": true,
  "resourceGroup": "WebApp",
  "sku": {
    "capabilities": null,
    "capacity": 1,
    "family": "B",
    "locations": null,
    "name": "B1",
    "size": "B1",
    "skuCapacity": null,
    "tier": "Basic"
  },
  "spotExpirationTime": null,
  "status": "Ready",
  "subscription": "f77aafe8-****-****-****-d0c37687ef70",
  "tags": null,
  "targetWorkerCount": 0,
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
}

4.8. コンナナ・Веб-приложение для контейнеров を作成

次に、Azure контейнер реестра に толчок したイメージを利用して веб-приложение для контейнеров。を作成します

  • –название に Веб-приложение для контейнеров
  • -Укажите -resource-group в качестве имени группы ресурсов, созданной выше
  • –Укажите имя плана AppService, которое вы создали выше в plan
  • -Укажите -deployment-container-image-name в качестве имени образа, который вы отправили в реестр контейнеров Azure.
$ az webapp create --resource-group WebApp \ 
                               --plan webapp4container \
                               --name yoshiowebapp \
                               --deployment-container-image-name containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0

No credential was provided to access Azure Container Registry. Trying to look up...
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "clientCertExclusionPaths": null,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "yoshiowebapp.azurewebsites.net",
  "enabled": true,
  "enabledHostNames": [
    "yoshiowebapp.azurewebsites.net",
    "yoshiowebapp.scm.azurewebsites.net"
  ],
  "ftpPublishingUrl": "ftp://waws-prod-ty1-***.ftp.azurewebsites.windows.net/site/wwwroot",
  "geoDistributions": null,
  "hostNameSslStates": [
    {
      "hostType": "Standard",
      "ipBasedSslResult": null,
      "ipBasedSslState": "NotConfigured",
      "name": "yoshiowebapp.azurewebsites.net",
      "sslState": "Disabled",
      "thumbprint": null,
      "toUpdate": null,
      "toUpdateIpBasedSsl": null,
      "virtualIp": null
    },
    {
      "hostType": "Repository",
      "ipBasedSslResult": null,
      "ipBasedSslState": "NotConfigured",
      "name": "yoshiowebapp.scm.azurewebsites.net",
      "sslState": "Disabled",
      "thumbprint": null,
      "toUpdate": null,
      "toUpdateIpBasedSsl": null,
      "virtualIp": null
    }
  ],
  "hostNames": [
    "yoshiowebapp.azurewebsites.net"
  ],
  "hostNamesDisabled": false,
  "hostingEnvironmentProfile": null,
  "httpsOnly": false,
  "hyperV": false,
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp/providers/Microsoft.Web/sites/yoshiowebapp",
  "identity": null,
  "inProgressOperationId": null,
  "isDefaultContainer": null,
  "isXenon": false,
  "kind": "app,linux,container",
  "lastModifiedTimeUtc": "2020-03-12T02:39:50.356666",
  "location": "Japan East",
  "maxNumberOfWorkers": null,
  "name": "yoshiowebapp",
  "outboundIpAddresses": "13.**.***.96,13.**.**.49,13.**.**.66,13.**.**.140,13.**.**.186",
  "possibleOutboundIpAddresses": "13.**.**.96,13.**.**.49,13.**.**.66,13.**.**.140,13.**.**.186,13.**.**.30,13.**.**.70,13.**.**.101,13.**.**.163,13.**.**.200",
  "redundancyMode": "None",
  "repositorySiteName": "yoshiowebapp",
  "reserved": true,
  "resourceGroup": "WebApp",
  "scmSiteAlsoStopped": false,
  "serverFarmId": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp/providers/Microsoft.Web/serverfarms/webapp4container",
  "siteConfig": null,
  "slotSwapStatus": null,
  "state": "Running",
  "suspendedTill": null,
  "tags": null,
  "targetSwapSlot": null,
  "trafficManagerHostNames": null,
  "type": "Microsoft.Web/sites",
  "usageState": "Normal"
}

4.9. Проверьте работу развернутого приложения

После создания веб-приложения для контейнеров откройте конечную точку веб-приложения для контейнеров, чтобы убедиться, что приложение работает правильно. Здесь, поскольку вы не установили переменную окружения, вы увидите значение, которое вы установили в свойстве (введенное значение).

$ curl https://yoshiowebapp.azurewebsites.net/app/data/config/injected
Config value as Injected by CDI Injected value

4.10. Веб-приложение для контейнеров Добавить настройки приложения для

Затем добавьте настройки приложения в конфигурацию веб-приложения и установите injected_value в строку “Значение из настройки серверного приложения”.

$ az webapp config appsettings set --resource-group WebApp --name yoshiowebapp --settings injected_value="Value from Server App Setting"
[
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "false"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_URL",
    "slotSetting": false,
    "value": "containerreg4yoshio.azurecr.io/tyoshio2002"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_USERNAME",
    "slotSetting": false,
    "value": "containerreg4yoshio"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
    "slotSetting": false,
    "value": null
  },
  {
    "name": "WEBSITES_PORT",
    "slotSetting": false,
    "value": "8080"
  },
  {
    "name": "injected_value",
    "slotSetting": false,
    "value": "Value from Server App Setting"
  }
]

4.11. Проверьте работу приложения после изменения настроек

Наконец, убедитесь, что настройки, которые вы добавили в настройках приложения, отражены.

$ curl https://yoshiowebapp.azurewebsites.net/app/data/config/injected
Config value as Injected by CDI Value from Server App Setting

После установки 4.10 выше конфигурация будет перезапущена внутренне, и конфигурация будет отражена без необходимости явного перезапуска контейнера

Теперь, когда у вас есть приложение, использующее конфигурацию microprofile, вы можете запустить его в среде Azure Web App for Containers.Кроме того, я смог прочитать настройки приложения (внешние настройки) веб-приложения для контейнеров в приложении.

Оригинал: “https://dev.to/azure/azure-web-app-for-containers-microprofile-config-2a23”