warning
この記事は2年以上前に更新されたものです。情報が古くなっている可能性があります。

Cloud Native BuildpacksでビルドしたOCIイメージ(making/hello-cnb)をAzure Container Instancesにデプロイします。

目次

Resource Group作成

export TENANT_ID=****
export CLIENT_ID=****
export CLIENT_SECRET=****
export LOCATION="Japan East"
export RESOURCE_GROUP=hello-cnb

az login --username ${CLIENT_ID} \
         --password ${CLIENT_SECRET} \
         --service-principal \
         --tenant ${TENANT_ID} 

az group create --name ${RESOURCE_GROUP} --location "${LOCATION}"

アプリケーションのデプロイ

次のコマンドでアプリケーションをデプロイします。

az container create \
  --resource-group ${RESOURCE_GROUP} \
  --name hello-cnb \
  --image making/hello-cnb:latest \
  --dns-name-label hello-cnb \
  --memory 0.7 \
  --ports 8080 \
  --environment-variables INFO_MESSAGE="Hello World\!"

az container logsのコマンドでログを確認します。

$ az container logs --resource-group ${RESOURCE_GROUP} --name hello-cnb 

Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=88833K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx82758K (Head Room: 0%, Loaded Class Count: 13270, Thread Count: 250, Total Memory: 699998208)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.6.RELEASE)

2020-04-28 18:19:29.983  INFO 1 --- [           main] hello.HelloCnbApplication                : Starting HelloCnbApplication on wk-caas-dbc4020958ba43c294a3f7278673934d-f2fcf56149c6687cb75cd7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2020-04-28 18:19:29.993  INFO 1 --- [           main] hello.HelloCnbApplication                : No active profile set, falling back to default profiles: default
2020-04-28 18:19:33.550  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-04-28 18:19:34.458  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080
2020-04-28 18:19:34.469  INFO 1 --- [           main] hello.HelloCnbApplication                : Started HelloCnbApplication in 5.405 seconds (JVM running for 6.505)

指定したコンテナのメモリに合わせて、JVMのメモリが自動で設定されていることに注目してください。

コンテナのDNS名を変数に設定します。

DNS_NAME=$(az container show --resource-group ${RESOURCE_GROUP} --name hello-cnb --query ipAddress.fqdn --output tsv)
$ curl http://${DNS_NAME}:8080/actuator/health -w '\n'
{"status":"UP"}

$ curl http://${DNS_NAME}:8080/actuator/info -w '\n'
{"message":"Hello World!"}

メモリの調整

Buildpackに含まれるJava Buildpack Memory Calculatorの機能を使って、
自動設定されるJVMのメモリを調整し、少ないメモリ量(200MB)で起動できるようにします。

次のコマンドでアプリケーションをアップデートします。

az container delete --resource-group ${RESOURCE_GROUP} --name hello-cnb --yes
az container create \
  --resource-group ${RESOURCE_GROUP} \
  --name hello-cnb \
  --image making/hello-cnb:latest \
  --dns-name-label hello-cnb \
  --memory 0.2 \
  --ports 8080 \
  --environment-variables \
    JAVA_OPTS="-XX:ReservedCodeCacheSize=32M -Xss512k" \
    BPL_JVM_THREAD_COUNT=20 \
    BPL_JVM_HEAD_ROOM=5 \
    INFO_MESSAGE="Hello World\!"

Azure Container InstancesでMemoryやCPUの値を変えるにはDelete => Createが必要です(!)

az container logs --resource-group ${RESOURCE_GROUP} --name hello-cnb でメモリの設定が次のように出力されていることを確認してください。

Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=88833K -Xmx43464K (Head Room: 5%, Loaded Class Count: 13270, Thread Count: 20, Total Memory: 199999488)

アプリケーションの削除

次のコマンドでアプリを削除します。

az container delete --resource-group ${RESOURCE_GROUP} --name hello-cnb --yes
az group delete --name ${RESOURCE_GROUP} --yes
Found a mistake? Update the entry.
Share this article: