日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

配置原生OSS觸發器

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

您可以在函數計算控制臺創建并配置原生OSS觸發器,當在OSS上發生特定事件時會自動觸發函數執行。這可以讓您輕松響應如文件上傳等事件,無需在代碼中增加監聽事件邏輯即可快速實現完整的流程。

示例場景

您可以配置一個OSS觸發器,并將其文件前綴設置為source。當有圖片存入指定的OSS Bucket中的source目錄下,會自動觸發函數執行。函數將圖片進行縮放處理后存放到同一個Bucket的processed目錄下,即將source/a.png處理為processed/a.png

前提條件

使用限制

  • 原生OSS觸發器,一個Bucket最多支持關聯10個觸發器。

    說明

    如果您需要在一個Bucket內,關聯更多的OSS觸發器,可以選擇創建EventBridge類別的OSS觸發器。通常情況下,不推薦一個Bucket關聯10個以上的觸發器。如需創建,建議您創建新的Bucket,并基于新的Bucket創建觸發器。

  • 原生OSS觸發器和EventBridge類別的OSS觸發器配置的文件前綴和文件后綴都不支持模糊匹配和正則匹配。如果想配置多個文件前綴和文件后綴,可使用EventBridge類別的OSS觸發器。

步驟一:創建OSS觸發器

  1. 登錄函數計算控制臺,在左側導航欄,單擊函數

  2. 在頂部菜單欄,選擇地域,然后在函數頁面,單擊目標函數。

  3. 在函數配置頁面,選擇配置頁簽,在左側導航欄,單擊觸發器,然后單擊創建觸發器

  4. 在創建觸發器面板,填寫相關信息,然后單擊確定

    配置項

    操作

    本文示例

    觸發器類型

    選擇對象存儲 OSS

    對象存儲 OSS

    名稱

    填寫自定義的觸發器名稱。

    oss-trigger

    版本或別名

    默認值為LATEST,如果您需要創建其他版本或別名的觸發器,需先在函數詳情頁的版本或別名下拉列表選擇該版本。關于版本和別名的簡介,請參見管理版本管理別名

    LATEST

    Bucket 名稱

    選擇已創建的OSS Bucket。

    testbucket

    文件前綴

    輸入要匹配的文件名稱的前綴。建議您配置文件前綴和后綴,避免觸發事件嵌套循環觸發引起額外費用。此外,一個Bucket的不同觸發器如果指定了相同的事件類型,則前綴和后綴不能重復。詳細信息,請參見原生OSS觸發器觸發規則

    重要

    文件前綴不能以/開頭,否則會導致OSS觸發器無法被觸發。

    source

    文件后綴

    輸入要匹配的文件名稱的后綴。強烈建議您配置前綴和后綴,避免觸發事件嵌套循環觸發引起額外費用。另外,一個Bucket的不同觸發器如果指定了相同的事件類型,則前綴和后綴不能重復。詳細信息,請參見OSS觸發器觸發規則

    png

    觸發事件

    選擇一個或多個觸發事件。關于對象存儲OSS的事件類型,請參見OSS事件定義

    本示例選擇oss:ObjectCreated:PutObject

    oss:ObjectCreated:PutObjectoss:ObjectCreated:PostObjectoss:ObjectCreated:CompleteMultipartUpload

    角色名稱

    選擇AliyunOSSEventNotificationRole

    說明

    如果您第一次創建該類型的觸發器,則需要在單擊確定后,在彈出的對話框中選擇立即授權

    AliyunOSSEventNotificationRole

    創建完成后,在觸發器名稱列表中顯示已創建的觸發器。如需對創建的觸發器進行修改或刪除,具體操作,請參見觸發器管理

步驟二:配置函數入口參數

OSS事件源會以event的形式作為輸入參數傳遞給函數,您可以手動將event傳給函數模擬觸發事件。

  1. 在函數配置頁面的代碼頁簽,單擊測試函數右側的image.png圖標,從下拉列表中,選擇配置測試參數

  2. 配置測試參數面板,選擇創建新測試事件編輯已有測試事件,填寫事件名稱和事件內容,然后單擊確定。

    說明

    event內容請根據創建觸發器時的信息進行配置,同時需要確保配置的Bucket中存在指定的文件(本文示例中是source/a.png文件),否則會無法觸發函數執行,或者函數執行會失敗。

    event是函數計算的入口參數,當指定的OSS Bucket發生對象創建或對象刪除事件時,會將事件數據以JSON格式發送給綁定的函數。具體格式如下所示。

    {
        "events": [
            {
                "eventName": "ObjectCreated:PutObject",
                "eventSource": "acs:oss",
                "eventTime": "2022-08-13T06:45:43.000Z",
                "eventVersion": "1.0",
                "oss": {
                    "bucket": {
                        "arn": "acs:oss:cn-hangzhou:123456789:testbucket",
                        "name": "testbucket",
                        "ownerIdentity": "164901546557****"
                    },
                    "object": {
                        "deltaSize": 122539,
                        "eTag": "688A7BF4F233DC9C88A80BF985AB****",
                        "key": "source/a.png",
                        "size": 122539
                    },
                    "ossSchemaVersion": "1.0",
                    "ruleId": "9adac8e253828f4f7c0466d941fa3db81161****"
                },
                "region": "cn-hangzhou",
                "requestParameters": {
                    "sourceIPAddress": "140.205.XX.XX"
                },
                "responseElements": {
                    "requestId": "58F9FF2D3DF792092E12044C"
                },
                "userIdentity": {
                    "principalId": "164901546557****"
                }
            }
        ]
    }

    event參數中不同屬性字段的解釋如下表所示。

    參數

    類型

    示例值

    描述

    eventName

    String

    ObjectCreated:PutObject

    事件類型。

    eventSource

    String

    acs:oss

    事件源,固定為acs:oss

    eventTime

    String

    2022-08-13T06:45:43.000Z

    事件產生的時間。使用ISO-8601標準時間格式。

    eventVersion

    String

    1.0

    事件協議的版本。

    oss

    Map

    OSS事件內容。

    bucket

    Map

    bucket參數內容。

    name

    String

    testbucket

    Bucket的名稱。

    arn

    String

    acs:oss:cn-hangzhou:123456789:testbucket

    Bucket的唯一標識符。

    ownerIdentity

    String

    164901546557****

    創建Bucket的用戶ID。

    object

    Map

    object參數內容。

    size

    Int

    122539

    object的大小。單位:Byte。

    deltaSize

    Int

    122539

    object的大小變化量。單位:Byte。

    • 如果新增一個文件,此參數的值表示文件大小。

    • 如果同名覆蓋一個文件,此參數的值表示新文件與舊文件的大小差值。

    eTag

    String

    688A7BF4F233DC9C88A80BF985AB****

    Object的標簽。

    key

    String

    source/a.png

    Object的名稱。

    ossSchemaVersion

    String

    1.0

    OSS模式的版本號。

    ruleId

    String

    9adac8e253828f4f7c0466d941fa3db81161****

    事件匹配的規則ID。

    region

    String

    cn-hangzhou

    Bucket所在的地域。

    requestParameters

    Map

    請求參數。

    sourceIPAddress

    String

    140.205.XX.XX

    請求的源IP地址。

    responseElements

    Map

    響應元素。

    requestId

    String

    58F9FF2D3DF792092E12044C

    請求對應的Request ID。

    userIdentity

    Map

    用戶屬性。

    principalId

    String

    164901546557****

    請求發起者的阿里云賬號ID。

步驟三:編寫函數代碼并測試

OSS觸發器創建完成后,您可以開始編寫函數代碼并測試,以驗證代碼的正確性。在實際操作過程中,發生OSS事件時,函數會自動被觸發執行。

警告

代碼中一定要避免循環觸發。一個典型的循環觸發場景是OSS的某個Bucket上傳文件事件觸發函數執行,此函數執行完成后又生成了一個或多個文件再寫回到OSS的Bucket里,這個寫入動作又觸發了函數執行,形成了鏈狀循環。更多信息,請參見原生OSS觸發器觸發規則

  1. 在函數配置頁面的代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼

    • 支持在線編輯代碼的運行環境的示例代碼如下。

      說明

      如果您要在您的函數中讀寫OSS資源,建議使用OSS內網服務地址進行訪問,避免使用公網訪問,產生公網費用。關于OSS內網服務地址的格式,請參見訪問域名和數據中心

      "use strict";
      /*
      本代碼樣例主要實現以下功能:
      *   1. 從event中解析出OSS事件觸發相關信息。
      *   2. 根據以上獲取的信息,初始化OSS客戶端。
      *   3. 將源圖片resize后持久化到OSS bucket下指定的目標圖片路徑,從而實現圖片備份。
      
      
      This code sample mainly implements the following functions:
      * 1. Parse the OSS event trigger related information from the event.
      * 2. According to the above information, initialize the OSS client.
      * 3. Resize the source image and then store the processed image into the same bucket's copy folder to backup the image.
      */
      
      const OSS = require("ali-oss");
      
      exports.handler = async function(event, context, callback) {
          console.log("The content in context entity is: \n");
          console.dir(context);
      
          const {accessKeyId, accessKeySecret, securityToken} = context.credentials;
      
          const events = JSON.parse(event.toString()).events;
          console.log("The content in event entity is: \n");
          console.dir(events);
      
          let objectName = events[0].oss.object.key;
          let region = events[0].region;
          let bucketName = events[0].oss.bucket.name;
      
          // 連接目標OSS。
          // Connect to the target OSS
          const client = new OSS({
              region: region,
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              stsToken: securityToken,
              bucket: bucketName,
              endpoint: "https://oss-" + region + "-internal.aliyuncs.com"
          });
      
          console.log("The client entity is: \n");
          console.dir(events);
      
          const targetImage = objectName.replace("source/", "processed/")
          // 將圖片縮放為固定寬高128 px。
          const processStr = "image/resize,m_fixed,w_128,h_128"
          // 將源圖片resize后再存儲到目標圖片路徑。
          const result = await client.processObjectSave(
              objectName,
              targetImage,
              processStr,
              bucketName
          );
          console.log(result.res.status);
      
          callback(null, "done");
      }
      """
      本代碼樣例主要實現以下功能:
      * 從event中解析出OSS事件觸發相關信息。
      * 根據以上獲取的信息,初始化OSS bucket客戶端。
      * 將源圖片resize后持久化到OSS bucket下指定的目標圖片路徑,從而實現圖片備份。
      
      
      This sample code is mainly doing the following things:
      * Get OSS processing related information from event.
      * Initiate OSS client with target bucket.
      * Resize the source image and then store the processed image into the same bucket's copy folder to backup the image.
      
      """
      
      # -*- coding: utf-8 -*-
      import oss2, json
      import base64
      
      def handler(event, context):
          # 可以通過context.credentials獲取密鑰信息。
          # Access keys can be fetched through context.credentials
          print("The content in context entity is: \n")
          print(context)
          creds = context.credentials
      
          # 設置權鑒,供OSS sdk使用。
          # Setup auth, required by OSS sdk.
          auth = oss2.StsAuth(
              creds.access_key_id,
              creds.access_key_secret,
              creds.security_token)
      
          print("The content in event entity is: \n")
          print(event)
          # Load event content.
          oss_raw_data = json.loads(event)
          # Get oss event related parameters passed by oss trigger.
          oss_info_map = oss_raw_data['events'][0]['oss']
          # Get oss bucket name.
          bucket_name = oss_info_map['bucket']['name']
          # Set oss service endpoint.
          endpoint = 'oss-' + oss_raw_data['events'][0]['region'] + '-internal.aliyuncs.com'
          # Initiate oss client.
          bucket = oss2.Bucket(auth, endpoint, bucket_name)
          object_name = oss_info_map['object']['key']
      
          # Download original image from oss bucket.
          remote_stream = bucket.get_object(object_name)
          if not remote_stream:
              print(f'{object_name} does not exist in bucket {bucket_name}')
              return
          # Processed images will be saved to processed/
          processed_path = object_name.replace('source/', 'processed/')
      
          # 將圖片縮放為固定寬高128 px。
          style = 'image/resize,m_fixed,w_128,h_128'
          # 指定處理后圖片名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如exampledir/example.jpg。
          process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
              oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(processed_path))),
              oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(bucket_name))))
          result = bucket.process_object(object_name, process)
          print(result)
      /*本代碼樣例主要實現以下功能:
      *   1. 從request中解析出 endpoint,bucket,object。
      *   2. 根據以上獲取的信息,初始化OSS客戶端。
      *   3. 將源圖片resize后持久化到OSS bucket下指定的目標圖片路徑,從而實現圖片備份。
      *
      *This code sample mainly implements the following functions:
      * 1. Parse out endpoint, bucket, object from request.
      * 2. According to the information obtained above, initialize the OSS client.
      * 3. Resize the source image and then store the processed image into the same bucket's copy folder to backup the image.
      */
      <?php
      
      use RingCentral\Psr7\Response;
      use OSS\OssClient;
      use OSS\Core\OssException;
      
      function base64url_encode($data)
      {
          return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
      }
      
      function handler($event, $context) {
        $event           = json_decode($event, $assoc = true);
        /*
          阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
          建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
          本示例以從上下文中獲取AccessKey/AccessSecretKey為例。
        */
        $accessKeyId     = $context["credentials"]["accessKeyId"];
        $accessKeySecret = $context["credentials"]["accessKeySecret"];
        $securityToken   = $context["credentials"]["securityToken"];
        $evt        = $event['events']{0};
        $bucketName = $evt['oss']['bucket']['name'];
        $endpoint   = 'oss-' . $evt['region'] . '-internal.aliyuncs.com';
        $objectName = $evt['oss']['object']['key'];
        $targetObject = str_replace("source/", "processed/", $objectName);
      
          try {
              // 連接OSS。
              // Connect to OSS.
              $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
              // 將圖片縮放為固定寬高128px。
              $style = "image/resize,m_fixed,w_128,h_128";
              $process = $style.
                 '|sys/saveas'.
                 ',o_'.base64url_encode($targetObject).
                 ',b_'.base64url_encode($bucketName);
              // 將圖片 Resize 后保存到目標文件中。
              $result = $ossClient->processObject($bucketName, $objectName, $process);
              // 打印處理結果。
              print($result);
          } catch (OssException $e) {
              print_r(__FUNCTION__ . ": FAILED\n");
              printf($e->getMessage() . "\n");
          }
      
          print(__FUNCTION__ . ": OK" . "\n");
      
          return $targetObject;
      }
    • 不支持在線編輯代碼的運行環境的示例代碼如下。

  2. 單擊測試函數

    執行完成后,您可以在代碼頁簽的上方查看執行結果。

常見問題

相關文檔

  • 如果您想了解可以配置的OSS事件類型,請參見OSS事件定義

  • 如果您需要對創建的觸發器進行修改或刪除,具體操作請參見更新觸發器配置

  • 如果您需要在一個Bucket內關聯10個以上的OSS觸發器,請參見配置EventBridge類別的OSS觸發器

  • 觸發器相關問題

    • 如果您希望查看函數的執行觸發了哪個事件,可以手動在代碼邏輯中打印事件類型日志,具體請參見日志記錄

    • 如果您希望在函數中調用另一個函數,可以使用API調用指定函數或使用函數工作流編排函數。如果調用的函數需要執行耗時操作且均為異步調用,可以配置異步調用目標服務。具體請參見函數可以相互調用嗎?配置異步調用目標服務