Intelligent Media Management (IMM) は、さまざまな種類のデータを処理できます。一部の種類のデータの処理には長時間を要し、リクエストに対して処理結果を即時に返すことができません。IMM は、このようなデータを処理するために非同期 API 操作を提供しています。ほとんどの非同期 API 操作は、CreateXXXTask
の形式で名前が付けられています。さらに、IMM では、メッセージ通知を使用してタスク結果を取得できます。
非同期 IMM API 操作は時間のかかるリクエストを処理し、リクエスト結果を同期的に返すことはできません。非同期処理では、データ処理と多くの計算を伴う操作はバックグラウンドで実行され、ユーザーエクスペリエンスへの影響を避けるためにタスクをスケジュールできます。非同期処理はメインスレッドのブロックを回避し、システムパフォーマンスの向上に役立ちます。
タスクプロセス
ソースデータを Alibaba Cloud Object Storage Service (OSS) にアップロードします。
CreateXXXTask
形式の非同期 IMM API 操作を呼び出して、非同期タスクを作成します。IMM は、指定した OSS URI からソースデータを取得します。
IMM は、指定した OSS URI にデータ処理結果を書き込みます。
IMM は、指定した Message Service (MNS) または ApsaraMQ for RocketMQ トピックにメッセージでタスクステータスを送信します。
MNS または ApsaraMQ for RocketMQ は、メッセージをサービスにプッシュします。
タスクの入力と出力
入力データのパラメーターの名前には、一般的に Source というプレフィックスが付きます。以下のパラメーターがサポートされています。
SourceURI: 入力データのアドレス。値を OSS URI に設定します。
Sources: 複数の入力 URI の配列。
Source: 入力データのアドレス。このパラメーターを使用して、複数の URI を指定できます。
出力データのパラメーターの名前には、一般的に Target というプレフィックスが付きます。以下のパラメーターがサポートされています。
TargetURI: 出力データのアドレス。このパラメーターはテンプレート構文をサポートしています。
TargetURIPrefix: 出力データのアドレスのプレフィックス。
Target: 出力データのアドレス。このパラメーターを使用して、複数の URI を指定できます。
入力データと出力データは、IMM と同じリージョンに存在する必要があります。
OSS URI
Object Storage Service (OSS) URI は、oss://<bucket>/<object>
形式に従い、オブジェクトを一意に識別します。例: oss://test-bucket/test-object/test.docx
。
<bucket> パラメーターは、IMM プロジェクトと同じリージョンにある OSS バケットの名前を指定します。<object> パラメーターは、ファイル名拡張子を含むオブジェクトのフルパスを指定します。
一般的な無効な形式:
http://bucket.oss-cn-hangzhou.aliyuncs.com/test-object/test.docx
oss://bucket.oss-cn-hangzhou.aliyuncs.com/test-object/test.docx
TargetURI テンプレート
TargetURI テンプレートには、URI にプレースホルダーが含まれています。プレースホルダーは、TargetURI テンプレートが使用されるときに実際の値に置き換えられます。TargetURI テンプレートを使用すると、URI を動的に生成できます。例: oss://{bucket}/{tags.custom}/{dirname}/{barename}.{autoext}
。
詳細については、TargetURI テンプレート を参照してください。
認証
非同期タスクは、指定したアドレスに基づいて入力データを読み取り、出力データを書き込みます。入力データの読み取りと出力データの書き込みを IMM に許可する必要があります。これらのアクセス許可は、IMM プロジェクトに対して指定されます。CreateProject 操作を呼び出してプロジェクトを作成するときに、ServiceRole パラメーターを使用して、IMM が引き受けることができるサービスリンクロールを指定できます。デフォルトのロールは AliyunIMMDefaultRole で、IMM をアクティブ化すると自動的に作成されます。IMM が非同期タスクを実行すると、IMM は指定されたロールを引き受けて、データを取得およびアップロードするためのアクセス許可を取得します。
タスクステータスの取得
MNS または ApsaraMQ for RocketMQ を使用してタスクステータスを取得する
Message Service (MNS) または ApsaraMQ for RocketMQ を使用して、IMM タスクの通知を受信できます。詳細については、タスクプロセス を参照してください。MNS 通知形式の詳細については、非同期メッセージの例 を参照してください。
MNS または ApsaraMQ for RocketMQ と IMM は同じリージョンにある必要があります。
(推奨) Notification パラメーターを使用して、非同期メッセージ通知を受信するための MNS または ApsaraMQ for RocketMQ 構成を指定します
MNS: Notification パラメーターの MNS フィールドを使用して、非同期メッセージ通知を受信するための MNS エンドポイントとトピックを指定できます。
{ "Notification": { "MNS": { "Endpoint": "MNS エンドポイント", // The MNS endpoint "TopicName": "MNS トピック" // The MNS topic } } }
ApsaraMQ for RocketMQ: Notification パラメーターの RocketMQ フィールドを使用して、非同期メッセージ通知を受信するための ApsaraMQ for RocketMQ エンドポイント、トピック、およびインスタンスを指定できます。
{ "Notification": { "RocketMQ": { "Endpoint": "ApsaraMQ for RocketMQ エンドポイント", // The ApsaraMQ for RocketMQ endpoint "TopicName": "ApsaraMQ for RocketMQ トピック", // The ApsaraMQ for RocketMQ topic "InstanceId": "ApsaraMQ for RocketMQ インスタンスの ID" // The ID of the ApsaraMQ for RocketMQ instance } } }
NotifyEndpoint パラメーターと NotifyTopicName パラメーターを使用して、非同期メッセージ通知を受信するための MNS エンドポイントとトピックを指定します
NotifyEndpoint: 通知を受信するためのエンドポイント。デフォルト値は、呼び出し元の MNS エンドポイントです。
NotifyTopicName: 通知が送信される MNS トピックの名前。このパラメーターが指定されていない場合、通知は送信されません。
GetTask 操作を呼び出してタスクステータスを取得する
IMM は、タスクステータスを照会するために使用できる GetTask 操作を提供しています。
GetTask 操作を繰り返し呼び出して、タスクが完了するまでタスクステータスをポーリングできます。ただし、この方法は効率的ではありません。タスクの完了に長時間を要する場合は、多数の GetTask 呼び出しを開始する必要がある場合があります。この場合、グローバルスロットリングがトリガーされ、他の API 呼び出しに影響が及ぶ可能性があります。さらに、GetTask 操作は、ポーリング中に特定の間隔で呼び出されます。タスクは、間隔中の任意の時点で完了する可能性があります。ただし、次の呼び出しまでタスクの完了を認識できません。平均して、レイテンシは間隔の半分です。したがって、本番環境でタスクステータスを取得するためにこの方法を使用することはお勧めしません。
タスク情報は、タスクの開始後 7 日間保持されます。7 日後にはタスク情報を取得できません。
タグの使用
タスクを作成するために API 操作を呼び出すときに、Tags パラメーターを使用して、非同期タスクのタグを指定できます。このパラメーターは、以下のシナリオで使用できます。
MNS メッセージで返されるカスタムデータを指定する場合。
タグでタスクを検索する場合。
TargetURI でタグを変数として使用する場合。