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

**目次**
<!-- 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}"
```

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

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

```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
```
