このチュートリアルでは、Serverless Devs または Function Compute コンソールを使用して関数をデプロイする方法を説明します。指定されたルールに一致する ZIP ファイルを Object Storage Service (OSS) にアップロードすると、その関数がトリガーされ、ファイルが自動的に展開されます。
注意事項
ファイル名およびフォルダ名には UTF-8 または GB 2312 エンコーディングを使用してください。そうでない場合、展開後のファイル名やフォルダ名が文字化けしたり、展開プロセスが中断される可能性があります。
圧縮ファイルをバケットにアップロードする際、アーカイブストレージまたはコールドアーカイブストレージタイプを選択しないでください。選択すると、関数がトリガーされません。
展開失敗を防ぐため、標準的な ZIP コマンドラインツールを使用して圧縮ファイルを作成してください。
圧縮アーカイブ内の各ファイルは 1 GB を超えてはなりません。超えると、展開が失敗する可能性があります。
単一のアーカイブの展開時間制限は 2 時間です。この制限を超えるタスクは失敗します。
関数のデフォルト実行タイムアウトは 2 時間です。ビジネス要件に応じてこのタイムアウト値を調整できます。
仕組み
Function Compute コンソールで展開を自動化する
前提条件
操作手順
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[アプリケーション] をクリックします。
アプリ ページで、アプリケーションの作成 をクリックします。
アプリケーションの作成 ページで、アプリケーションの作成方法を選択します。
このチュートリアルでは、テンプレートを使用してアプリケーションを作成 オプションを示します。
テンプレートセクションで、[人気のテンプレート] タブを選択します。start-unzip-oss カードにカーソルを合わせ、今すぐ作成 をクリックします。
アプリケーションの作成 ページで、以下のパラメーターを設定し、[デフォルト環境の作成とデプロイ] をクリックします。
以下の表は重要なパラメーターを示しています。その他のパラメーターはデフォルト値を使用できます。
パラメーター
説明
基本設定
デプロイタイプ
直接デプロイ を選択します。
ロール名
デフォルト値は AliyunFCServerlessDevsRole です。現在の権限が不十分な場合は、ポリシーの追加 をクリックし、ダイアログボックスでポリシーを選択してから、追加 をクリックします。
詳細設定
リージョン
アプリケーションをデプロイするリージョンを選択します。
サービス名
アプリケーションのサービス名を指定します。
関数名
アプリケーションの関数名を指定します。
RAM ロール ARN
関数をトリガーするために OSS が使用するロールを選択します。このロールには、AliyunOSSFullAccess および AliyunFCDefaultRolePolicy 権限ポリシーがアタッチされていることを確認してください。
OSS バケット名
既存のバケットを選択します。
プレフィックス
ファイルのプレフィックスを設定します。デフォルトは src です。同一バケット内の異なるトリガーでは、同じファイルプレフィックスを使用できません。
展開先ディレクトリ
展開済みファイルの宛先ディレクトリを指定します。デフォルトは dst です。
説明トリガーループを回避するため、このディレクトリが プレフィックス と異なることを確認してください。
ファイル名をディレクトリとして保持
圧縮ファイル名にちなんだサブディレクトリを作成するかどうかを決定します。有効な値は次のとおりです。
true:展開先パス内に圧縮ファイル名のディレクトリを保持します。たとえば、展開先ディレクトリ が target で、圧縮ファイル名が source.zip の場合、展開後のファイルパスは target/source/... になります。
false:ファイルをターゲットディレクトリに直接展開します。上記の例では、展開後のファイルパスは target/... になります。
トリガー RAM ロール ARN
デフォルト値は AliyunOSSEventNotificationRole です。OSS はこのロールを使用してイベント通知を送信し、関数を呼び出します。
アプリケーションをテストします。
指定された プレフィックス で始まるパスに .zip ファイルをアップロードすると、アプリケーションの関数がトリガーされ、ファイルが自動的に展開されて、指定された 展開先ディレクトリ に保存されます。
たとえば、プレフィックス を source に、展開先ディレクトリ を target に設定したとします。source または source1 に .zip ファイルをアップロードすると、関数がトリガーされ、ファイルが自動的に展開されて target に保存されます。
(推奨) Serverless Devs を使用して展開を自動化する
前提条件
Function Compute を有効化します。詳細については、「関数のクイック作成」をご参照ください。
OSS を有効化し、バケットを作成します。詳細については、「OSS コンソール入門」をご参照ください。
Serverless Devs をインストールおよび設定します。詳細については、「Serverless Devs のインストール」および「Serverless Devs の設定」をご参照ください。
操作手順
次のコマンドを実行して、サンプルプロジェクトをクローンします。
git clone git@github.com:awesome-fc/decompress-oss.git次のコマンドを実行して、プロジェクトディレクトリに移動します。
cd decompress-osss.yaml ファイル内の構成を編集し、ファイルを保存します。
ファイル内で、
bucketNameパラメーターの値をyour-bucketから作成したバケットの名前に変更します。オプション: 必要に応じて、OSS トリガーのプレフィックス
Prefix、サフィックスSuffix、および展開済みファイルの保存ディレクトリPROCESSED_DIRのパラメーターを変更します。
説明この例では、OSS トリガーのプレフィックスはデフォルトで
src/ですが、srcに設定することもできます。展開済みファイルの宛先ディレクトリはデフォルトでdst/です。次のコマンドを実行して、プロジェクトをデプロイします。
sudo s fc-decompress-oss-invoke-fc-EnhancedInstance deploy -y出力例:
Checking Service, Function, Triggers (18.63s) Creating Service, Function, Triggers (13.44s) There is auto config in the service: enhancedInstance-decompress Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigger * Remove CustomDomain: s remove domain fc-decompress-oss-invoke-fc-EnhancedInstance: region: cn-hangzhou service: name: enhancedInstance-decompress function: name: oss-invoke-fc runtime: python3 handler: index.handler memorySize: 4096 timeout: 7200 triggers: - type: oss name: zip-t - type: oss name: gz-t - type: oss name: tar-tバケット内の指定ディレクトリに .zip、.tar、または .gz ファイルなどの圧縮ファイルをアップロードして、展開関数をトリガーします。
この例では、デフォルトのディレクトリは src/ で、展開済みファイルは自動的に dst/ に生成されます。
参考
OSS にアップロードされた ZIP ファイルのみを展開する必要がある場合は、OSS コンソールで ZIP ファイルの自動展開を直接設定できます。詳細については、「ZIP パッケージのアップロードと自動展開」をご参照ください。
単一のバケットに対して 10 個を超えるトリガーが必要な場合は、EventBridge ベースの OSS トリガーを作成できます。詳細については、「EventBridge ベースの OSS トリガーの設定」をご参照ください。
Function Compute を使用して OSS のオブジェクトを ZIP ファイルとしてパッケージ化してダウンロードする必要がある場合は、「複数のファイルを ZIP パッケージとしてダウンロード」をご参照ください。