APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azure Container Apps に爆速でアプリをデプロイする

はじめに

こんにちは、ACS事業部の吉川です。
本記事はQiitaのAzure Advent Calendar 2022の9日目の記事です。(既に10日になっているって?なんのことやら…)

qiita.com

タイトルにあるように、Azure Container Appsにアプリを爆速でデプロイする 手法をご紹介します。

実践

サンプルアプリとして以下の2ファイルを準備しました。

app.js

const express = require('express')
const app = express()
const port = process.env.PORT || 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening at ${port}`)
})

package.json

{
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

ルートパスにアクセスすると Hello World! とレスポンスを返すだけの単純なNode.jsアプリです。
これを以下のように1つのディレクトリに配置します。

.
├── app.js
└── package.json

ではAzure Container Appsにデプロイしましょう。
以下のコマンドを実行します。

az containerapp up -n testapp \
  --source . \
  --ingress external --target-port 3000

以上で完了です。 あとはコマンドが終了するまで待ちましょう。
完了時に表示されるメッセージの中に、

Browse to your container app at: http://testapp.nicecoast-hogefuga.canadacentral.azurecontainerapps.io

といった形でURLが表示されます。ここにブラウザでアクセスしてみると…
アプリが動いてますね!

コマンドの動き

az containerapp up を実行すると、内部的には以下のような処理が動きます。

  • リソースグループを作成する
  • Container Apps環境とLog Analyticsワークスペースを作成する
  • Azure Container Registry(ACR)を作成する
  • コンテナイメージのビルドタスクをACR内に作成する
  • ビルドタスクでコンテナイメージを作成し、ACRにPushする
  • ACRにPushされたイメージを基にContainer Appsを作成する

事前にAzure上のリソースを作ることなく、コマンドひとつで全て作成してくれます。

Dockerfileレス

前項で用意したアプリケーションファイルに Dockerfileが含まれていない ことにお気づきでしょうか。
Dockerfileなしでどうやってコンテナイメージを作っているのか、ACRのビルドタスクを見てみましょう。

steps:
  - cmd: mcr.microsoft.com/oryx/cli:20220811.1 oryx dockerfile --bind-port 3000 --output ./Dockerfile .
    timeout: 28800
  - build: -t $Registry/testapp:20221210043425270338 -f Dockerfile .
    timeout: 28800
  - push: ["$Registry/testapp:20221210043425270338"]
    timeout: 1800

ステップの1つ目で実行しているコマンドでDockerfileを生成しています。
ここに Oryx というビルドツールを利用しています。App Serviceの中でも利用されているツールです。

github.com

はじめてコンテナアプリを作成する場合、「Dockerfileよくわかんない」という方もいらっしゃるかと思います。
その作成の手間を省くことができるというのは便利なポイントかと思います。

なお、az containerapp up コマンドが対応している言語は以下のとおりです。

  • .NET
  • Node.js
  • PHP
  • Python
  • Ruby
  • Go

learn.microsoft.com

おわりに

開発したアプリを即座にAzure上にデプロイできるコマンドの紹介でした。
本番を見据えた環境にはちょっと使いづらいですが、デモ的にさっと動かす程度であれば便利に使えると思います。
Dockerfile書かなくてもいい、という点で入門にもおススメです。

私達ACS事業部はAzure・AKSを活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
切磋琢磨しながらスキルを向上できる、エンジニアには良い環境だと思います。ご興味を持っていただけたら嬉しく思います。

www.ap-com.co.jp

本記事の投稿者: 吉川 俊甫
AKS/ACAをメインにインフラ系のご支援を担当しています。 Shunsuke Yoshikawa - Credly