Share via


カスタム コンテナー イメージを使用してアプリケーションをデプロイする

注意

この記事では、間もなくサポート終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。

Note

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象: ✔️ Standard ✔️ Enterprise

この記事では、カスタム コンテナー イメージを使用して Azure Spring Apps に Spring Boot アプリケーションをデプロイする方法について説明します。 カスタム コンテナーを使用してアプリケーションをデプロイすると、JAR アプリケーションをデプロイする場合と同様に、ほとんどの機能がサポートされます。 その他の Java アプリケーションや Java 以外のアプリケーションも、コンテナー イメージを使用してデプロイできます。

前提条件

  • アプリケーションを含むコンテナー イメージ。
  • イメージはイメージ レジストリにプッシュされます。 詳細については、Azure Container Registry に関するページを参照してください。

Note

Web アプリケーションは、Standard プランではポート 1025 で、Enterprise プランではポート 8080 でリッスンする必要があります。 ポートを変更する方法は、アプリケーションのフレームワークによって異なります。 たとえば、Spring Boot アプリケーションでは SERVER_PORT=1025、ASP.NET Core アプリケーションでは ASPNETCORE_URLS=http://+:1025/ を指定します。 どのポートもリッスンしないアプリケーションのプローブを無効にすることができます。 詳しくは、「Azure Spring Apps でホストされているアプリの正常性プローブと正常終了期間を構成する方法」をご覧ください。

アプリケーションをデプロイする

カスタム コンテナー イメージにアプリケーションをデプロイするには、次の手順に従います。

コンテナー イメージをデプロイするには、次のいずれかのコマンドを使用します。

  • コンテナー イメージをパブリック Docker Hub にアプリにデプロイするには、次のコマンドを使用します。

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • ACR からアプリまたは別のプライベート レジストリからアプリにコンテナー イメージをデプロイするには、次のコマンドを使用します。

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

イメージのエントリ ポイントを上書きするには、上記のコマンドのいずれかに次の 2 つの引数を追加します。

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

Web アプリケーションではないイメージについて、ポートでのリッスンを無効にするには、上記のコマンドに次の引数を追加します。

    --disable-probe true

機能のサポート マトリックス

次の表は、アプリケーションの種類ごとにサポートされている機能を示します。

機能 Spring Boot アプリ - コンテナーのデプロイ ポリグロット アプリ - コンテナーのデプロイ メモ
アプリのライフサイクル管理 ✔️ ✔️
コンテナー レジストリのサポート ✔️ ✔️
エンドポイントの割り当て ✔️ ✔️
Azure Monitor ✔️ ✔️
APM の統合 ✔️ ✔️ 手動インストールでサポートされます。
ブルーグリーン デプロイ ✔️ ✔️
カスタム ドメイン ✔️ ✔️
スケーリング - 自動スケーリング ✔️ ✔️
スケーリング - 手動スケーリング (スケールインおよびアウト、スケールアップおよびダウン) ✔️ ✔️
マネージド ID ✔️ ✔️
Spring Cloud Eureka および Config Server ✔️
API portal for VMware Tanzu ✔️ ✔️ Enterprise プランのみ。
Spring Cloud Gateway for VMware Tanzu ✔️ ✔️ Enterprise プランのみ。
Application Configuration Service for VMware Tanzu ✔️ Enterprise プランのみ。
VMware Tanzu の Application Live View ✔️ Enterprise プランのみ。
VMware Tanzu Service Registry ✔️ Enterprise プランのみ。
VNet ✔️ ✔️ NSG または Azure Firewall の許可リストにレジストリを追加します。
発信 IP アドレス ✔️ ✔️
E2E TLS ✔️ ✔️ 自己署名 CA を信頼します
liveness と readiness の設定 ✔️ ✔️
高度なトラブルシューティング - スレッド、ヒープ、JFR ダンプ ✔️ イメージは、Bash と、PATH が指定された JDK を含む必要があります。
Bring your own storage ✔️ ✔️
サービス バインドとリソース コネクタの統合 ✔️
可用性ゾーン ✔️ ✔️
アプリのライフサイクル イベント ✔️ ✔️
アプリ サイズの削減 - 0.5 vCPU および 512 MB ✔️ ✔️
Terraform を使用したアプリ デプロイの自動化 ✔️ ✔️
論理的な削除 ✔️ ✔️
対話型の診断エクスペリエンス (AppLens ベース) ✔️ ✔️
SLA ✔️ ✔️

Note

ポリグロット アプリには、Spring Boot 以外の Java、NodeJS、AngularJS、Python、および .NET アプリが含まれます。

カスタム コンテナーを使用してデプロイする際の一般的な注意点

次の点は、カスタム イメージを使用してデプロイする際によくある状況に対処するために役立ちます。

証明機関を信頼する

証明機関を信頼するには、2 つのオプションがあります。

オプション 1: Azure Spring Apps 経由でアップロードする

CA 証明書をアプリに読み込むには、「Azure Spring Apps のアプリケーションで TLS/SSL 証明書を使用する」をご覧ください。 その後、証明書は場所 /etc/azure-spring-cloud/certs/public/ にマウントされます。

オプション 2: イメージへの手動インストール

イメージ内で CA を信頼するには、環境に応じて次の変数を設定します。

  • Dockerfile に次の行を追加して、信頼ストアに Java アプリケーションをインポートする必要があります。

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Node.js アプリケーションの場合は、NODE_EXTRA_CA_CERTS 環境変数を設定します。

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Debian または Ubuntu イメージ上の、Python またはシステム CA ストアに依存する他の言語の場合は、次の環境変数を追加します。

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • CentOS または Fedora ベース イメージ上の、Python またはシステム CA ストアに依存する他の言語の場合は、次の環境変数を追加します。

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

イメージの変更時の予期しない動作を回避する

アプリケーションが再起動またはスケールアウトされるとき、常に最新のイメージがプルされます。 イメージが変更された場合、新しく起動されたアプリケーション インスタンスは新しいイメージを使用しますが、古いインスタンスは引き続き古いイメージを使用します。

Note

予期しないアプリケーション動作を回避するためには、latest タグの使用を回避するか、タグを変更せずにイメージを上書きしてください。

VNet 内のコンテナー レジストリに接続できなくなることを回避する

インスタンスを VNet にデプロイした場合は、NSG または Azure Firewall (使用されている場合) 内のコンテナー レジストリへのネットワーク トラフィックを許可してください。 詳細について「VNet で実行するための顧客の責任」を参照し、必要なセキュリティ規則を追加します。

APM をイメージに手動でインストールする

インストール手順は、アプリケーション パフォーマンス モニター (APM) と言語によって異なります。 次の手順は、Java アプリケーションを含む New Relic の場合です。 次の手順を使用して Dockerfile を変更する必要があります。

  1. Dockerfile に次を追加して、エージェント ファイルをダウンロードしてイメージにインストールします。

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. APM で必要な環境変数を追加します。

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar を追加して、イメージ エントリ ポイントを変更します。

他の言語のエージェントをインストールするには、他のエージェントの公式ドキュメントを参照してください。

New Relic:

Dynatrace:

AppDynamics:

コンテナー ログの表示

コンテナー アプリケーションのコンソール ログを表示するには、次の CLI コマンドを使用できます。

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

Azure Monitor でコンテナー イベント ログを表示するには、クエリを入力します。

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

コンテナー イベント ログを示す Azure Monitor のスクリーンショット。

イメージの脆弱性をスキャンする

イメージの脆弱性を回避するために、ACR と共に Microsoft Defender for Cloud を使用することをお勧めします。 詳しくは、Microsoft Defender for Cloud に関するページをご覧ください

JAR デプロイとコンテナー デプロイを切り替える

次のコマンドを使って再デプロイすることで、デプロイの種類を JAR デプロイからコンテナー デプロイに直接切り替えることができます。

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

または、逆にすることもできます。

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

既存の JAR デプロイを使用して別のデプロイを作成する

次のコマンドを使用すると、既存の JAR デプロイを使用して別のデプロイを作成できます。

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

Azure Pipelines タスクまたは GitHub Actions を使ったデプロイの自動化が、サポートされるようになりました。 詳しくは、「Azure Spring Apps へのアプリケーション デプロイを自動化する」および「GitHub Actions で Azure Spring Apps の CI/CD を使用する」をご覧ください。

次のステップ