次の方法で共有


チュートリアル: ソース コードから Azure Container Apps へのビルドとデプロイ

この記事では、任意のプログラミング言語で、コンピューター上のソース コードから Azure Container Apps にアプリケーションをビルドしてデプロイする方法について説明します。

このチュートリアルでは、次のことを行います。

  • 単純な Web アプリケーションを作成します。
  • アプリに関連付けられている Dockerfile を作成します。
  • コンパイル済みのコードからイメージを作成し、コンテナー レジストリにプッシュします。
  • マネージド ID を使用して、コンテナー レジストリに安全にアクセスします。
  • Azure Container Apps にコンテナーをデプロイします。
  • ブラウザーでアプリを表示し、デプロイを確認します。

前提条件

このプロジェクトを完了するには、次の項目が必要です:

要件 手順
Azure アカウント お持ちでない場合は、無料のアカウントを作成してください。 続行するには、Azure サブスクリプションの "共同作成者" または "所有者" のアクセス許可が必要です。

詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
Azure CLI Azure CLI をインストールするか、最新バージョンにアップグレードします。 Azure Developer CLI (azd コマンド) は、Azure CLI から使用できます。

言語の選択によっては、適切なランタイム、SDK、およびその他の依存関係のインストールが必要になる場合もあります。

.NET SDK をインストールします。

ローカル アプリケーションを作成する

次の手順では、Azure Container Apps にデプロイするサンプル アプリケーションをビルドするために必要なコードと依存関係を示します。

Note

表示されている言語以外の別の言語を使用する場合は、次のプロンプトを希望の AI モデルに入力します。

プロンプトを送信する前に、<LANGUAGE> を選択した言語に置き換えます。

Generate the simplest possible "hello world" web server in idiomatic <LANGUAGE>.

Make sure to include any dependencies required for the application to run locally and in production. 
  1. ソース コードを作成して実行します。

    新しい C# プロジェクトを作成します。

    dotnet new webapp --name MyAcaDemo --language C#
    

    MyAcaDemo フォルダーに移動します。

    cd MyAcaDemo
    

    コード エディターで Program.cs を開き、内容を次のコードに置き換えます。

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://*:8080");
                });
    }
    

    このコードを使用して Program クラスを実装すると、Web アプリケーションの基礎が作成されます。 次に、Web ページを応答として返すクラスを作成します。

    同じフォルダーに、Startup.cs という名前の新しいファイルを作成し、次のコードを入力します。

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
    
        public void Configure(IApplicationBuilder app)
        {   
            app.UseRouting();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
    

    Web アプリケーションに要求が行われると、"Hello World!" というテキストが返されます。 ローカル コンピューターでコードが正しく実行されていることを確認するには、リリース構成でプロジェクトをビルドします。

    dotnet build -c Release
    

    次に、アプリケーションを実行して、コードが正しく実装されていることを確認します。

    dotnet run --configuration Release
    

    アプリケーションが期待どおりに動作することを確認したら、ローカル サーバーを停止し、Dockerfile の作成に進んで、アプリを Container Apps にデプロイできます。

  2. MyAcaDemo フォルダーに、Dockerfile という名前のファイルを作成し、次の内容を追加します。

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    COPY . .
    RUN dotnet publish -c Release -o /app/publish
    
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
    WORKDIR /app
    COPY --from=build /app/publish .
    EXPOSE 8080
    ENTRYPOINT ["dotnet", "MyAcaDemo.dll"]
    

    コードと Dockerfile の準備ができたので、アプリを Azure Container Apps にデプロイできます。

Azure リソースを作成する

  1. 次のコマンドを使用して、CLI から Azure にサインインします。 認証プロセスを完了するには、すべてのプロンプトに従ってください。

    az login
    
  2. Azure CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。

    az extension add --name containerapp --upgrade
    

    Note

    az containerapp コマンドを実行するときにパラメーターが見つからないというエラーが表示された場合には、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。

  3. Azure CLI のセットアップが完了したら、一連の環境変数を定義できます。

    次のコマンドを実行する前に、指定された値を確認します。

    場所は米国中部として構成されていますが、必要に応じて最も近い場所に変更できます。

    LOCATION="CentralUS"
    RESOURCE_GROUP="my-demo-group"
    IDENTITY_NAME="my-demo-identity"
    ENVIRONMENT="my-demo-environment"
    REGISTRY_NAME="mydemoregistry$(openssl rand -hex 4)"
    CONTAINER_APP_NAME="my-demo-app"
    

    mydemoregistry$(openssl rand -hex 4) コマンドは、コンテナー レジストリ名として使用するランダムな文字列を生成します。 レジストリ名はグローバルに一意である必要があるため、この文字列はコマンドを正常に実行するのに役立ちます。

  4. コンテナー アプリのデプロイに関連するサービスを整理するためのリソース グループを作成します。

    az group create \
      --name $RESOURCE_GROUP \
      --___location $LOCATION \
      --output none
    
  5. ユーザー割り当てマネージド ID を作成し、次のコマンドを使用してその ID を取得します。

    最初に、マネージド ID を作成します。

    az identity create \
        --name $IDENTITY_NAME \
        --resource-group $RESOURCE_GROUP \
        --output none
    

    次に、後で使用するために ID 識別子を変数に設定します。

    IDENTITY_ID=$(az identity show \
      --name $IDENTITY_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id \
      --output tsv)
    
  6. 次のコマンドを使用して、アプリをホストする Container Apps 環境を作成します。

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --___location $LOCATION \
        --mi-user-assigned $IDENTITY_ID \
        --output none
    
  7. リソース グループに Azure Container Registry (ACR) インスタンスを作成します。 レジストリにはコンテナー イメージが格納されます。

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $REGISTRY_NAME \
      --sku Basic \
      --output none
    
  8. 次のコマンドを使用して、ユーザー割り当てマネージド ID をコンテナー レジストリ インスタンスに割り当てます。

    az acr identity assign \
      --identities $IDENTITY_ID \
      --name $REGISTRY_NAME \
      --resource-group $RESOURCE_GROUP \
      --output none
    

イメージをビルドしてレジストリにプッシュする

次のコマンドを使用して、コンテナー イメージをビルドしてコンテナー レジストリ インスタンスにプッシュします。

az acr build \
    -t $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
    -r $REGISTRY_NAME .

このコマンドは、タグ helloworld をコンテナー イメージに適用します。

コンテナー アプリを作成する

次のコマンドを使用して、コンテナー アプリをデプロイします。

az containerapp create \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT \
  --image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
  --target-port 8080 \
  --ingress external \
  --user-assigned $IDENTITY_ID \
  --registry-identity $IDENTITY_ID \
  --registry-server $REGISTRY_NAME.azurecr.io \
  --query properties.configuration.ingress.fqdn

このコマンドは、コンテナー レジストリからイメージをプルできるように、acrPull ロールをユーザー割り当てマネージド ID に追加します。

次の表で、このコマンドで使用されるパラメーターについて説明します。

パラメーター 価値 説明
name $CONTAINER_APP_NAME コンテナー アプリの名前。
resource-group $RESOURCE_GROUP コンテナー アプリがデプロイされているリソース グループ。
environment $ENVIRONMENT コンテナー アプリが実行される環境。
image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" レジストリ名とタグを含む、デプロイするコンテナー イメージ。
target-port 80 アプリが要求をリッスンしているポートと一致します。
ingress external パブリック インターネットからコンテナー アプリにアクセスできるようにします。
user-assigned $IDENTITY_ID コンテナー アプリのユーザー割り当てマネージド ID。
registry-identity registry-identity コンテナー レジストリへのアクセスに使用される ID。
registry-server $REGISTRY_NAME.azurecr.io コンテナー レジストリのサーバー アドレス。
query properties.configuration.ingress.fqdn アプリの完全修飾ドメイン名 (FQDN) のみに出力をフィルター処理します。

このコマンドが完了すると、新しい Web アプリの URL が返されます。

デプロイの確認

アプリの URL を Web ブラウザーにコピーします。 コンテナー アプリを起動すると、Hello World! が返されます。

アプリケーションに初めてアクセスするため、アプリから応答が返されるまでに少し時間がかかる場合があります。

リソースをクリーンアップする

このチュートリアルで作成した Azure リソースを使用しない場合は、1 つのコマンドで削除できます。 コマンドを実行する前に、このチュートリアル シリーズの次の手順で、コードに変更を加え、Azure でアプリを更新する方法を示します。

このチュートリアルで作成したすべての Azure リソースを削除する場合は、次のコマンドを使用してリソース グループを削除します。

az group delete --name aca-demo

ヒント

問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。

次のステップ

次に、作成したコンテナー アプリを更新する方法を学習します。