関数コードパッケージと比較して、コンテナーイメージはより優れた移植性を提供し、より多様なツールチェーンエコシステムの恩恵を受けることができます。 ただし、コンテナイメージにはブロートウェアが含まれる場合があります。 Bloatwareにより、イメージサイズが1ギガバイトを超え、コンテナイメージのコールドスタートが数分に延長されます。 画像の加速が有効になった後、画像の起動速度は数分から数秒で約90% 増加します。 このトピックでは、Container Registry Personal Editionのイメージ起動アクセラレーション機能の動作メカニズムについて説明します。
原則
デフォルトでは、Function Computeは、カスタムコンテナランタイムで実行され、Alibaba Cloud Container Registry Personal Editionのイメージを使用する関数のイメージ起動アクセラレーションを有効にします。 このタイプの関数を作成または更新するたびに、function Computeがサービスのロールを引き受け、一時的なAccessKeyペアを使用してイメージをプルし、Function Computeのイメージキャッシュサービスにイメージをキャッシュします。 イメージがキャッシュされた後、イメージの起動を高速化できます。
使用上の注意
画像起動アクセラレーション機能は、中国 (北京) 、中国 (張家口) 、中国 (杭州) 、中国 (上海) 、中国 (深セン) 、中国 (香港) 、シンガポール、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) の各リージョンでサポートされています。
イメージアクセラレーション機能の使用に同意する場合は、Function Computeがリポジトリからイメージをプルし、Function Computeのアクセラレーションキャッシュサービスにイメージをキャッシュすることに同意し、権限を付与します。 データのセキュリティを確保するために、Container Registry Personal Editionはネットワーク分離とID認証を提供し、アクセス制御の実装とデータの暗号化を支援します。 Function Computeの内部ストレージへのイメージのキャッシュが、教育機関のセキュリティ仕様とガイドラインに準拠していることを確認してください。
Container Registry Personal Editionイメージを使用する関数を作成または更新すると、イメージはイメージキャッシュサービスにキャッシュされます。 Function Computeコンソールで関数を呼び出す前に、アクセラレーションイメージが利用可能になるまで待つ必要があります。 アクセラレーションされたイメージは、関数を作成または更新してから約5分で利用可能になります。
イメージ起動アクセラレーションのステータスを表示する
次のいずれかの方法を使用して、アクセラレーションイメージが使用可能かどうかを判断することで、イメージ起動アクセラレーションのステータスを表示できます。
Function Computeコンソールにログインします。 関数の詳細ページの [設定] タブで、[環境情報] セクションの [イメージアクセラレーション準備ステータス] パラメーターの値を表示します。 可能な値:
準備: 画像起動の高速化が進行中です。
利用可能: 画像起動アクセラレーションが完了し、アクセラレーションされた画像が利用可能です。
失敗: イメージ起動アクセラレーションに失敗しました。
次の図は例を示しています。
GetFunction操作を呼び出し、accelerationInfo構造体のstatusパラメーターの値を確認して、イメージ起動アクセラレーションのステータスを表示します。 可能な値:
準備
: 画像起動の高速化は進行中です。 ここで関数を呼び出すと、加速されていないイメージがプルされ、イメージの起動は加速されません。準備完了
: 画像起動の高速化が完了し、高速化された画像が利用可能です。 ここで関数を呼び出すと、イメージの起動が加速されます。失敗
: イメージ起動アクセラレーションに失敗しました。
バージョン管理のベストプラクティス
Container Registry Personal Editionのイメージを使用する場合、関数イメージを更新するときにイメージキャッシュが再びトリガーされます。 アクセラレーションイメージが使用可能になる前に関数を呼び出すと、元のイメージがプルされ、アクセラレーションは実装されません。 [関数の管理] および [バージョンの管理] を参照して、関数を公開できます。 次の手順に従います。
関数を更新します。 機能を更新すると、サービスの最新バージョンも更新されます。
イメージ起動アクセラレーションのステータスが [準備中] から [利用可能] に変わったら、新しいサービスバージョンを公開します。
サービスエイリアスを新しいサービスバージョンにポイントします。
イメージ起動アクセラレーションの結果を表示する
サンプルプロジェクトpuppeteer-pdfは、Node.js ExpressとPuppeteerを組み合わせてwebページをPDFファイルに変換する方法の例を示しています。
イメージ起動アクセラレーション機能を有効にする前に、コールドスタートには66.51秒かかります。 加速が有効になった後、コールドスタートを完了するのに4.3秒かかるだけで、速度が約93.5% 増加します。 サンプルコード:
time curl -H "x-fc-invocation-target: 2016-08-15/proxy/CustomContainerDemo/puppeteer-pdf-no-accl" https://$ACCOUNT_ID.$REGION.fc.aliyuncs.com/generate-pdf\?url\=http://example.com -o /tmp/fc-demo-puppeteer-pdf-no-accl.pdf
# Time spent: 0.06s user 0.09s system 0% cpu 1:06.51 total time
# Cold start after image acceleration
curl -H "x-fc-invocation-target: 2016-08-15/proxy/CustomContainerDemo/puppeteer-pdf-accl" https://$ACCOUNT_ID.$REGION.fc.aliyuncs.com/generate-pdf\?url\=http://example.com -o /tmp/fc-demo-puppeteer-pdf-accl.pdf
# Time spent: 0.05s user 0.06s system 0% cpu 4.300 total time
コールドスタート速度のテスト結果に偏差がある場合があります。 必要とされる実際の時間は、実際のシナリオで異なり得る。