Open4

【Azure】Azure Container Apps / Azure Container Registryについて📝

ピン留めされたアイテム
まさぴょん🐱まさぴょん🐱

コンテナイメージを作って ACR に上げるまで📝

https://zenn.dev/08thse/articles/63-acr-image-upload

https://zenn.dev/link/comments/8764854022f858

localでDockerfileからDocker Imageを作成する📝

# Prod Docker Imageを作成する。
docker build -t xxxxx-frontend:1.0 .

docker build -t xxxxx-backend:1.0 .

イメージにタグ付け

  • ACR にアップロードするため、イメージに ACR のログインサーバー名を付加してタグ付けします。
# ログインサーバー名の取得
az acr show --name <acrName> --query loginServer --output table

# 例: mycontainerregistry.azurecr.io
docker tag my-app:1.0 <acrName>.azurecr.io/my-app:v1

イメージにタグ付け📝

ACR にアップロードするため、イメージに ACR のログインサーバー名を付加してタグ付けします。

docker push <acrName>.azurecr.io/my-app:v1

Azure / ACR にログインする

# Azure にログインする。
az login

# ACR の作成した Repository に Login する。
az acr login --name <acrName>

イメージの確認📝

  • ACR にイメージが正しくアップロードされたか確認します。
# リポジトリ一覧
az acr repository list --name <acrName> --output table

# タグ一覧
az acr repository show-tags --name <acrName> --repository my-app --output table

ACR の Repository の状況を確認する。

# ACR の Repository の状況を確認する。
az acr repository list --name <acrName> --output table
まさぴょん🐱まさぴょん🐱

Azure Container Appsについて📝

https://qiita.com/chappy7121/items/2531a41d5dca6116671c

https://qiita.com/nownaka/items/718b980337d27e28a08b

https://zenn.dev/microsoft/articles/azure-container-app-lab

Azure Container Appsのデプロイ方法について

Azure Container Appsは、サーバーレスでコンテナ化されたアプリケーションをデプロイするためのプラットフォームであり、複数のデプロイ方法が提供されています。
以下に、代表的な方法をステップごとに解説します。

1. Azureポータルを使用したデプロイ

Azureポータルを利用して、GUIベースで簡単にデプロイできます。初心者や簡単なデプロイに適しています。

手順:

  1. Azureポータルにログイン: Azureポータルにアクセスし、アクティブなサブスクリプションを確認。
  2. Container Appsの作成:
    • 検索バーで「Container Apps」を検索し、「作成」を選択。
    • 基本設定(サブスクリプション、リソースグループ、コンテナアプリ名、地域など)を入力。
    • コンテナイメージ(例: Azure Container RegistryやDocker Hubから)を指定。
    • イングレス設定(外部公開する場合はポートやHTTPSを構成)を行う。
  3. デプロイ実行: 設定を確認し、「作成」をクリック。デプロイ完了後、アプリのURLを確認してアクセス可能。
  4. リソースの削除: 不要な場合は、リソースグループを選択し、「リソースグループの削除」でクリーンアップ。

特徴:

  • 直感的な操作で設定可能。
  • 簡単なデプロイに最適だが、自動化には不向き。

参考:


2. Azure CLIを使用したデプロイ(az containerapp upコマンド)

Azure CLIを利用したコマンドラインベースのデプロイ方法で、迅速かつ自動化に適しています。

手順:

  1. Azure CLIの準備:
    • Azure CLIをインストールし、az loginで認証。
    • Container Apps拡張機能をインストール/更新:
      az extension add --name containerapp --upgrade --allow-preview true
      
    • 必要な名前空間を登録:
      az provider register --namespace Microsoft.App
      az provider register --namespace Microsoft.OperationalInsights
      
  2. デプロイ実行:
    • ローカルソースコード、GitHubリポジトリ、または既存のコンテナイメージからデプロイ可能。
    • 例: 既存イメージからデプロイする場合:
      az containerapp up \
        --name my-container-app \
        --resource-group my-container-apps \
        --location centralus \
        --environment my-container-apps \
        --image mcr.microsoft.com/k8se/quickstart:latest \
        --target-port 80 \
        --ingress external \
        --query properties.configuration.ingress.fqdn
      
    • ローカルソースコードやGitHubリポジトリの場合、Dockerfileを使用するか、サポートされている言語(Node.js、Pythonなど)でビルド可能。
  3. 確認: コマンド実行後、出力されるURLでアプリを確認。
  4. クリーンアップ: 不要な場合は以下でリソースグループを削除:
    az group delete --name my-container-apps
    

特徴:

  • 単一コマンドでリソースグループ、環境、コンテナアプリを自動作成。
  • ローカルコードやGitHubリポジトリからのデプロイが可能。
  • 高度なカスタマイズにはaz containerapp updateを使用。

参考:,,


3. GitHub Actionsを使用した継続的デプロイ(CI/CD)

GitHub Actionsを利用して、コード変更時に自動でビルド・デプロイするパイプラインを構築できます。

手順:

  1. リポジトリの準備:
    • アプリケーションコードとDockerfileをGitHubリポジトリに配置。
  2. GitHub Actionsワークフローの設定:
    • リポジトリに.github/workflows/deploy.ymlを作成。
    • 例: 以下はコンテナイメージをビルドし、Azure Container Registry(ACR)にプッシュ後、Container Appsにデプロイするワークフロー:
      on:
        push:
          branches:
            - main
      name: Deploy to Azure Container Apps
      jobs:
        build-and-deploy:
          runs-on: ubuntu-latest
          steps:
            - uses: actions/checkout@v3
            - uses: azure/docker-login@v1
              with:
                login-server: <your-acr-name>.azurecr.io
                username: ${{ secrets.REGISTRY_USERNAME }}
                password: ${{ secrets.REGISTRY_PASSWORD }}
            - run: |
                docker build . -t <your-acr-name>.azurecr.io/<image-name>:${{ github.run_number }}
                docker push <your-acr-name>.azurecr.io/<image-name>:${{ github.run_number }}
            - uses: azure/webapps-deploy@v2
              with:
                app-name: <container-app-name>
                image: <your-acr-name>.azurecr.io/<image-name>:${{ github.run_number }}
      
  3. シークレットの設定:
    • GitHubリポジトリの「Settings > Secrets and variables > Actions」に、ACRの認証情報(REGISTRY_USERNAMEREGISTRY_PASSWORD)やAzure認証情報を登録。
  4. デプロイ確認: コードをプッシュすると、自動でビルド・デプロイされ、Container Appsの新しいリビジョンが作成される。

特徴:

  • コード変更時の自動デプロイが可能。
  • ゼロダウンタイムデプロイをサポート(シングルリビジョンモード)。
  • Azure DevOpsや他のCI/CDツールも同様に使用可能。

参考:,,


4. Bicepを使用したInfrastructure as Code(IaC)デプロイ

Bicepを使用して、インフラストラクチャとアプリケーションをコードで管理・デプロイする方法です。

手順:

  1. Bicepファイルの作成:
    • 例: main.bicepでContainer Apps環境とアプリを定義:
      param location string = 'centralus'
      param appName string = 'my-container-app'
      param acrName string = '<your-acr-name>'
      resource containerAppEnv 'Microsoft.App/managedEnvironments@2022-03-01' = {
        name: 'my-container-apps'
        location: location
      }
      resource containerApp 'Microsoft.App/containerApps@2022-03-01' = {
        name: appName
        location: location
        properties: {
          managedEnvironmentId: containerAppEnv.id
          configuration: {
            ingress: {
              external: true
              targetPort: 80
            }
          }
          template: {
            containers: [
              {
                name: appName
                image: '${acrName}.azurecr.io/<image-name>:latest'
              }
            ]
          }
        }
      }
      
  2. デプロイ実行:
    • Azure CLIを使用してデプロイ:
      az deployment group create --resource-group my-container-apps --template-file main.bicep
      
  3. 管理: イメージや設定の変更はBicepファイルを更新し、再デプロイ。

特徴:

  • インフラストラクチャとアプリケーションを一元管理。
  • 環境の再現性が高く、複雑な構成に適している。
  • アプリケーション自体のデプロイは別パイプラインで管理することを推奨。

参考:


5. Visual Studio Codeを使用したデプロイ

VS Codeの拡張機能を使用して、コンテナイメージをビルドし、Azure Container Appsにデプロイできます。

手順:

  1. 拡張機能のインストール:
    • VS Codeに「Container Tools」と「Azure App Service」拡張機能をインストール。
  2. コンテナイメージのビルド:
    • プロジェクトフォルダを開き、Command Palette(Ctrl+Shift+P)から「Container Images: Build Image」を実行。
    • イメージをAzure Container Registry(ACR)やDocker Hubにプッシュ。
  3. デプロイ:
    • Container Explorerでイメージを右クリックし、「Deploy Image to Azure Container Apps」を選択。
    • 必要な設定(アプリ名、リソースグループなど)を入力し、デプロイ。
  4. 確認: デプロイ完了後、出力パネルに表示されるURLでアプリを確認。

特徴:

  • 開発者向けの直感的な操作。
  • ローカル開発とデプロイの統合が容易。

参考:


6. Octopus Deployを使用したデプロイ

Octopus Deployを使用して、コンテナアプリを効率的にデプロイできます。

手順:

  1. コンテナレジストリの設定:
    • Azure Container Registry(ACR)を設定し、コンテナイメージをプッシュ。
  2. Octopus Deployの設定:
    • 「Azure - Create Container App Environment」ステップで環境を作成。
    • 「Azure - Deploy Container App」ステップでコンテナアプリをデプロイ。
  3. デプロイ実行: OctopusのUIからデプロイを実行し、アプリのURLを確認。

特徴:

  • 複雑なデプロイパイプラインに適している。
  • チームでの運用管理が容易。

参考:


補足情報

  • スケーリング: Azure Container Appsは、HTTPトラフィックやKEDAスケーラーに基づく動的スケーリングをサポート。最小インスタンスを0に設定すると、コスト効率の高いスケール-to-ゼロが可能。
  • セキュリティ: マネージドIDを使用して、ACRや他のAzureリソースへの安全な接続を確保。
  • モニタリング: Azure Log Analyticsを使用してログを監視。
  • 制限: Linuxベースのコンテナのみサポート、特権コンテナは不可。

参考:,,,


推奨事項

  • 簡単なデプロイ: Azureポータルまたはaz containerapp upを使用。
  • 自動化: GitHub ActionsやAzure DevOpsでCI/CDパイプラインを構築。
  • インフラ管理: BicepやTerraformでIaCを採用。
  • 開発者向け: VS Codeでローカル開発とデプロイを統合。

ご質問や特定のデプロイ方法についてさらに詳しく知りたい場合は、お知らせください!

まさぴょん🐱まさぴょん🐱

Azure Container Registryについて📝

https://zenn.dev/08thse/articles/63-acr-image-upload

https://qiita.com/kk-ishii/items/720d26467484684fd31d

https://azure.microsoft.com/ja-jp/products/container-registry

Azureのコンテナーレジストリ(Azure Container Registry、略してACR)は、Dockerコンテナーイメージやその他のOCI(Open Container Initiative)準拠のアーティファクトを保存、管理、配布するための、Azure上で提供されるプライベートなコンテナーレジストリサービスです。

主な特徴

  1. コンテナーイメージの保存

    • DockerイメージやHelmチャートなどのコンテナー関連のアーティファクトを安全に保存。
    • プライベートレジストリとして、アクセス制御を細かく設定可能。
  2. セキュリティ

    • Azure Active Directory(AAD)と統合し、認証・認可を管理。
    • イメージの脆弱性スキャン(オプション)を提供し、セキュリティリスクを検出。
  3. 高可用性とスケーラビリティ

    • ジオレプリケーション(複数リージョンへの複製)により、高可用性と低レイテンシを実現。
    • 自動スケーリングで、需要に応じたパフォーマンスを提供。
  4. CI/CD統合

    • Azure DevOps、GitHub Actions、JenkinsなどのCI/CDツールと連携し、コンテナーイメージのビルド・デプロイを自動化。
    • Webhookやタスク機能で、イメージの更新やデプロイを効率化。
  5. 階層型価格プラン

    • Basic、Standard、Premiumの3つのプランがあり、ストレージやパフォーマンス、ジオレプリケーションの有無などが異なる。

主なユースケース

  • コンテナー化されたアプリケーションの管理:Kubernetes(AKSなど)やAzure Web Apps for Containersにデプロイするイメージを一元管理。
  • DevOpsパイプラインの統合:コンテナーのビルド、テスト、デプロイを自動化。
  • クロスリージョンデプロイ:グローバルなアプリケーション配信のために、複数リージョンでイメージを利用。

基本的な使い方

  1. レジストリの作成

    • Azureポータル、CLI、またはPowerShellを使用してACRを作成。
    • 例: az acr create --resource-group <リソースグループ> --name <レジストリ名> --sku Basic
  2. イメージのプッシュ

    • Dockerイメージをビルドし、ACRにプッシュ。
    • 例: docker push <レジストリ名>.azurecr.io/<イメージ名>:<タグ>
  3. イメージのプル

    • AKSや他のコンテナーサービスからイメージをプルしてデプロイ。
    • 例: docker pull <レジストリ名>.azurecr.io/<イメージ名>:<タグ>

他のAzureサービスとの統合

  • Azure Kubernetes Service (AKS):ACRから直接イメージをデプロイ。
  • Azure DevOps:ビルドパイプラインでACRを活用。
  • Azure Security Center:イメージのセキュリティスキャン。

メリット

  • Azureエコシステムとのシームレスな統合。
  • プライベートで安全な環境でのコンテナー管理。
  • グローバルな配布と高可用性。
まさぴょん🐱まさぴょん🐱

Azure Container AppのDeploy URLを確認する📝