--- title: Cloud Native Buildpacks Tutorial - 8.5. ┗ Cloud Native BuildpacksでビルドしたOCIイメージをAzure App Serviceへデプロイ tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "Spring Boot", "Azure App Service", "Series"] categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "AzureAppService"] date: 2020-04-29T05:20:57Z updated: 2020-05-11T03:35:40Z --- Cloud Native BuildpacksでビルドしたOCIイメージ([`making/hello-cnb`](https://hub.docker.com/r/making/hello-cnb))を[Azure App Service](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}" ``` ### Service Plan作成 次のコマンドでService Planをデプロイします。 ```yaml az appservice plan create \ --resource-group ${RESOURCE_GROUP} \ --name hello-cnb-plan \ --sku B1 \ --is-linux ``` ### アプリケーションのデプロイ 次のコマンドで`docker-compose.yml`を作成します。 ``` mkdir deploy-to-appservice cd deploy-to-appservice cat <<'EOF' > docker-compose.yml version: '3.3' services: hello-cnb: ports: - 8080:8080 image: making/hello-cnb:latest restart: always environment: INFO_MESSAGE: Hello World! EOF ``` 次のコマンドでアプリケーションをデプロイします。 ```yaml az webapp create \ --resource-group ${RESOURCE_GROUP} \ --plan hello-cnb-plan \ --name hello-cnb \ --multicontainer-config-type compose \ --multicontainer-config-file docker-compose.yml ``` コンテナのDNS名を変数に設定します。 ``` DNS_NAME=$(az webapp show --name ${RESOURCE_GROUP} --resource-group ${RESOURCE_GROUP} --name hello-cnb --query defaultHostName --output tsv) ``` アプリにアクセスします。初回アクセスにすごく時間がかかります... ``` $ curl https://${DNS_NAME}/actuator/health -w '\n' {"status":"UP"} $ curl https://${DNS_NAME}/actuator/info -w '\n' {"message":"Hello World!"} ``` `az webapp log tail`のコマンドでログを確認します。すごく時間がかかります... 次のようなログが出力されます。 ``` $ az webapp log tail --resource-group ${RESOURCE_GROUP} --name hello-cnb 2020-04-29 05:06:21.805 INFO - Starting container for site 2020-04-29 05:06:21.805 INFO - docker run -d -p 6066:8080 --name hello-cnb_hello-cnb_1_50ff53b8 -e WEBSITE_SITE_NAME=hello-cnb -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=hello-cnb.azurewebsites.net -e WEBSITE_INSTANCE_ID=2918a08188b6922e8f91237a3e69a2a1ede53c68eb3b2b08b0e12615910d5a00 -e HTTP_LOGGING_ENABLED=1 making/hello-cnb:latest 2020-04-29 05:08:06.253 INFO - Started multi-container app 2020-04-29 05:08:06.309 INFO - Initiating warmup request to container hello-cnb_hello-cnb_1_50ff53b8 for site hello-cnb 2020-04-29 05:08:06.331 INFO - Container hello-cnb_hello-cnb_1_50ff53b8 for site hello-cnb initialized successfully and is ready to serve requests. 2020-04-29T05:06:36.608019851Z Container memory limit unset. Configuring JVM for 1G container. 2020-04-29T05:06:36.707085407Z Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=88833K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx447742K (Head Room: 0%, Loaded Class Count: 13270, Thread Count: 250, Total Memory: 1073741824) 2020-04-29T05:06:59.357607735Z 2020-04-29T05:06:59.357654735Z . ____ _ __ _ _ 2020-04-29T05:06:59.357662035Z /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ 2020-04-29T05:06:59.357667235Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 2020-04-29T05:06:59.357671835Z \\/ ___)| |_)| | | | | || (_| | ) ) ) ) 2020-04-29T05:06:59.357676335Z ' |____| .__|_| |_|_| |_\__, | / / / / 2020-04-29T05:06:59.357680635Z =========|_|==============|___/=/_/_/_/ 2020-04-29T05:06:59.357685036Z :: Spring Boot :: (v2.2.6.RELEASE) 2020-04-29T05:06:59.357689436Z 2020-04-29T05:07:02.004420287Z 2020-04-29 05:07:01.982 INFO 1 --- [ main] hello.HelloCnbApplication : Starting HelloCnbApplication on 4c26c3493057 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace) 2020-04-29T05:07:02.004492987Z 2020-04-29 05:07:01.994 INFO 1 --- [ main] hello.HelloCnbApplication : No active profile set, falling back to default profiles: default 2020-04-29T05:07:44.148327019Z 2020-04-29 05:07:44.135 INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 3 endpoint(s) beneath base path '/actuator' 2020-04-29T05:08:01.400064423Z 2020-04-29 05:08:01.374 INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8080 2020-04-29T05:08:01.520034093Z 2020-04-29 05:08:01.508 INFO 1 --- [ main] hello.HelloCnbApplication : Started HelloCnbApplication in 68.369 seconds (JVM running for 83.341) ``` Docker起動時にmemoryの指定がされておらず、Memory Calculatorが自動で1GBにフォールバックしています。Dockerが使用するメモリを指定する方法はない...? > `https://hello-cnb.scm.azurewebsites.net/api/logs/docker`にアクセスするとdockerログを参照できるので、こちらでも確認できます。 ### アプリケーションの削除 次のコマンドでアプリを削除します。 ``` az webapp delete --resource-group ${RESOURCE_GROUP} --name hello-cnb az group delete --name ${RESOURCE_GROUP} --yes ``` --- コンテナのメモリ指定方法がわかりませんでした。できないのであればデプロイ先としてAzure App Serviceは適切ではなさそうです。