Go Web アプリを Azure Container Apps にデプロイする
このクイックスタートでは、コンテナー化された Go Web アプリを Azure Container Apps にデプロイする方法について説明します。
Azure Container Apps を使用すると、任意のコンテナー内でコード パッケージ化されたアプリケーションを実行できます。複雑なクラウド インフラストラクチャや複雑なコンテナー オーケストレーターを管理したり、ランタイムやプログラミング モデルについて心配したりする必要はありません。 Azure Container Apps の一般的な用途には、API エンドポイントのデプロイ、バックグラウンド処理アプリケーションのホスト、イベントドリブン処理の取り扱い、マイクロサービスの実行があります。
このチュートリアルに従って、Docker イメージの構築、そのイメージの Azure Container Registry へのデプロイ、Azure Container Apps への Go Web アプリのデプロイの手順を確認します。
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Go がインストールされていること: バージョン 1.18 またはそれ以上
- Docker Desktop
セットアップ
CLI から Azure にサインインするには、az login コマンドを実行し、プロンプトに従って認証プロセスを完了します。
az login
az upgrade コマンドを実行して、最新バージョンの CLI を実行していることを確認します。
az upgrade
次に、CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。
Azure CLI で az containerapp
コマンドを実行するときにパラメーターが見つからないというエラーが表示された場合には、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。
az extension add --name containerapp --upgrade
Note
2024 年 5 月以降、Azure CLI 拡張機能では、既定でプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、--allow-preview true
を使用して Container Apps 拡張機能をインストールします。
az extension add --name containerapp --upgrade --allow-preview true
最新の拡張機能またはモジュールがインストールされたので、Microsoft.App
および Microsoft.OperationalInsights
名前空間を登録します。
Note
Azure Container Apps リソースは、Microsoft.Web
名前空間から Microsoft.App
名前空間に移行されました。 詳細については、「2022 年 3 月に Microsoft.Web から Microsoft.App に名前空間を移行する」を参照してください。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
サンプル アプリ をダウンロードする
このチュートリアルを実行するには、コンテナー化するサンプル アプリケーションが必要です。 Go Web アプリのサンプルは、msdocs-go-webapp-quickstart GitHub リポジトリ内に用意されています。 サンプル アプリケーションをダウンロードするか、ローカル ワークステーションに複製します。
git clone https://github.com/Azure-Samples/msdocs-go-webapp-quickstart.git
cd msdocs-go-webapp-quickstart
Azure Container Registry を作成する
Azure Container Registry を使用すると、コンテナー イメージを構築、格納、管理できます。 これを使用して、前に説明したサンプル リポジトリに用意されているサンプル Go Web アプリを含む Docker イメージを格納します。
次のコマンドを実行して、Azure コンテナー レジストリを作成します。
az group create コマンドで Azure リソース グループを作成します。
az group create \ --name <resourceGroupName> \ --location eastus
az acr create コマンドを使用して、Azure Container Registry を作成します。
az acr create \ --resource-group <resourceGroupName> \ --name <azureContainerRegistryName> \ --sku basic
az acr login コマンドを使用して Azure コンテナー インスタンスにサインインします。
az acr login --name <azureContainerRegistryName>
<resourceGroupName>
と <azureContainerRegistryName>
を、適切な値に置き換えます。 Azure Container Registry 名はグローバルに一意である必要があります。
Note
az acr login
コマンドの実行時に次のようなエラーが発生した場合は、docker deamon がシステムで実行されていることを確認します。
You may want to use 'az acr login -n <azureContainerRegistryName> --expose-token' to get an access token, which does not require Docker to be installed.
2024-09-12 17:25:25.127779 An error occurred: DOCKER_COMMAND_ERROR
Docker イメージを構築してプッシュする
Azure Container Registry を作成したら、サンプルの Go Web アプリの Docker イメージを構築してプッシュします。
次のコマンドを実行して、イメージを構築し、レジストリにプッシュします。
az acr show コマンドを使用してサインイン サーバー情報を取得します。
az acr show \ --name <azureContainerRegistryName> \ --resource-group <resourceGroupName> \ --query loginServer \ --output tsv
Docker イメージをローカルでビルドします。
docker build -t <loginServer>/<imageName>:latest .
Docker イメージを Azure Container Registry にプッシュします。
docker push <loginServer>/<imageName>:latest
az acr repository list コマンドを使用して、イメージが Azure Container Registry に正常にプッシュされたことを確認します。
az acr repository list \ --name <azureContainerRegistryName> \ --output table
loginServer
、imageName
、azureContainerRegistryName
を適切な値に置き換えます。 イメージ名は、Azure Container Registry にプッシュされ、後で Azure Container Apps にデプロイするために使用される Docker イメージです。
Azure Container Registry で使用可能なイメージが得られたので、Azure Container App とその環境をデプロイする準備ができました。
Azure Container Apps 環境を作成する
Azure Container Apps にはコンテナー オーケストレーターの複雑さはありませんが、Azure Container Apps 環境が入る、セキュリティで保護された境界を確立するためのなんらかの方法が必要です。 同じ環境にデプロイされたコンテナー アプリは、同じ仮想ネットワークを共有し、同じ Log Analytics ワークスペースにログを書き込みます。 Azure Container App をデプロイする前に、デプロイ先の環境が必要です。
az containerapp env create コマンドを実行して、Azure Container Apps 環境を作成します。
az containerapp env create \ --name <containerAppEnvName> \ --resource-group <resourceGroupName> \ --location "East US"
Azure Container Apps をデプロイする
この時点で、Azure Container Registry の作成、Docker イメージのビルドと Azure Container Registry へのプッシュが終わり、Azure Container Apps 環境が作成されています。 後はアプリケーションをデプロイするだけです。
az containerapp create コマンドを実行して、Go Web アプリを Azure Container Apps にデプロイします。
az containerapp create \
--name <containerAppName> \
--resource-group <resourceGroupName> \
--environment <containerAppEnvName> \
--image "<loginServer>/<imageName>:latest" \
--registry-server "<loginServer>" \
--registry-identity system \
--target-port 8080 \
--ingress external
--registry-identity system
パラメーターは、コンテナー アプリでシステム割り当てマネージド ID を構成します。 コンテナー アプリは、安全性の低いユーザー名/パスワードではなく、この ID を使用してコンテナー レジストリでの認証を行います。 また、このコマンドにより、ID の AcrPull
ロール割り当てが自動的に作成され、レジストリからイメージをプルする権限が付与されます。 認証と承認にマネージド ID を使用するには、レジストリが Azure Container Registry である必要があります。
Web アプリの URL を確認する
az containerapp show コマンドを実行して、Web アプリケーションのイングレスの FQDN (完全修飾ドメイン名) を取得します。
APP_FQDN=$(az containerapp show \
--name <containerAppName> \
--resource-group <resourceGroupName> \
--query properties.configuration.ingress.fqdn \
--output tsv)
次に、FQDN に対して curl コマンドを実行し、Web サイトの HTML が出力に反映されていることを確認します。
curl "https://$APP_FQDN"
リソースをクリーンアップする
サンプル アプリを使い終わったら、Azure からアプリのすべてのリソースを削除できます。 そうすることで、継続的な料金の発生を回避し、Azure サブスクリプションの整合性を維持できます。 リソース グループを削除して、リソース グループ内のすべてのリソースも削除することが、アプリのすべての Azure リソースを削除する最も簡単な方法です。
az group delete コマンドを実行して、リソース グループとそのすべてのリソースを削除します。
az group delete \
--name <resourceGroupName> \
--no-wait