Linux でのAzure App Serviceに関する FAQ

注:

この記事はお役に立ちましたか? お客様の入力は、当社にとって重要です。 このページの [フィードバック ] ボタンを使用して、この記事がどれだけうまく機能したか、または改善する方法をお知らせください。

App Service on Linuxのリリースにより、機能の追加とプラットフォームの改善に取り組んでいます。 この記事では、お客様から最近質問された質問に対する回答を示します。

質問がある場合は、この記事にコメントしてください。

組み込みのイメージ

プラットフォームが提供する組み込みの Docker コンテナーをフォークする必要があります。 これらのファイルはどこで見つけることができますか?

すべての Docker ファイルは GitHub にあります。

ランタイム スタックを構成する場合の [スタートアップ ファイル] セクションに必要な値は何ですか?

スタック 予期される値
Java SE JAR アプリを起動するコマンド (例: java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat 必要な構成を実行するスクリプトの場所 (例: /home/site/deployments/tools/startup_script.sh)
Node.js PM2 構成ファイルまたはスクリプト ファイル
.NET Core コンパイル済み DLL 名 dotnet <myapp>.dll
PHP オプション のカスタム スタートアップ
Python オプション のスタートアップ スクリプト
Ruby アプリを初期化する Ruby スクリプト

これらのコマンドまたはスクリプトは、組み込みの Docker コンテナーが開始された後、アプリケーション コードが開始される前に実行されます。

管理

Azure portalの再起動ボタンを押すとどうなりますか?

このアクションは、Docker 再起動と同じです。

Secure Shell (SSH) を使用してアプリ コンテナー仮想マシン (VM) に接続できますか?

はい。これを行うには、ソース管理 (SCM) サイトを使用します。

注:

SSH、SFTP、または Visual Studio Code を使用して、ローカル開発マシンからアプリ コンテナーに直接接続することもできます (ライブ デバッグ Node.js アプリ用)。 詳細については、「App Service on Linuxでのリモート デバッグと SSH」を参照してください。

SDK または Azure Resource Manager テンプレートを使用して Linux App Service プランを作成するにはどうすればよいですか?

アプリ サービスの 予約 フィールドを true に設定 します

継続的インテグレーションとデプロイ

Web アプリでは、Docker Hubでイメージを更新した後も、古い Docker コンテナー イメージが使用されます。 カスタム コンテナーの継続的インテグレーションとデプロイをサポートしていますか?

はい。Web App for Containers を使用した継続的なデプロイに従って、Azure Container Registryまたは DockerHub の継続的インテグレーション/デプロイを設定します。 プライベート レジストリの場合は、Web アプリを停止してから起動することで、コンテナーを更新できます。 または、ダミーのアプリケーション設定を変更または追加して、コンテナーを強制的に更新することもできます。

ステージング環境をサポートしていますか?

はい。

'WebDeploy/MSDeploy' を使用して Web アプリをデプロイできますか?

はい。false と呼ばれる WEBSITE_WEBDEPLOY_USE_SCM アプリ設定を設定する必要 があります

Linux Web アプリを使用すると、アプリケーションの Git デプロイが失敗します。 この問題を回避するにはどうすればよいですか?

Linux Web アプリへの Git デプロイが失敗した場合は、次のいずれかのオプションを選択してアプリケーション コードをデプロイします。

  • 継続的デリバリー (プレビュー) 機能を使用する: アプリのソース コードを Azure DevOps Git リポジトリまたは GitHub リポジトリに格納して、Azure 継続的デリバリーを使用できます。 詳細については、「 Linux Web アプリの継続的デリバリーを構成する方法」を参照してください。

  • ZIP デプロイ API を使用する: この API を使用するには、Web アプリに SSH 接続し、コードをデプロイするフォルダーに移動します。 次のコードを実行します。

    curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
    

    コマンドが見つからないというエラーが発生した場合は、前curlcurlコマンドを実行する前に を使用apt-get install curlして curl をインストールしてください。

言語サポート

Node.js アプリケーション、特別な設定、または構成で Web ソケットを使用して設定しますか?

はい。サーバー側の Node.js コードで無効にします perMessageDeflate 。 たとえば、socket.io を使用している場合は、次のコードを使用します。

const io = require('socket.io')(server,{
  perMessageDeflate :false
});

コンパイルされていない .NET Core アプリをサポートしていますか?

はい。

PHP アプリの依存関係マネージャーとして Composer をサポートしていますか?

はい。Git のデプロイ中に、Kudu は PHP アプリケーションをデプロイしていることを検出する必要があります (composer.lock ファイルが存在するため)、Kudu はコンポーザーのインストールをトリガーします。

カスタム コンテナー

イメージを ACR にプルするときに、App Serviceでマネージド ID を使用できますか?

はい。この機能は Azure CLI から入手できます。 システム割り当て ID またはユーザー割り当て ID を使用できます。 この機能は現在、Azure portalではサポートされていません。

自分のカスタム コンテナーを使用しています。 プラットフォームで SMB 共有を '/home/' ディレクトリにマウントする必要があります。

設定が指定されていないfalse に設定されている場合WEBSITES_ENABLE_APP_SERVICE_STORAGE/home/ディレクトリはスケール インスタンス間で共有されず、書き込まれたファイルは再起動しても保持されません。 明示的に true に設定WEBSITES_ENABLE_APP_SERVICE_STORAGEすると、マウントが有効になります。 これが true に設定されたら、マウントを無効にする場合は、明示的に false に設定WEBSITES_ENABLE_APP_SERVICE_STORAGEする必要があります。

コンテナーが "デバイスに空き領域が残っていない" で起動できない。 このエラーはどういう意味ですか?

App Service on Linuxでは、次の 2 種類のストレージが使用されます。

  • ファイル システム ストレージ: ファイル システム ストレージは、App Service プラン クォータに含まれます。 これは、ディレクトリにルート化された /home 永続ストレージにファイルが保存されるときに使用されます。
  • ホスト ディスク領域: ホスト ディスク領域は、コンテナー イメージを格納するために使用されます。 これは、Docker ストレージ ドライバーを介してプラットフォームによって管理されます。

ホスト ディスク領域は、ファイル システムのストレージ クォータとは別です。 展開可能ではなく、インスタンスごとに 15 GB の制限があります。 これは、ワーカーにカスタム イメージを格納するために使用されます。 ホスト ディスク領域の正確な可用性によっては、15 GB を超える GB を使用できる場合がありますが、これは保証されません。

コンテナーの書き込み可能なレイヤーが、ディレクトリまたはマウントされた Azure ストレージ パス/home外部にデータを保存する場合、ホスト ディスク領域も使用されます。

プラットフォームは、ホスト ディスク領域を定期的にクリーンアップして、未使用のコンテナーを削除します。 コンテナーがディレクトリの外部または Bring Your Own Storage (BYOS) の外部に大量の /home データを書き込む場合、ホスト ディスク領域の制限を超えると、起動エラーまたはランタイム例外が発生します。

Linux App Serviceで実行する場合は、コンテナー イメージをできるだけ小さくし、永続ストレージまたは BYOS にデータを書き込むようお勧めします。 可能でない場合は、ホスト ディスク領域が固定され、App Service プラン内のすべてのコンテナー間で共有されるため、App Service プランを分割する必要があります。

カスタム コンテナーの起動には長い時間がかかり、起動が完了する前にプラットフォームによってコンテナーが再起動されます。

プラットフォームがコンテナーを再起動するまでに待機する時間を構成できます。 これを行うには、アプリの設定を WEBSITES_CONTAINER_START_TIME_LIMIT 目的の値に設定します。 既定値は 230 秒で、最大値は 1800 秒です。

プライベート レジストリ サーバー URL の形式は何ですか?

または https://を含むhttp://完全なレジストリ URL を指定します。

プライベート レジストリ オプションのイメージ名の形式は何ですか?

プライベート レジストリ URL (myacr.azurecr.io/dotnet:latest など) を含む完全なイメージ名を追加します。 カスタム ポートを使用するイメージ名 は、ポータルから入力できません。 を設定docker-custom-image-nameするには、コマンド ライン ツールをaz使用します

カスタム コンテナー イメージで複数のポートを公開できますか?

複数のポートの公開はサポートされていません。

自分のストレージを持ち込むことはできますか?

はい。 独自のストレージを持ち込む のはプレビュー段階です。

カスタム コンテナーのファイル システムまたは SCM サイトから実行中のプロセスを参照できないのはなぜですか?

SCM サイトは別のコンテナーで実行されます。 ファイル システムまたはアプリ コンテナーの実行中のプロセスをチェックすることはできません。

カスタム コンテナーに HTTPS を実装する必要がありますか?

いいえ。プラットフォームは、共有フロントエンドで HTTPS 終了を処理します。

カスタム コンテナーにWEBSITES_PORTを使用する必要がありますか?

はい。これはカスタム コンテナーに必要です。 カスタム ポートを手動で構成するには、Dockerfile の EXPOSE 命令と、コンテナーにバインドするポート値を使用して、アプリ設定WEBSITES_PORTを使用します。

Docker イメージでASPNETCORE_URLSを使用できますか?

はい。.NET Core アプリが起動する前に環境変数を上書きします。 たとえば、init.sh スクリプトでは、ASPNETCORE_URLS={Your value} をエクスポートします。

Docker Compose を使用したマルチコンテナー

操作方法マルチコンテナーで使用するようにAzure Container Registry (ACR) を構成しますか?

マルチコンテナーで ACR を使用するには、 すべてのコンテナー イメージ を同じ ACR レジストリ サーバーでホストする必要があります。 同じレジストリ サーバー上に配置されたら、アプリケーション設定を作成し、Docker Compose 構成ファイルを更新して ACR イメージ名を含める必要があります。

次のアプリケーション設定を作成します。

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (完全な URL、例: https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (ACR 設定で管理者アクセスを有効にする)

構成ファイル内で、次の例のように ACR イメージを参照します。

image: <server-name>.azurecr.io/<image-name>:<tag>

インターネットにアクセスできるコンテナー操作方法知っていますか?

  • アクセス用に開くことができるコンテナーは 1 つだけです
  • アクセス可能なポートは、ポート 80 と 8080 のみです (公開ポート)

アクセス可能なコンテナーを優先順位の順に決定するための規則を次に示します。

  • コンテナー名に設定されたアプリケーション設定WEBSITES_WEB_CONTAINER_NAME
  • ポート 80 または 8080 を定義する最初のコンテナー
  • 上記のどちらも当てはまらない場合、ファイルで定義されている最初のコンテナーにアクセスできます (公開されます)

depends_on操作方法使用しますか?

オプションはdepends_on、App Serviceではサポートされていないため、無視されます。 Docker からの制御の起動とシャットダウンの推奨事項と同様に、App Serviceマルチコンテナー アプリは、起動時と切断時の両方で、アプリケーション コードを介して依存関係をチェックする必要があります。 次のコード例は、Redis コンテナーが実行されているかどうかを確認する Python アプリのチェックを示しています。

import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello from Azure App Service team! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80, debug=True)

Web ソケット

Web ソケットは Linux アプリでサポートされています。 Web ソケットは webSocketsEnabled 常に Linux に対して有効になっているため、ARM 設定は Linux アプリには適用されません。

重要

Web ソケットは、Free App Service プランの Linux アプリでサポートされるようになりました。 Free App Service プランでは、最大 5 つの Web ソケット接続をサポートしています。 この制限を超えると、HTTP 429 (要求が多すぎます) 応答が発生します。

価格と SLA

サービスが一般公開されたので、価格は何ですか?

価格は SKU とリージョンによって異なりますが、価格の詳細については、「App Service価格」ページを参照してください。

その他の質問

コンテナーウォームアップ要求のしくみ

Azure アプリ Services がコンテナーを起動すると、ウォームアップ要求はアプリケーションの /robots933456.txt エンドポイントに HTTP 要求を送信します。 これは単なるダミー エンドポイントですが、アプリケーションは 5XX 以外の状態コードで応答する必要があります。 アプリケーション ロジックが存在しないエンドポイントに対して HTTP 状態コードで応答しない場合、ウォームアップ要求は応答を受け取ることができず、コンテナーを永続的に再起動します。 ウォームアップ要求は、ポートの構成ミスが原因で失敗する可能性もあります。

Azure アプリ サービスでポートが正しく構成されていることを確認するには、Linux コンテナーでポートを指定操作方法質問を参照してください。

コンテナーウォームアップ要求のタイムアウトを増やすことはできますか?

コンテナーからの応答を 240 秒待機した後、ウォームアップ要求は既定で失敗します。 コンテナーウォームアップ要求のタイムアウトを増やすには、240 ~ 1800 秒の値を持つアプリケーション設定 WEBSITES_CONTAINER_START_TIME_LIMIT を追加します。

Linux コンテナーでポートを指定操作方法?

コンテナーの種類 説明 ポートを設定/使用する方法
組み込みのコンテナー Linux アプリの言語/フレームワーク バージョンを選択すると、定義済みのコンテナーが選択されます。 アプリ コードを適切なポートにポイントするには、PORT 環境変数を使用します。
カスタム コンテナー コンテナーを完全に制御できます。 App Serviceには、コンテナーがリッスンするポートに関する制御はありません。 必要なのは、要求を転送するポートを把握することです。 コンテナーがポート 80 または 8080 をリッスンしている場合、App Serviceはそれを自動的に検出できます。 他のポートをリッスンする場合は、WEBSITES_PORT アプリ設定をポート番号に設定し、App Serviceは要求をコンテナー内のそのポートに転送する必要があります。 WEBSITES_PORT アプリの設定はコンテナー内では何の影響も及びないため、コンテナー内の環境変数としてアクセスすることはできません。

Linux Webapp でファイル ベースのデータベース (SQLite など) を使用できますか?

アプリケーションのファイル システムは、マウントされたネットワーク共有です。 これにより、コードを複数のホスト間で実行する必要があるスケールアウト シナリオが可能になります。 残念ながら、これは、データベース ファイルに対して排他的ロックを取得できないため、SQLite のようなファイル ベースのデータベース プロバイダーの使用をブロックします。 マネージド データベース サービスをお勧めします:Azure SQLAzure Database for MySQLまたはAzure Database for PostgreSQL

アプリケーション設定名でサポートされている文字は何ですか?

アプリケーション設定には、文字 (A-Z、a-z)、数字 (0 から 9)、アンダースコア文字 (_) のみを使用できます。

新機能はどこで要求できますか?

アイデアは、Web Apps フィードバック フォーラムで送信できます。 アイデアのタイトルに "[Linux]" を追加します。