--- title: Cloud Native Buildpacks Tutorial - 8.4. ┗ Cloud Native BuildpacksでビルドしたOCIイメージをAzure Container Instancesへデプロイ tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "Spring Boot", "Azure Container Instances", "Series"] categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "ACI"] date: 2020-04-28T18:34:53Z updated: 2020-05-11T09:06:06Z --- Cloud Native BuildpacksでビルドしたOCIイメージ([`making/hello-cnb`](https://hub.docker.com/r/making/hello-cnb))を[Azure Container Instances](https://docs.microsoft.com/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}" ``` ### アプリケーションのデプロイ 次のコマンドでアプリケーションをデプロイします。 ```yaml 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](https://github.com/cloudfoundry/java-buildpack-memory-calculator)の機能を使って、 自動設定されるJVMのメモリを調整し、少ないメモリ量(200MB)で起動できるようにします。 次のコマンドでアプリケーションをアップデートします。 ```yaml 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 ```