Azure Functions のストレージに関する考慮事項Storage considerations for Azure Functions

Azure Functions では、関数アプリ インスタンスを作成するときに Azure ストレージ アカウントが必要になります。Azure Functions requires an Azure Storage account when you create a function app instance. 次のストレージ サービスは、お使いの関数アプリによって利用できます。The following storage services may be used by your function app:

ストレージ サービスStorage service 機能の使用法Functions usage
Azure BLOB StorageAzure Blob storage バインドの状態と関数キーを管理します。Maintain bindings state and function keys.
Durable Functions 上のタスク ハブからも使用されます。Also used by task hubs in Durable Functions.
Azure FilesAzure Files 従量課金プランPremium プランで、関数アプリ コードを格納して実行するために使用されるファイル共有。File share used to store and run your function app code in a Consumption Plan and Premium Plan.
Azure Queue StorageAzure Queue storage Durable Functions 上のタスク ハブから使用されます。Used by task hubs in Durable Functions.
Azure Table StorageAzure Table storage Durable Functions 上のタスク ハブから使用されます。Used by task hubs in Durable Functions.

重要

従量課金/Premium ホスティング プランを使用する場合、関数コード ファイルおよびバインディング構成ファイルは、メイン ストレージ アカウントの Azure File ストレージに保存されます。When using the Consumption/Premium hosting plan, your function code and binding configuration files are stored in Azure File storage in the main storage account. メイン ストレージ アカウントを削除すると、このコンテンツは削除され、復元できません。When you delete the main storage account, this content is deleted and cannot be recovered.

ストレージ アカウントの要件Storage account requirements

関数アプリを作成するときは、BLOB、キュー、テーブル ストレージをサポートする汎用の Azure Storage アカウントを作成またはリンクする必要があります。When creating a function app, you must create or link to a general-purpose Azure Storage account that supports Blob, Queue, and Table storage. これは、Functions ではトリガーの管理や関数実行のログ記録などの操作に Azure Storage を使用しているためです。This is because Functions relies on Azure Storage for operations such as managing triggers and logging function executions. 一部のストレージ アカウントでは、キューとテーブルがサポートされません。Some storage accounts don't support queues and tables. これらのアカウントには、BLOB 専用のストレージ アカウント、Azure Premium Storage、ZRS レプリケーションを使用する汎用ストレージ アカウントが含まれます。These accounts include blob-only storage accounts, Azure Premium Storage, and general-purpose storage accounts with ZRS replication. これらのサポートされていないアカウントは、関数アプリの作成時に [ストレージ アカウント] ブレードから除外されます。These unsupported accounts are filtered out of from the Storage Account blade when creating a function app.

ストレージ アカウントの種類の詳細については、「Azure Storage サービスの概要」を参照してください。To learn more about storage account types, see Introducing the Azure Storage Services.

お使いの関数アプリで既存のストレージ アカウントを使用することは可能ですが、必ずこれらの要件を満たしている必要があります。While you can use an existing storage account with your function app, you must make sure that it meets these requirements. 関数アプリの作成フローの一部として作成されたストレージ アカウントでは、これらのストレージ アカウント要件を満たしていることが保証されます。Storage accounts created as part of the function app create flow are guaranteed to meet these storage account requirements.

ストレージ アカウントに関するガイダンスStorage account guidance

すべての関数アプリには、操作するためのストレージ アカウントが必要です。Every function app requires a storage account to operate. そのアカウントが削除されると、関数アプリは実行されません。If that account is deleted your function app won't run. ストレージ関連の問題をトラブルシューティングするには、ストレージ関連の問題をトラブルシューティングする方法に関する記事を参照してください。To troubleshoot storage-related issues, see How to troubleshoot storage-related issues. 関数アプリによって使用されるストレージ アカウントには、次の追加の考慮事項が適用されます。The following additional considerations apply to the Storage account used by function apps.

ストレージ アカウント接続の設定Storage account connection setting

ストレージ アカウント接続は、AzureWebJobsStorage アプリケーション設定の中で管理されます。The storage account connection is maintained in the AzureWebJobsStorage application setting.

ストレージ キーを再生成する場合は、ストレージ アカウント接続文字列を更新する必要があります。The storage account connection string must be updated when you regenerate storage keys. ストレージ キーの管理については、こちらをご覧ください。Read more about storage key management here.

共有のストレージ アカウントShared storage accounts

複数の関数アプリでは、同じストレージ アカウントを問題なく共有できます。It's possible for multiple function apps to share the same storage account without any issues. たとえば、Visual Studio では、Azure ストレージ エミュレーターを使用して複数のアプリを開発できます。For example, in Visual Studio you can develop multiple apps using the Azure Storage Emulator. この場合、エミュレーターは単一のストレージ アカウントのように動作します。In this case, the emulator acts like a single storage account. お使いの関数アプリで使用されているものと同じストレージ アカウントは、アプリケーション データを格納するためにも使用できます。The same storage account used by your function app can also be used to store your application data. ただし、運用環境では、この手法が常に適切であるとは限りません。However, this approach isn't always a good idea in a production environment.

ストレージ パフォーマンスの最適化Optimize storage performance

パフォーマンスを最大化するには、関数アプリごとに個別のストレージ アカウントを使用します。To maximize performance, use a separate storage account for each function app. Durable Functions または Event Hub によってトリガーされる関数がある場合には、これは特に重要です。どちらも、大量のストレージ トランザクションを生成します。This is particularly important when you have Durable Functions or Event Hub triggered functions, which both generate a high volume of storage transactions. アプリケーション ロジックが (Storage SDK を使用して) 直接、あるいは、ストレージ バインドの 1 つを経由して Azure Storage と対話する場合、専用のストレージ アカウントを使用する必要があります。When your application logic interacts with Azure Storage, either directly (using the Storage SDK) or through one of the storage bindings, you should use a dedicated storage account. たとえば、Event Hub によってトリガーされ BLOB ストレージにデータを書き込む関数がある場合、2 つのストレージ アカウントを使用します—1 つは関数アプリ用、もう 1 つは関数によって格納されている BLOB 用になります。For example, if you have an Event Hub-triggered function writing some data to blob storage, use two storage accounts—one for the function app and another for the blobs being stored by the function.

ストレージ データの暗号化Storage data encryption

Azure Storage は、保存されているストレージ アカウント内のすべてのデータを暗号化します。Azure Storage encrypts all data in a storage account at rest. 詳細については、「保存データ向け Azure ストレージの暗号化」をご覧ください。For more information, see Azure Storage encryption for data at rest.

規定では、データは Microsoft のマネージド キーで暗号化されます。By default, data is encrypted with Microsoft-managed keys. 暗号化キーをさらに制御するために、BLOB とファイル データの暗号化に使用する目的で、顧客が管理するキーを提供できます。For additional control over encryption keys, you can supply customer-managed keys to use for encryption of blob and file data. Functions からストレージ アカウントにアクセスできるように、これらのキーは Azure Key Vault 内に置かれている必要があります。These keys must be present in Azure Key Vault for Functions to be able to access the storage account. 詳細については、「カスタマー マネージド キーを使用した保存時の暗号化」をご覧ください。To learn more, see Encryption at rest using customer-managed keys.

ファイル共有をマウントする (Linux)Mount file shares (Linux)

既存の Azure Files 共有を Linux 関数アプリにマウントすることができます。You can mount existing Azure Files shares to your Linux function apps. Linux 関数アプリに共有をマウントすることにより、既存の機械学習モデルや、関数内のその他のデータを活用できます。By mounting a share to your Linux function app, you can leverage existing machine learning models or other data in your functions. 既存の共有を Linux 関数アプリにマウントするには、az webapp config storage-account add コマンドを使用できます。You can use the az webapp config storage-account add command to mount an existing share to your Linux function app.

このコマンドで、share-name は既存の Azure Files 共有の名前で、custom-id は、関数アプリにマウントされたときに共有を一意に定義する任意の文字列にすることができます。In this command, share-name is the name of the existing Azure Files share, and custom-id can be any string that uniquely defines the share when mounted to the function app. また、mount-path は、関数アプリで共有にアクセスするためのパスです。Also, mount-path is the path from which the share is accessed in your function app. mount-path は、/dir-name の形式にする必要があり、/home で開始することはできません。mount-path must be in the format /dir-name, and it can't start with /home.

完全な例については、Python 関数アプリの作成と Azure Files 共有のマウントに関する記事にあるスクリプトを参照してください。For a complete example, see the scripts in Create a Python function app and mount a Azure Files share.

現時点では、AzureFilesstorage-type のみがサポートされています。Currently, only a storage-type of AzureFiles is supported. 指定された関数アプリにマウントできるのは 5 つの共有のみです。You can only mount five shares to a given function app. ファイル共有をマウントすると、コールド スタートの時間が少なくとも 200 ミリ秒から 300 ミリ秒長くなる可能性があり、ストレージ アカウントが別のリージョンにある場合はさらに長くなる可能性があります。Mounting a file share may increase the cold start time by at least 200-300ms, or even more when the storage account is in a different region.

マウントされた共有は、指定された mount-path の関数コードで使用できます。The mounted share is available to your function code at the mount-path specified. たとえば、mount-path/path/to/mount の場合、次の Python の例に示すように、ファイル システム API でターゲット ディレクトリにアクセスできます。For example, when mount-path is /path/to/mount, you can access the target directory by file system APIs, as in the following Python example:

import os
...

files_in_share = os.listdir("/path/to/mount")

次のステップNext steps

Azure Functions ホスティングのオプションについて確認してください。Learn more about Azure Functions hosting options.