解凍ルールを設定することで、指定された OSS ディレクトリにアップロードされた ZIP パッケージを自動的に解凍できます。 Function Compute がパッケージを解凍し、解凍されたオブジェクトを宛先ディレクトリに保存します。
前提条件
Function Compute がアクティブ化されていること。 アクティブ化するには、Function Computeページに移動します。
シナリオ
バッチアップロード:多数の小さなオブジェクトを単一の ZIP パッケージに圧縮して、アップロード時間を短縮します。
リソースの完全性:関連ファイルを 1 つの ZIP パッケージにバンドルして、すべてのコンポーネントが一緒にアップロードされるようにします。
ディレクトリ構造の保持:ローカルのディレクトリツリーを ZIP ファイルにパッケージ化して OSS にアップロードします。 解凍ルールにより、バケット内に元のフォルダー構造が再作成されます。
コンテンツ配信:オブジェクトを ZIP パッケージに圧縮して OSS にアップロードします。 パッケージは指定されたディレクトリに解凍され、転送時間と帯域幅の使用量を削減します。
仕組み
OSS は Function Compute を使用して、アップロードされた ZIP パッケージを解凍します。 次の図にそのプロセスを示します。
解凍ルールのプレフィックスパラメーターで指定されたディレクトリに ZIP パッケージがアップロードされます。
Function Compute トリガーが呼び出されます。
解凍ルールを設定する際、OSS が AliyunOSSEventNotificationRole ロールを使用して Function Compute にアクセスできるように、トリガーに権限を付与します。
Function Compute が ZIP パッケージを解凍し、解凍されたオブジェクトを指定の OSS ディレクトリに保存します。
解凍ルールを設定する際、Function Compute が OSS バケットへの読み取りと書き込みを行えるように権限を付与します。
課金
ZIP パッケージの解凍では、OSS と Function Compute の両方で料金が発生します。 OSS と Function Compute 間の内部エンドポイントを介したデータ転送は無料です。
OSS 側では、API オペレーションの呼び出しとオブジェクトストレージに対して課金されます。 詳細については、「課金概要」をご参照ください。
Function Compute 側では、実行時間に基づいて vCPU 使用量、メモリ使用量、ディスク使用量に対して課金されます。 詳細については、「課金概要」をご参照ください。
たとえば、ZIP パッケージの解凍タスクが 3 GB のメモリと 2 コアの vCPU を持つ Function Compute インスタンスを使用し、解凍の完了に 5 分かかり、一時的に作成されたストレージファイルに割り当てられるディスクのデフォルトサイズが 10 GB の場合、Function Compute によって請求される料金は、次の式に基づいて計算されます。
リソース使用項目 | 単位 | 計算式 | 課金例 |
vCPU 使用量 | vCPU 秒 | アクティブ vCPU 使用量 = vCPU 容量 × 実行時間 (秒) | 関数が 2 vCPU で設定され、300 秒間実行される場合、1 回の実行での vCPU 使用量は 2 × 300 = 600 vCPU 秒 です。 |
メモリ使用量 | GB 秒 | メモリ使用量 = メモリ容量 (GB) × 実行時間 (秒) | 関数が 3 GB のメモリサイズで設定され、300 秒間実行される場合、1 回の実行でのメモリ使用量は 3 × 300 = 900 GB 秒 です。 |
ディスク使用量 | GB 秒 | ディスク使用量 = ディスク容量 (GB) × 実行時間 (秒) 注:512 MB までのディスク使用量は無料です。 | 関数が 10 GB の一時ディスクサイズで設定され、300 秒間実行される場合、1 回の実行でのディスク使用量は (10 - 512 / 1024) × 300 = 2850 GB 秒 です。 |
制限事項
ストレージクラス:コールドアーカイブ オブジェクトは、解凍する前に復元する必要があります。 アーカイブ直接読み取りが有効になっていないバケット内のアーカイブオブジェクトも、解凍する前に復元する必要があります。
オブジェクトとディレクトリの命名:オブジェクトとディレクトリの名前は UTF-8 または GB 2312 でエンコードしてください。 他のエンコーディングでは、解凍の失敗や名前の文字化けが発生する可能性があります。
オブジェクトサイズと解凍時間:ZIP パッケージ内の各オブジェクトは 1 GB を超えることはできません。 必要に応じて解凍時間を増やすことができます。 詳細については、「解凍タイムアウトが原因でZIPパッケージの解凍に失敗した場合はどうすればよいですか?」をご参照ください。
ZIP パッケージ解凍ルールの設定
OSSコンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションペインで、 を選択します。
Zip パッケージを解凍 をクリックします。Zip パッケージを解凍 パネルで、次の表に示すパラメーターを設定します。
パラメーター
パラメーター
必須
説明
[サービス認可]
はい
Function Compute が OSS への読み取りと書き込み、および関数の実行をできるように権限を付与します。
[承認] をクリックします。表示されたページで承認を完了します。
[トリガーの認可]
はい
OSS が Function Compute にアクセスできるように権限を付与します。
[承認] をクリックします。表示されたページで承認を完了します。OSS が Function Compute へのアクセスを承認されている場合、[トリガーの承認] パラメーターの代わりに [トリガーロール] パラメーターが表示されます。
[プレフィックス]
いいえ
解凍をトリガーする ZIP パッケージ名のプレフィックスです。 このプレフィックスを含む名前の ZIP パッケージをアップロードするか、プレフィックスで指定されたディレクトリにアップロードすると、Function Compute がそれを解凍します。 指定しない場合、バケットにアップロードされたすべての ZIP パッケージが解凍されます。
重要このパラメーターを指定しないと、解凍タスクが繰り返し実行される可能性があります。 したがって、各解凍ルールにプレフィックスを指定することを推奨します。 詳細については、「トリガーループを回避するにはどうすればよいですか?」をご参照ください。
[宛先ディレクトリ]
いいえ
解凍されたオブジェクトを保存するディレクトリです。 指定しない場合、オブジェクトはバケットのルートディレクトリに解凍されます。
展開されたオブジェクトを ZIP パッケージと同じ名前のサブディレクトリに保存するには、[宛先ディレクトリに圧縮オブジェクト名を追加] を選択します。
展開されたオブジェクトをサブディレクトリなしで宛先ディレクトリに直接保存するには、[宛先ディレクトリに解凍] を選択します。次の表に設定例を示します。
警告OSS-HDFS が有効になっているバケットで ZIP パッケージの解凍ルールを設定する際に、サービスの中断、データの破損、またはデータの損失を防ぐには、解凍先ディレクトリ を
.dlsdata/に設定しないでください。解凍設定の例
シナリオ
設定方法
解凍後のストレージ構造
zipfolder ディレクトリにアップロードされたすべての ZIP パッケージを、ZIP パッケージと同じ名前のサブディレクトリを作成せずに destfolder ディレクトリに解凍します。
[プレフィックス] を zipfolder/ に設定します。
[宛先ディレクトリ] を destfolder に設定します。
[展開先ディレクトリに解凍] を選択します。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip└─── destfolder/ ├─── a.txt ├─── b.txt └─── ...zipfolder ディレクトリにアップロードされたすべての ZIP パッケージを、バケットのルートディレクトリにあるパッケージと同じ名前のサブディレクトリに解凍します。
次のパラメーターを設定します:
[プレフィックス] を zipfolder/ に設定します。
[宛先ディレクトリ] は空のままにしてください。
[圧縮オブジェクト名を宛先ディレクトリに追加する] を選択します。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip├─── a/│ ├─── a.txt│ └─── ...└─── b/ ├─── b.txt └─── ...zipfolder ディレクトリにアップロードされたすべての ZIP パッケージを、destfolder ディレクトリにあるパッケージと同じ名前のサブディレクトリに解凍します。
次のパラメーターを設定します:
[プレフィックス] を zipfolder/ に設定します。
[宛先ディレクトリ] を destfolder に設定します。
[宛先ディレクトリに圧縮オブジェクト名を追加する] を選択します。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip└─── destfolder/ ├─── a/ │ ├─── a.txt │ └─── ... └─── b/ ├─── b.txt └─── ...[利用規約を読み、Function Compute を有効化して圧縮ファイルを処理することに同意します。処理できるのは、UTF-8 または GB 2312 でエンコードされたファイル名またはフォルダー名のみです。] にチェックを入れ、[OK] をクリックします。
ZIP パッケージ解凍ルールの変更
解凍ルールを変更して、トリガープレフィックスまたは関数設定を更新します。
プレフィックスパラメーターの変更
OSS コンソールの Zip パッケージを解凍 ページで、変更したいトリガーを見つけ、[操作] 列の [編集] をクリックします。
「関数の詳細」ページの [トリガー] タブで、目的のトリガーを見つけ、「操作」列の [変更] をクリックします。
[トリガーの変更] パネルで、[オブジェクトプレフィックス] パラメーターを変更し、その他のパラメーターはデフォルト設定のままにします。
[OK] をクリックします。
関数設定の変更
関数詳細ページの [設定] タブで、[基本設定] セクションまたは [環境情報] セクション内の [変更] をクリックします。
[メモリ] や [実行タイムアウト期間] などの関数設定を変更します。
詳細については、「関数の管理」をご参照ください。
トリガーの削除
削除したトリガーは復元できません。 トリガーを削除しても、進行中の解凍タスクは中断されません。
「関数詳細」ページの [トリガー] タブで、削除するトリガーを見つけ、「操作」列の [削除] をクリックします。
表示されるメッセージで、[削除] をクリックします。
解凍結果の取得
解凍関数が実行を終了した後、OSS は解凍結果を自動的には返しません。 次の方法を使用して解凍結果を取得し、バックエンドサービスに転送できます。
方法 1:タスクモードでの解凍ステータスの照会
タスクモードを有効にすると、解凍関数の各実行で非同期タスクレコードが生成されます。 タスクリストでのステータスの表示や、API オペレーションの呼び出しによる照会が可能です。
Function Compute コンソールで、解凍関数の関数詳細ページに移動し、[タスク] タブをクリックします。
タスクモード設定エリアで、編集 をクリックし、[タスクモード] をオンにします。タスクモードはデフォルトでオフになっています。同じエリアで、[最大リトライ回数] (デフォルト: 3)、[メッセージの有効期間] (デフォルト: 1 日)、および [呼び出し先] (デフォルト: 未設定) も設定できます。
タスクモードがオンになると、解凍関数の各実行で非同期タスクレコードが生成されます。 タスクリストには、タスク ID、タスクステータス、開始時刻と終了時刻、実行時間、再試行回数、リクエスト ID、インスタンス ID が表示されます。
また、Function Compute の
GetAsyncTaskAPI を呼び出してタスクのステータスを照会することもできます。返されたタスクステータスが「Succeeded」の場合、解凍タスクが正常に完了したことを示します。
方法 2:非同期呼び出し先の設定による自動通知
タスクモード設定エリアで、[成功時に別のサービスを呼び出す] または [失敗時に別のサービスを呼び出す] をオンにすると、解凍タスクの終了時に、指定した宛先サービスへ自動的に通知が送信されます。 次の宛先サービスタイプがサポートされています。
Function Compute (FC)
ApsaraMQ for RocketMQ
Simple Message Queue (旧称:MNS)
EventBridge
方法 3:カスタム HTTP コールバックによるバックエンドサービスへの通知
組み込みの非同期呼び出し先機能では、カスタム HTTP コールバックはサポートされていません。 ACK クラスターにデプロイされたサービスなど、自己管理型のバックエンドサービスに解凍結果を通知する必要がある場合は、次の方法で行います。
バックエンドサービスのエンドポイントに HTTP 通知リクエストを送信する Function Compute 関数を作成します。
方法 2 の手順に従って、この関数を解凍関数の非同期呼び出し先として設定します。
解凍タスクが終了すると、Function Compute がこの関数を呼び出します。その後、この関数がバックエンドサービスに HTTP 通知を送信します。
