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

配置EventBridge類別的OSS觸發(fā)器

更新時(shí)間:
重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。

如果您需要為OSS觸發(fā)器設(shè)置多個(gè)文件前綴和文件后綴,或者希望在一個(gè)OSS Bucket中關(guān)聯(lián)10個(gè)以上的觸發(fā)器,您可以創(chuàng)建EventBridge類別的OSS觸發(fā)器,以便輕松應(yīng)對(duì)文件上傳等事件。

注意事項(xiàng)

EventBridge類別的OSS觸發(fā)器與原生OSS觸發(fā)器不同,您需要關(guān)注以下注意事項(xiàng)。

  • 原生OSS觸發(fā)器,一個(gè)Bucket最多支持關(guān)聯(lián)10個(gè)觸發(fā)器。如您需要在一個(gè)Bucket內(nèi),關(guān)聯(lián)更多的OSS觸發(fā)器,可以選擇創(chuàng)建EventBridge類別的OSS觸發(fā)器。

    說(shuō)明

    通常情況下,不推薦為一個(gè)Bucket關(guān)聯(lián)10個(gè)以上的觸發(fā)器。如需創(chuàng)建,建議您創(chuàng)建新的Bucket,并基于新的Bucket創(chuàng)建觸發(fā)器。

  • 事件總線EventBridge的資源限制數(shù)一致,目前最多支持創(chuàng)建50個(gè)EventBridge類別的OSS觸發(fā)器。更多信息,請(qǐng)參見(jiàn)使用限制

  • EventBridge類別的OSS觸發(fā)器無(wú)需保證語(yǔ)義唯一性,即事件類型文件前綴文件后綴組成的語(yǔ)義無(wú)需唯一。

  • EventBridge類別的OSS觸發(fā)器支持同時(shí)配置多個(gè)文件前綴文件后綴,但是文件前綴文件后綴不支持模糊匹配和正則匹配。

  • EventBridge類別的OSS觸發(fā)器創(chuàng)建成功后,不會(huì)立即生效。需等待約30s后,對(duì)象存儲(chǔ)OSS相關(guān)操作事件才能觸發(fā)函數(shù)。

示例場(chǎng)景

您可以配置一個(gè)OSS觸發(fā)器,在觸發(fā)規(guī)則中設(shè)置前綴為sourcetest,后綴為.rar.zip。當(dāng)有壓縮文件存入指定的OSS Bucket中的source或者test目錄下,且文件后綴為.rar或者.zip時(shí),會(huì)自動(dòng)觸發(fā)函數(shù)執(zhí)行。函數(shù)執(zhí)行完成后,將解壓縮后的文件存放到同一個(gè)Bucket的其他目錄下。

前提條件

步驟一:創(chuàng)建EventBridge類別的OSS觸發(fā)器

  1. 登錄函數(shù)計(jì)算控制臺(tái),在左側(cè)導(dǎo)航欄,單擊服務(wù)及函數(shù)
  2. 在頂部菜單欄,選擇地域,然后在服務(wù)列表頁(yè)面,單擊目標(biāo)服務(wù)。
  3. 函數(shù)管理頁(yè)面,單擊目標(biāo)函數(shù)名稱。

  4. 在函數(shù)詳情頁(yè)面,單擊觸發(fā)器管理頁(yè)簽,從版本或別名下拉列表選擇要?jiǎng)?chuàng)建觸發(fā)器的版本或別名,然后單擊創(chuàng)建觸發(fā)器

  5. 在創(chuàng)建觸發(fā)器面板,觸發(fā)器類型選擇云產(chǎn)品事件觸發(fā)器類型的對(duì)象存儲(chǔ)OSS,設(shè)置其余配置項(xiàng),然后單擊確定

    配置項(xiàng)

    操作

    本文示例

    名稱

    填寫自定義的觸發(fā)器名稱。

    oss-trigger

    版本或別名

    默認(rèn)值為LATEST。如果您需要?jiǎng)?chuàng)建其他版本或別名的觸發(fā)器,需先在函數(shù)詳情頁(yè)的版本或別名下拉列表選擇該版本。關(guān)于版本和別名的簡(jiǎn)介,請(qǐng)參見(jiàn)管理版本管理別名

    LATEST

    Bucket 名稱

    只能選擇在當(dāng)前地域已創(chuàng)建的OSS Bucket。

    bucket-zh****

    文件前綴

    輸入要匹配的文件名稱的前綴。函數(shù)計(jì)算建議您配置前綴和后綴,避免觸發(fā)事件嵌套循環(huán)觸發(fā)引起額外費(fèi)用。

    您可以在控制臺(tái)單擊+添加文件前綴同時(shí)添加多個(gè)文件前綴

    重要

    文件前綴不能以/開(kāi)頭,否則會(huì)導(dǎo)致OSS觸發(fā)器無(wú)法被觸發(fā)。

    • source

    • test

    文件后綴

    輸入要匹配的文件名稱的后綴。函數(shù)計(jì)算建議您配置前綴和后綴,避免觸發(fā)事件嵌套循環(huán)觸發(fā)引起額外費(fèi)用。

    您可以在控制臺(tái)單擊+添加文件后綴同時(shí)添加多個(gè)文件后綴

    png

    事件類型

    選擇一個(gè)或多個(gè)觸發(fā)事件。關(guān)于對(duì)象存儲(chǔ)OSS的事件類型,請(qǐng)參見(jiàn)OSS事件定義

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

    事件模式內(nèi)容

    您創(chuàng)建文件前綴文件后綴觸發(fā)事件后,該配置項(xiàng)自動(dòng)填充。

    重要

    請(qǐng)謹(jǐn)慎修改事件模式內(nèi)容,否則可能導(dǎo)致觸發(fā)器觸發(fā)失敗。請(qǐng)了解事件模式的詳細(xì)規(guī)則后,再?zèng)Q定是否修改。更多信息,請(qǐng)參見(jiàn)事件模式

    {
        "source":[
            "acs.oss"
        ]
    }

    調(diào)用方式

    選擇函數(shù)調(diào)用方式,默認(rèn)為同步調(diào)用。

    • 同步調(diào)用:事件觸發(fā)函數(shù)執(zhí)行,等待函數(shù)調(diào)用完成后,函數(shù)計(jì)算返回執(zhí)行結(jié)果。適用場(chǎng)景較廣泛,更多信息,請(qǐng)參見(jiàn)同步調(diào)用

    • 異步調(diào)用:事件觸發(fā)函數(shù)執(zhí)行后,函數(shù)計(jì)算立即返回響應(yīng)結(jié)果并且確保函數(shù)至少被成功執(zhí)行一次,但不會(huì)返回具體執(zhí)行結(jié)果。適用于調(diào)度延時(shí)較長(zhǎng)的函數(shù)。更多信息,請(qǐng)參見(jiàn)功能概覽

    同步調(diào)用

    觸發(fā)器啟用狀態(tài)

    創(chuàng)建觸發(fā)器后是否立即啟用。默認(rèn)勾選啟用觸發(fā)器,即創(chuàng)建觸發(fā)器后立即啟用觸發(fā)器。

    啟用觸發(fā)器

    推送格式

    指定函數(shù)入口參數(shù)的數(shù)據(jù)格式,該數(shù)據(jù)通過(guò)函數(shù)的Event參數(shù)進(jìn)行傳遞。

    • CloudEvents:以通用格式描述事件數(shù)據(jù)的規(guī)范,包含事件描述以及事件負(fù)載數(shù)據(jù),旨在簡(jiǎn)化不同服務(wù)、平臺(tái)間的事件聲明和傳輸。

    • RawData:只投遞事件負(fù)載數(shù)據(jù),不包含CloudEvents格式中的其它元數(shù)據(jù)信息。

    說(shuō)明

    兩種類型的OSS觸發(fā)器的推送格式不同。原生OSS觸發(fā)器與EventBridge類別的OSS觸發(fā)器不同,其Event參數(shù)支持OSSEvents模板,即阿里云對(duì)象存儲(chǔ)OSS生成的事件格式。

    CloudEvents

    創(chuàng)建完成后,在觸發(fā)器名稱列表中顯示已創(chuàng)建的觸發(fā)器。如需對(duì)創(chuàng)建的觸發(fā)器進(jìn)行修改或刪除,具體操作,請(qǐng)參見(jiàn)觸發(fā)器管理

步驟二:配置函數(shù)入口參數(shù)

EventBridge類別的OSS觸發(fā)器事件源會(huì)以CloudEvents模板作為輸入?yún)?shù)傳遞給函數(shù),您可以手動(dòng)將Event傳給函數(shù)模擬觸發(fā)事件。

  1. 在函數(shù)詳情頁(yè)面,單擊函數(shù)代碼頁(yè)簽,然后單擊測(cè)試函數(shù)右側(cè)xialatubiao圖標(biāo),從下拉列表中,選擇配置測(cè)試參數(shù)

  2. 配置測(cè)試參數(shù)面板,選擇創(chuàng)建新測(cè)試事件編輯已有測(cè)試事件頁(yè)簽,填寫事件名稱和事件內(nèi)容。然后單擊確定

    Event是函數(shù)計(jì)算的入口參數(shù),當(dāng)指定的OSS Bucket發(fā)生指定事件時(shí),會(huì)將事件數(shù)據(jù)以JSON格式發(fā)送給綁定的函數(shù)。具體格式如下所示。

    {
        "datacontenttype": "application/json;charset=utf-8",
        "aliyunaccountid": "143199913****",
        "data": {
            "eventVersion": "1.0",
            "responseElements": {
                "requestId": "6364D216511B143733C5A67B"
            },
            "eventSource": "acs:oss",
            "eventTime": "2023-11-04T08:49:26.000Z",
            "requestParameters": {
                "sourceIPAddress": "140.205.XX.XX"
            },
            "eventName": "ObjectCreated:PutObject",
            "userIdentity": {
                "principalId": "143199913****"
            },
            "region": "cn-hangzhou",
            "oss": {
                "bucket": {
                    "name": "bucket-zh***",
                    "arn": "acs:oss:cn-hangzhou:143199913****:bucket-zh***",
                    "virtualBucket": "",
                    "ownerIdentity": "143199913****"
                },
                "ossSchemaVersion": "1.0",
                "object": {
                    "size": 13,
                    "objectMeta": {
                        "mimeType": "text/plain"
                    },
                    "deltaSize": 13,
                    "eTag": "59CA0EFA9F5633CB0371BBC0355478D8",
                    "key": "source/a.png"
                }
            }
        },
        "subject": "acs:oss:cn-hangzhou:143199913****:bucket-zh***/source/a.png",
        "aliyunoriginalaccountid": "143199913****",
        "source": "acs.oss",
        "type": "oss:ObjectCreated:PutObject",
        "aliyunpublishtime": "203-11-04T08:49:26.745Z",
        "specversion": "1.0",
        "aliyuneventbusname": "default",
        "id": "6364D216511B143733C5A67B",
        "time": "2023-11-04T08:49:26Z",
        "aliyunregionid": "cn-hangzhou"
    }

    Event參數(shù)中不同屬性字段的解釋如下表所示。

    參數(shù)

    類型

    示例值

    描述

    datacontenttype

    String

    application/json;charset=utf-8

    參數(shù)data的內(nèi)容形式。datacontenttype只支持application/json;charset=utf-8格式。

    aliyunaccountid

    String

    143199913****

    阿里云賬號(hào)ID。您的阿里云賬號(hào)ID,可在函數(shù)計(jì)算控制臺(tái)概覽頁(yè)面的常用信息區(qū)域獲取。

    data

    Struct

    {}

    OSS事件內(nèi)容,為JSON對(duì)象。CloudEvents包含事件發(fā)生時(shí)由OSS定義的上下文,data中封裝了這些信息。

    subject

    String

    acs:oss:cn-hangzhou:143199913****:bucket-zh****/source/a.png

    事件主題。

    格式為acs:oss:<region>:<your_account_id>:<your_bucket>,需修改<region>為您創(chuàng)建函數(shù)時(shí)選擇的地域,修改<your_account_id>為您的阿里云賬號(hào)ID,修改<your_bucket>為相同地域下您實(shí)際已經(jīng)創(chuàng)建的Bucket名稱。

    aliyunoriginalaccountid

    String

    143199913****

    阿里云賬號(hào)ID。

    source

    String

    acs.oss

    事件源。OSS觸發(fā)器固定為acs.oss

    type

    String

    oss:ObjectCreated:PutObject

    事件類型。

    aliyunpublishtime

    Timestamp

    2023-11-04T08:49:26.745Z

    接收事件的時(shí)間。

    specversion

    String

    1.0

    CloudEvents協(xié)議版本。

    aliyuneventbusname

    String

    default

    接收事件的事件總線名稱。

    id

    String

    6364D216511B143733C5A67B

    事件ID。

    time

    Timestamp

    2023-11-04T08:49:26Z

    事件產(chǎn)生的時(shí)間。

    aliyunregionid

    String

    cn-hangzhou

    接收事件的地域。

    aliyunpublishaddr

    String

    140.205.XX.XX

    接收事件的服務(wù)器地址。

    Event參數(shù)中data的以下內(nèi)容需根據(jù)實(shí)際情況修改。

    • userIdentity.principalId:修改為您的阿里云賬號(hào)ID。

    • region:修改為您創(chuàng)建函數(shù)時(shí)選擇的地域。

    • oss.bucket.name:修改為函數(shù)相同地域下您實(shí)際已經(jīng)創(chuàng)建的Bucket名稱。

    • oss.bucket.arn:格式為acs:oss:<region>:<your_account_id>:<your_bucket>,需修改<region>為您創(chuàng)建函數(shù)時(shí)選擇的地域,修改<your_account_id>為您的阿里云賬號(hào)ID,修改<your_bucket>為相同地域下您實(shí)際已經(jīng)創(chuàng)建的Bucket名稱。

    • oss.bucket.ownerIdentity:修改為您的阿里云賬號(hào)ID。

    • object.key:修改為您實(shí)際已經(jīng)上傳到目標(biāo)Bucket下的文件。

      說(shuō)明

      請(qǐng)確保您配置的Bucket中存在指定的文件,本文示例為source/a.png,否則無(wú)法觸發(fā)函數(shù)執(zhí)行,或者函數(shù)執(zhí)行會(huì)失敗。

步驟三:編寫函數(shù)代碼并測(cè)試

OSS觸發(fā)器創(chuàng)建完成后,您可以開(kāi)始編寫函數(shù)代碼并測(cè)試,以驗(yàn)證代碼的正確性。在實(shí)際操作過(guò)程中發(fā)生OSS事件時(shí),會(huì)自動(dòng)觸發(fā)函數(shù)執(zhí)行。

警告

代碼中一定要避免循環(huán)觸發(fā),否則會(huì)產(chǎn)生不必要的費(fèi)用。一個(gè)典型的循環(huán)觸發(fā)場(chǎng)景是OSS的某個(gè)Bucket上傳文件事件觸發(fā)函數(shù)執(zhí)行,此函數(shù)執(zhí)行完成后又生成了一個(gè)或多個(gè)文件再寫回到OSS的Bucket里,這個(gè)寫入動(dòng)作又觸發(fā)了函數(shù)執(zhí)行,形成了鏈狀循環(huán)。更多信息,請(qǐng)參見(jiàn)OSS觸發(fā)器觸發(fā)規(guī)則

  1. 在函數(shù)詳情頁(yè)面,單擊函數(shù)代碼頁(yè)簽,在代碼編輯器中編寫代碼,然后單擊部署代碼

    執(zhí)行代碼前的準(zhǔn)備工作和代碼示例如下。

    說(shuō)明

    如果您要在您的函數(shù)中讀寫OSS資源,建議使用OSS內(nèi)網(wǎng)服務(wù)地址進(jìn)行訪問(wèn),避免使用公網(wǎng)訪問(wèn),產(chǎn)生公網(wǎng)費(fèi)用。關(guān)于OSS內(nèi)網(wǎng)服務(wù)地址的格式,請(qǐng)參見(jiàn)訪問(wèn)域名和數(shù)據(jù)中心

    /* 準(zhǔn)備工作:
    1.請(qǐng)先在終端中執(zhí)行以下代碼安裝package.json文件和jimp圖片處理模塊。
      a.在終端執(zhí)行npm init安裝package.json文件。
      b.在終端執(zhí)行npm install jimp安裝jimp圖片處理模塊。
    2.請(qǐng)確保函數(shù)的函數(shù)入口(handler)為index.handler。
    */
    'use strict';
    console.log('Loading function ...');
    var oss = require('ali-oss');
    var fs = require('fs');
    var jimp = require("jimp");
    module.exports.handler = function (eventBuf, ctx, callback) {
        console.log('Received event:', eventBuf.toString());
        var event = JSON.parse(eventBuf);
    
        var ossEvent = event.data;
    
        // OSS地域以“oss-”為前綴,例如“oss-cn-shanghai”。
        var ossRegion = "oss-" + ossEvent.region;
        // 創(chuàng)建OSS客戶端。
        var client = new oss({
            region: ossRegion,
            /*
             阿里云賬號(hào)AccessKey擁有所有API的訪問(wèn)權(quán)限,建議您使用RAM用戶進(jìn)行API訪問(wèn)或日常運(yùn)維。
             建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
             本示例以從上下文中獲取AccessKeyId/AccessSecret為例。
            */
            accessKeyId: ctx.credentials.accessKeyId,
            accessKeySecret: ctx.credentials.accessKeySecret,
            stsToken: ctx.credentials.securityToken
        });
        // 從事件中獲取Bucket名稱。
        client.useBucket(ossEvent.oss.bucket.name);
        // 處理后的圖片被存儲(chǔ)至processed/目錄。
        var newKey = ossEvent.oss.object.key.replace("source/", "processed/");
        var tmpFile = "/tmp/processed.png";
        // 獲取OSS文件對(duì)象。
        console.log('Getting object: ', ossEvent.oss.object.key)
        client.get(ossEvent.oss.object.key).then(function (val) {
            // 從緩存中讀取OSS文件對(duì)象內(nèi)容。
            jimp.read(val.content, function (err, image) {
                if (err) {
                    console.error("Failed to read image");
                    callback(err);
                    return;
                }
                // 調(diào)整圖片大小,并將其保存至tmp文件中。
                image.resize(128, 128).write(tmpFile, function (err) {
                    if (err) {
                        console.error("Failed to write image locally");
                        callback(err);
                        return;
                    }
                    // 將讀取到的文件對(duì)象上傳到OSS存儲(chǔ)空間中并重新命名。
                    console.log('Putting object: ', newKey);
                    client.put(newKey, tmpFile).then(function (val) {
                        console.log('Put object:', val);
                        callback(null, val);
                        return;
                    }).catch(function (err) {
                        console.error('Failed to put object: %j', err);
                        callback(err);
                        return;
                    });
               });
           });
       }).catch(function (err) {
            console.error('Failed to get object: %j', err);
            callback(err);
            return
        });
    };
    #準(zhǔn)備工作:
    #1.請(qǐng)確保函數(shù)所在服務(wù)配置的角色具有訪問(wèn)對(duì)象存儲(chǔ)OSS的權(quán)限。您可以登錄RAM控制臺(tái),為該角色添加訪問(wèn)對(duì)象存儲(chǔ)OSS的權(quán)限。
    #2.請(qǐng)確保函數(shù)的函數(shù)入口(handler)為index.handler。
    
    # -*- coding: utf-8 -*-
    import oss2, json
    from wand.image import Image
    def handler(event, context):
        evt = json.loads(event)
        creds = context.credentials
        # Required by OSS sdk
        # 阿里云賬號(hào)AccessKey擁有所有API的訪問(wèn)權(quán)限,建議您使用RAM用戶進(jìn)行API訪問(wèn)或日常運(yùn)維。
        # 建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
        # 本示例以從上下文中獲取AccessKeyId/AccessSecret為例。
        auth=oss2.StsAuth(
            creds.access_key_id,
            creds.access_key_secret,
            creds.security_token)
        evt = evt['data']
        bucket_name = evt['oss']['bucket']['name']
        endpoint = 'oss-' +  evt['region'] + '-internal.aliyuncs.com'
        bucket = oss2.Bucket(auth, endpoint, bucket_name)
        objectName = evt['oss']['object']['key']
        # Processed images will be saved to processed/
        newKey = objectName.replace("source/", "processed/")
        remote_stream = bucket.get_object(objectName)
        if not remote_stream:
            return
        remote_stream = remote_stream.read()
        with Image(blob=remote_stream)  as img:
            with img.clone() as i:
                i.resize(128, 128)
                new_blob = i.make_blob()
                bucket.put_object(newKey, new_blob)
    /*準(zhǔn)備工作:
    1.請(qǐng)確保函數(shù)所在服務(wù)配置的角色具有訪問(wèn)對(duì)象存儲(chǔ)OSS的權(quán)限。您可以登錄RAM控制臺(tái),為該角色添加訪問(wèn)對(duì)象存儲(chǔ)OSS的權(quán)限。
    2.請(qǐng)確保函數(shù)的函數(shù)入口(handler)為index.handler。
    */
    
    <?php
      use OSS\OssClient;
    function handler($event, $context) {
      $event           = json_decode($event, $assoc = true);
      /*
        阿里云賬號(hào)AccessKey擁有所有API的訪問(wèn)權(quán)限,建議您使用RAM用戶進(jìn)行API訪問(wèn)或日常運(yùn)維。
        建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
        本示例以從上下文中獲取AccessKey/AccessSecretKey為例。
      */
      $accessKeyId     = $context["credentials"]["accessKeyId"];
      $accessKeySecret = $context["credentials"]["accessKeySecret"];
      $securityToken   = $context["credentials"]["securityToken"];
      $evt        = $event['data'];
      $bucketName = $evt['oss']['bucket']['name'];
      $endpoint   = 'oss-' . $evt['region'] . '-internal.aliyuncs.com';
      $objectName = $evt['oss']['object']['key'];
      $newKey = str_replace("source/", "processed/", $objectName);
      try {
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
        $content = $ossClient->getObject($bucketName , $objectName);
        if ($content == null || $content == "") {
          return;
        }
        $imagick = new Imagick();
        $imagick->readImageBlob($content);
        $imagick->resizeImage(128, 128, Imagick::FILTER_LANCZOS, 1);
        $ossClient->putObject($bucketName, $newKey, $imagick->getImageBlob());
      } catch (OssException $e) {
        print($e->getMessage());
      }
    }
  2. 單擊函數(shù)代碼頁(yè)簽的測(cè)試函數(shù)

    執(zhí)行完成后,您可以在函數(shù)代碼頁(yè)簽上方查看執(zhí)行結(jié)果。

常見(jiàn)問(wèn)題

相關(guān)文檔

  • 如果您想了解可以配置的OSS事件類型,請(qǐng)參見(jiàn)OSS事件定義

  • 如果您需要對(duì)創(chuàng)建的觸發(fā)器進(jìn)行修改或刪除,具體操作請(qǐng)參見(jiàn)更新觸發(fā)器配置

  • 觸發(fā)器相關(guān)問(wèn)題

    • 如果您希望查看函數(shù)的執(zhí)行觸發(fā)了哪個(gè)事件,可以手動(dòng)在代碼邏輯中打印事件類型日志,具體請(qǐng)參見(jiàn)日志記錄

    • 如果您希望在函數(shù)中調(diào)用另一個(gè)函數(shù),可以使用API調(diào)用指定函數(shù)或使用云工作流編排函數(shù)。如果調(diào)用的函數(shù)需要執(zhí)行耗時(shí)操作且均為異步調(diào)用,可以配置異步調(diào)用目標(biāo)服務(wù)。具體請(qǐng)參見(jiàn)函數(shù)可以相互調(diào)用嗎?配置異步調(diào)用目標(biāo)服務(wù)