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

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

目次

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

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

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

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

Found a mistake? Update the entry.
Share this article: