HTTP トリガーは、HTTP リクエストを介して関数を呼び出します。これは、Web サービスを迅速に構築するのに役立ちます。HTTP トリガーを使用する前に、その制限と、サポートされている HTTP/HTTPS プロトコルの制限を確認して、これらの制限を超えたことによる関数エラーを防いでください。このトピックでは、HTTP トリガーの呼び出しメソッド、認証、およびクロスオリジンリクエストの処理について説明します。
使用上の注意
[認証方式] が [認証なし] に設定されているため HTTP トリガーが匿名である場合、ID 検証は必要ありません。これは、URL を持つ誰もが HTTP リクエストを送信して関数を呼び出すことができることを意味し、セキュリティリスクをもたらします。このリスクを軽減するために、リクエストヘッダーの
Authorizationフィールドを検証することでリクエストを認証できます。詳細については、「HTTP トリガーの署名認証を設定する」をご参照ください。国のサイバーセキュリティ規制に準拠して、2024 年 6 月 10 日以降、新しく作成された HTTP トリガーは、パブリックネットワークアクセスエンドポイントを介して APK ファイル (MIME タイプ: application/vnd.android.package-archive) をダウンロードすることが禁止されます。APK ファイルをダウンロードしようとすると、400 エラーコードが返されます。詳細については、「HTTP トリガーのパブリックエンドポイントが .apk ファイルを期待どおりに返すようにする方法」をご参照ください。
仮想 IP アドレス (VIP) のローテーションメカニズム。
システムの回復力とサービスの安定性を向上させるために、Function Compute は仮想 IP アドレス (VIP) のローテーションメカニズムを使用します。これは、HTTP トリガーのパブリックエンドポイントと内部エンドポイントに対応する VIP が定期的にローテーションされ、インフラストラクチャの堅牢性が向上することを意味します。
VIP をハードコーディングすると、サービスが中断される可能性があることに注意してください。ビジネスの堅牢性を確保するために、カスタムドメイン名を使用することを強くお勧めします。VIP の不適切な使用によって引き起こされた障害は、Function Compute のサービスレベルアグリーメント (SLA) の対象外です。使用状況を確認し、正しい方法に調整する必要があります。
CNAME (Canonical Name) レコードを持つカスタムドメイン名を使用して Function Compute にアクセスできます。詳細については、「カスタムドメイン名を設定する」をご参照ください。
制限
トリガーの制限
関数の各バージョンまたはエイリアスに対して、作成できる HTTP トリガーは 1 つだけです。詳細については、「バージョンを管理する」および「エイリアスを管理する」をご参照ください。
HTTP トリガーによって提供される組み込みドメイン名はテスト専用です。外部のオンラインサービスには使用しないでください。この慣行により、組み込みドメイン名の潜在的な安定性の問題がオンラインサービスに影響を与えるのを防ぎます。
説明外部ユーザーに Web サイトサービスを提供するには、ICP 登録を持つドメイン名を使用する必要があります。カスタムドメイン名を設定し、ドメイン名を関数にバインドしてから、独自のドメイン名を使用してサービスを提供できます。詳細については、「カスタムドメイン名を設定する」をご参照ください。
HTTP/HTTPS プロトコルの制限
GET、POST、PUT、DELETE、HEAD、PATCH、および OPTIONS メソッドを使用して関数をトリガーできます。これらのメソッドは、単純なリクエスト/レスポンスのシナリオに適しています。詳細については、「HTTP トリガーを設定する」をご参照ください。
HTTP リクエストの制限
リクエストヘッダーは、x-fc- で始まるカスタムフィールドまたは以下のカスタムフィールドをサポートしていません。
connection
keep-alive
リクエストが以下の制限を超えると、
400状態コードとInvalidArgumentエラーコードが返されます。ヘッダーサイズ: ヘッダー内のすべてのキーと値の合計サイズは 8 KB を超えることはできません。
パスサイズ: すべてのクエリパラメーターを含むパスの合計サイズは 4 KB を超えることはできません。
本文サイズ: 同期呼び出しリクエストの本文の合計サイズは 32 MB を超えることはできません。非同期呼び出しリクエストの本文サイズについては、「リソースの制限」をご参照ください。
HTTP 応答の制限
応答ヘッダーは、x-fc- で始まるカスタムフィールドまたは以下のカスタムフィールドをサポートしていません。
connection
content-length
date
keep-alive
server
upgrade
content-disposition:attachment
説明セキュリティ上の理由から、Function Compute のデフォルトの aliyuncs.com ドメイン名を使用する場合、サーバーは応答ヘッダーに content-disposition: attachment フィールドを強制的に追加します。このフィールドにより、返された結果がブラウザで添付ファイルとしてダウンロードされます。この制限を解除するには、カスタムドメイン名を設定できます。詳細については、「カスタムドメイン名を設定する」をご参照ください。
応答が以下の制限を超えると、
502状態コードとBadResponseエラーコードが返されます。ヘッダーサイズ: ヘッダー内のすべてのキーと値の合計サイズは 8 KB を超えることはできません。
メリット
HTTP トリガーと API Gateway トリガーの両方を使用して、Web アプリケーションを作成できます。その使用法は次のとおりです。
HTTP トリガー: カスタムドメイン名をバインドして、HTTP 関数のさまざまな HTTP アクセスパスをマッピングできます。詳細については、「カスタムドメイン名を設定する」をご参照ください。
API Gateway トリガー: API Gateway を Function Compute をバックエンドサービスとして設定して、同様の機能を実現することもできます。詳細については、「API バックエンドサービスとして Function Compute を使用する」をご参照ください。
API Gateway トリガーと比較して、HTTP トリガーには次のメリットがあります。
HTTP トリガーは、開発者が学習およびデバッグするのが簡単です。これにより、開発者は Function Compute を使用して Web アプリケーションと API を迅速に構築できます。
HTTP トリガーは、リクエスト処理のステップを削減します。効率的なリクエストとレスポンスのフォーマットをサポートし、JSON フォーマットへのエンコーディングやデコーディングを必要としません。これにより、パフォーマンスが向上します。
使い慣れた HTTP テストツールを使用して、Function Compute の機能とパフォーマンスをテストできます。
HTTP トリガーを、CDN back-to-origin や Simple Message Queue (formerly MNS) などの Webhook コールバックをサポートする他のサービスと簡単に統合できます。
呼び出しメソッド
同期呼び出し
同期呼び出しとは、イベントが関数によって処理された直後に結果が返されることを意味します。HTTP トリガーのデフォルトの呼び出しメソッドは同期呼び出しです。詳細については、「同期呼び出し」をご参照ください。
非同期呼び出し
Function Compute がリクエストを受信した後、リクエストを永続化のために保存し、すぐにレスポンスを返します。リクエストが実行されるのを待たずに結果を返します。
非同期呼び出し: HTTP トリガーを使用して関数を呼び出す場合、
"X-Fc-Invocation-Type":"Async"リクエストヘッダーを追加して、リクエストレベルの非同期呼び出しを実行できます。非同期タスク: HTTP 関数の非同期タスクを設定した後、
"X-Fc-Async-Task-Id":"g6u*****iyvhd3jk8s6bhj0hh"リクエストヘッダーを追加して、非同期タスクの呼び出し ID を指定できます。
リクエストヘッダーの詳細については、「InvokeFunction」をご参照ください。
非同期呼び出しが成功すると、Function Compute は状態コード 202 を返します。これはリクエストが受け入れられたことを示します。リクエスト ID もリクエストヘッダーで返されます。例: "X-Fc-Request-Id": "80bf7****281713e1"。
Function Compute が 202 以外の状態コードを返した場合、呼び出しは失敗しました。呼び出しの失敗の原因の詳細については、「リトライメカニズム」をご参照ください。
認証
Function Compute は、HTTP トリガーの認証をサポートしています。ユーザーが HTTP トリガーを介して関数にアクセスすると、Function Compute はアクセスを許可する前にユーザーを認証する必要があります。次の認証方式がサポートされています。
CORS リクエストの処理
デフォルトでは、Function Compute は関数呼び出しリクエストへのクロスオリジンアクセスを許可します。また、関数コードでのクロスオリジンリクエスト (CORS) の動作のカスタム処理もサポートしています。
単純リクエスト
単純リクエストはプリフライトリクエストを送信しません。単純なアクセスの制御のために、関数コードで Access-Control-Allow-* で始まるヘッダーを設定できます。Function Compute は、Access-Control-Allow-Origin、Access-Control-Allow-Headers、および Access-Control-Max-Age などの単純リクエストのカスタムヘッダーをサポートしています。
カスタムヘッダーを設定しない場合、Function Compute はデフォルトでレスポンスヘッダーをリクエストの対応するフィールドに設定します。
Access-Control-Allow-Origin: リクエストの Origin ヘッダー。Access-Control-Allow-Credentials: デフォルト値はtrueです。Access-Control-Expose-Headers: Function Compute のいくつかのカスタムヘッダー。
単純でないリクエスト
単純でないリクエストは、正式なリクエストを送信する前にプリフライトリクエストを送信します。単純でないリクエストには、OPTIONS メソッドの関数呼び出しリクエストと実際の関数呼び出しリクエストが含まれます。正式なリクエストのルールは、単純リクエストと同じです。プリフライトリクエストのレスポンスをカスタマイズするには、HTTP トリガーに OPTIONS メソッドを追加する必要があります。その後、関数コードで OPTIONS リクエストを処理し、Access-Control-Allow-* で始まるヘッダーを設定して、関数のクロスオリジン動作を制御できます。
プリフライトリクエストの場合、Function Compute は、Access-Control-Allow-Origin、Access-Control-Allow-Headers、Access-Control-Allow-Methods、および Access-Control-Max-Age を含むカスタムヘッダーをサポートしています。
次の例は、組み込みの Node.js ランタイムの関数コードでプリフライトリクエストを処理する方法を示しています。
exports.handler = (event, context,callback) => {
console.log('hello world');
const method = JSON.parse(event).requestContext.http.method;
if (method === 'OPTIONS') {
// プリフライトリクエストを処理するためにレスポンスヘッダーを設定します。
const fcResponse = {
'statusCode': 204,
'headers': {
'Access-Control-Allow-Origin': 'http://www.fc.com',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age':'3600'
},
'body': 'hello world'
};
callback(null, fcResponse);
} else {
callback(null, {
'statusCode': 500,
'body': 'hello world'
});
}
};