用函數改函數配置?定時預置這樣搞!

預置併發支持併發實例按配置預先啓動,而不是在接受請求時才啓動。您可通過此功能,爲函數的指定版本設定預置併發額度。通過配置預置併發,可預先進行計算資源的準備,降低冷啓動、運行環境初始化及業務代碼初始化引起的耗時。

預置併發功能開啓內測以來,受到了火熱的關注,部分用戶搶到了內測資格,併爲我們提了不少寶貴的建議,在此感謝大家的關注與支持。

其中有一條建議是:”明天早上十點開啓活動,我需要提前預置很多併發,可是我很擔心自己 9 點忘記配置(睡過了),有沒有什麼辦法設個定時呢?“

當然有!作爲熟練使用 Serverless 的小能手,我們今天就用雲函數改雲函數配置,實現定時配置預置併發。

預置美妙,睡個懶覺!

一、創建函數

在雲函數的控制檯【新建】函數,在搜索框搜索 “預置”,選中定時預置 Demo,點擊下一步,完成創建。

函數控制檯地址:https://console.cloud.tencent.com/scf/list

<img src="https://main.qcloudimg.com/raw/ff2e4e0509f8f6af182f157b3322dc23.png" width="700"/>

打開函數的代碼編輯頁面,我們可以看到其中的代碼是用騰訊雲的 Python SDK 修改函數配置(在雲函數的 API 文檔中使用 API Explorer 工具即可生成調用代碼)。

現在,這段代碼具備了設置預置併發的能力,但是它還沒有獲得授權。這就像一個小朋友學會了使用密碼鎖,但是 ta 還不知道房門的密碼是什麼。

有 2 種辦法進行授權:

第一種是長期密鑰,在控制檯「訪問管理」的「訪問密鑰」中可以獲得賬號的密鑰,代替代碼中的 os.environ.get('TENCENTCLOUD_SECRETID')os.environ.get('TENCENTCLOUD_SECRETKEY') ,並且去掉 os.environ.get('TENCENTCLOUD_SESSIONTOKEN') 參數。

<img src="https://main.qcloudimg.com/raw/11ade27eb910b1b581a1a503c816c36f.png" width="700"/>

這種方法在代碼中寫了明文的密鑰,有一定的安全風險,所以我們這裏採用第二種辦法 — 綁定運行角色。

二、綁定運行角色

綁定運行角色的關鍵,是把一個有 QcloudSCFFullAccess 策略的角色綁定到這個函數上。可以在現有角色中新增策略,也可以新建一個角色進行綁定,這裏我們新建一個角色。

  1. 在 「函數管理 >> 函數配置」頁,點擊右上方的 「編輯」,進入編輯狀態,啓用「運行角色」,並點擊進入「新建運行角色」頁面。

<img src="https://main.qcloudimg.com/raw/1dcc1912009e29b1ea8c0adb89a1a346.png" width="700"/>

  1. 選擇「雲函數(SCF)」(這裏可以 Ctrl+F 搜索一下 scf,大約在右下角),「下一步」。

<img src="https://main.qcloudimg.com/raw/32cd37c39921fdef4d1585a5e532fcf7.png" width="700"/>

  1. 選擇「QcloudSCFFullAccess 策略」,隨後「填寫角色名稱」,即可完成角色的創建。

<img src="https://main.qcloudimg.com/raw/bddca02ba65d72827f1c2db74045b5da.png" width="700"/>

<img src="https://main.qcloudimg.com/raw/4cf2e5ee152fc13c5fa4949c602a9fbb.png" width="700"/>

回到 SCF 的控制檯,在運行角色中選擇剛剛創建 scf_full_role 後,點擊「完成」即可。

三、配置定時觸發器

接下來,就是本篇文章的關鍵:在拿到鑰匙並掌握開門的方法後,我們該如何定時?

在「觸發管理」頁面,我們創建一個新的定時觸發器,由於這裏創建後無法修改,所以我們要一次填正確所需要的配置。

<img src="https://main.qcloudimg.com/raw/de26b2fdad309980b22de39b9615b4a0.png" width="700"/>

3.1 設置觸發週期

定時觸發器的時間配置採用的是 cron 表達式,七個必須字段分別代表着秒、分鐘、小時、日、月、星期和年。詳細介紹可以查看雲函數的文章,這裏我們列舉一些常見的用例:

0 55 19 24 3 * 2021 表示在2021年3月24日19點55分鐘觸發
0 0 2 1 * * * 表示在每月的1日的凌晨2點觸發
0 15 10 * * MON-FRI * 表示在週一到週五每天上午10:15觸發
0 0 10,14,16 * * * * 表示在每天上午10點,下午2點,4點觸發
0 */30 9-17 * * * * 表示在每天上午9點到下午5點每半小時觸發
0 0 12 * * WED * 表示在每個星期三中午12點觸發

可以根據業務的需要進行靈活的配置,建議至少提前半個小時或一個小時啓動。

3.2 預置的信息

在定時觸發器的「附加信息」中,我們需要填寫所需要預置的函數及版本信息。

Qualifier 爲函數的版本號,VersionProvisionedConcurrencyNum 爲所需要預置的併發值,若填 0 則代表着取消預置。

{
    "Region": "ap-beijing",
    "FunctionName": "your_function_name",
    "Namespace": "your_namespace",
    "Qualifier": "2",
    "VersionProvisionedConcurrencyNum": 5
}

在我們這裏創建兩個觸發器,分別負責啓動預置併發和關閉預置併發。

<img src="https://main.qcloudimg.com/raw/a8f2072b3ced6de3ade9a4a1e8ea47e6.png" width="700"/>

  • 設置 「啓動預置併發」的配置信息 - 填寫在「附加信息」中:
# cron 表達式
0 55 19 24 3 * 2021

# 附加信息
{
    "Region": "ap-beijing",
    "FunctionName": "your_function_name",
    "Namespace": "default",
    "Qualifier": "2",
    "VersionProvisionedConcurrencyNum": 5
}
  • 設置「關閉預置併發」的配置信息 - 填寫在「附加信息」中;
# cron 表達式
0 00 23 24 3 * 2021

# 附加信息
{
    "Region": "ap-beijing",
    "FunctionName": "your_function_name",
    "Namespace": "default",
    "Qualifier": "2",
    "VersionProvisionedConcurrencyNum": 0
}

配置後啓動定時觸發器,定時的預置併發就配置好了。

如果想要確認預置併發是否正常配置,可以在調用日誌中查看 對應時間 的記錄,如果看到日誌中正確返回了 RequestID,則證明預置併發已經成功配置或關閉配置。

<img src="https://main.qcloudimg.com/raw/65887e3dabd928c130b15eb7978b2aa3.png" width="700"/>

預置併發內測申請通道:https://cloud.tencent.com/apply/p/j1fl01i6f2i

One More Thing

立即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 serverless/start

歡迎訪問:Serverless 中文網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章