---
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)にデプロイします。

**目次**
<!-- toc -->

### 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は適切ではなさそうです。
