91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

發布時間:2020-08-10 16:09:39 來源:ITPUB博客 閱讀:202 作者:許此一生 欄目:云計算

前言

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(Function Compute) : 函數計算是一個事件驅動的服務,通過函數計算,用戶無需管理服務器等運行情況,只需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。函數計算更多信息 參考 。

Fun : Fun 是一個用于支持 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置文件(template.yml),協助您進行開發、構建、部署操作。Fun 的更多文檔 參考 。

2.0 版本的 Fun,在部署這一塊做了很多努力,并提供了比較完善的功能,能夠做到將云資源方便、平滑地部署到云端。但該版本,在本地開發上的體驗,還有較多的工作要做。于是,我們決定推出 Fun Local 彌補這一處短板。

Fun Local : Fun Local 作為 Fun 的一個子命令存在,只要 Fun 的版本大于等于 2.6.0,即可以直接通過 fun local 命令使用。Fun Local 工具可以將函數計算中的函數在本地完全模擬運行,并提供單步調試的功能,旨在彌補函數計算相對于傳統應用開發體驗上的短板,并為用戶提供一種解決函數計算問題排查的新途徑。

《開發函數計算的正確姿勢》系列除本篇是為用戶介紹 fun local 的使用方法外,其他幾篇都會向用戶展示 Fun Local 對于函數計算開發所帶來的效率上的巨大提升。

Fun Local 命令格式

使用 fun local invoke -h 可以查看 fun local invoke 的幫助信息:

$ fun local invoke -h
  Usage: invoke [options] <[service/]function>
  Run your serverless application locally for quick development & testing.
  Options:    -d, --debug-port <port>  used for local debugging
    -c, --config <ide>       print out ide debug configuration. Options are VSCode    -e, --event <path>       event file containing event data passed to the function
    -h, --help               output usage information

本地運行函數

運行函數的命令格式為:

fun local invoke [options] <[service/]function>

其中 options、service 都是可以省略的。
從調用方式上,可以理解為,fun local invoke 支持通過 函數名 調用,或者 服務名/函數名 的方式調用,即

fun local invoke functionfun local invoke service/function

比如,如果要運行名為 php72 的函數,可以直接通過以下命令完成:

fun local invoke php72

調用結果為:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

再比如,要運行名為 nodejs8 的函數,可以使用:

fun local invoke nodejs8

會得到如下結果:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

如果 template.yml 中包含多個服務,而多個服務中包含相同名稱的函數時,通過函數名的方式調用 fun 只會 運行第一個名稱匹配的函數

如果想要精準匹配,可以使用 服務名/函數名 的方式。

比如想要調用 localdemo 下的 php72,可以使用:

fun local invoke localdemo/php72

在本例中,會得到和 fun local invoke php72 一致的結果。

以下是一個運行 nodejs8 函數的演示:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

本地運行 java 類型的函數

java 不同于解釋型的語言,在作為函數運行前,需要先編譯。在我們的例子中,可以進入到 demo 中的 java8 目錄,然后執行:

mvn package

可以看到 log:

[INFO] skip non existing resourceDirectory /Users/tan/code/fun/examples/local/java8/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ demo ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-dependency-plugin:2.8:copy-dependencies (copy-dependencies) @ demo ---
[INFO] fc-java-core-1.0.0.jar already exists in destination.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.223 s
[INFO] Finished at: 2018-11-22T10:45:14+08:00[INFO] Final Memory: 15M/309M
[INFO] ------------------------------------------------------------------------

該命令會在 java8/target 目錄下生成 demo-1.0-SNAPSHOT.jar 文件。

由于我們在 template.yml 中配置的 CodeUri 為 java8/target/demo-1.0-SNAPSHOT.jar,因此不需要任何改動,可以直接通過以下命令運行:

fun local invoke java8

運行結果如下:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

以下是一個運行 java8 函數的演示:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

本地調試

fun local invoke 支持 -d, --debug-port <port> 選項,可以對函數進行本地單步調試。本文檔只介紹如何配置調試,并不涉及調試技巧,更多文章,請 參考 。

備注:Fun Local 涉及到的 debugging 技術全部都基于各個語言通用的調試協議實現的,因此無論什么語言的開發者,即使不喜歡用 VSCode,只要使用對應語言的 remote debugging 方法都可以進行調試。

本地調試 nodejs、python 類型的函數

對于 nodejs6、nodejs8、python2.7、python3、java8 類型的函數,調試方法基本一致。下面拿 nodejs8 舉例。

我們上面演示了可以通過 fun local invoke nodejs8 來運行名稱為 nodejs8 的函數,如果想對該函數進行調試,只需要使用 -d 參數,并配置相應的端口號即可。

比如我們以調試方式運行函數,并將調試端口設定在 3000,可以通過下面的命令:

fun local invoke -d 3000 nodejs8

另外,推薦添加 --config 參數,在調試的同時,可以輸出用來調試的 IDE 的配置信息:

fun local invoke -d 3000 --config VSCode nodejs8

命令執行結果如下:

skip pulling images ...
you can paste these config to .vscode/launch.json, and then attach to your running function
///////////////// config begin /////////////////{    "version": "0.2.0",    "configurations": [
        {            "name": "fc/localdemo/nodejs8",            "type": "node",            "request": "attach",            "address": "localhost",            "port": 3000,            "localRoot": "/Users/tan/code/fun/examples/local/nodejs8",            "remoteRoot": "/code",            "protocol": "inspect",            "stopOnEntry": false
        }
    ]
}
///////////////// config end /////////////////Debugger listening on ws://0.0.0.0:3000/b65c288b-bd6a-4791-849b-b03e0d16b0ce
For help see https://nodejs.org/en/docs/inspector

程序會阻塞在這里,并不會繼續往下執行。只有 IDE 的連接上來后,程序才會繼續執行。接下來,我們針對 VSCode 配置、VSCode 調試兩個方面分別進行講解。

其中 VSCode 配置只有在第一次對函數進行調試時才需要,如果已經配置過,則不需要再次配置。

VSCode 配置
  1. 創建 vscode launch.json 文件
    開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

  2. 復制日志中的 config begin 與 config end 之間的配置到 launch.json 中。
    開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

  3. 完成上面配置后,在 Debug 視圖可以看到配置的函數列表。
    開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

至此,VSCode 配置完成。VSCode 更多配置知識可以參考 官方文檔 。

VSCode 調試

VSCode 配置成功后,只需要在 VSCode 編輯器側邊欄單擊設置斷點,然后點擊“開始調試”按鈕,即可開始調試。

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

以下是一個 nodejs8 函數本地單步調試的流程例子:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

本地調試 java 類型的函數

調試 java 函數的過程和 nodejs、python 是類似的。但由于 java 程序員通常喜歡用 IDEA、Eclipse 這樣的 IDE,所以我們單獨拿出來說一下。

使用 VSCode 調試 java

使用 VSCode 調試 java 時,需要安裝兩個插件: Language Support for Java(TM) by Red Hat Debugger for Java 。利用 VSCode 的插件市場安裝插件很簡單,可以 參考 。

以下是一個使用 VSCode 調試 java 類型函數的例子:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

使用 IDEA 調試 java
IDEA 配置

IDEA 配置 remote debugging 還是比較簡單的,首先在菜單欄依次點擊 Run -> Edit Configurations...

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

然后新建一個 Remote Debugging:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

然后我們隨意輸出一個名字,并配置端口號為 3000.

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

以下是一個配置 IDEA remote debugging 的完整流程演示:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

使用 IDEA 開始調試

首先將 java 函數以 debug 的方式運行起來:

fun local invoke -d 3000 java8

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

可以看到函數卡在這里了,接著我們使用 IDEA 連接并開始調試。可以通過菜單欄上的 Run -> Debug... 或者工具欄直接點擊 Debug 按鈕,即可開始調試。

以下是一個用 IDEA 進行 remote debugging 的完整流程演示:

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

本地調試 php 類型的函數

php 的調試與其他類型的函數調試在流程上有一些不同。

首先,php 的運行通過 fun local invoke php72 命令完成,這與其他類型的函數一致。調試時,也像其他類型的函數一樣,通過 -d 參數以調試模式啟動函數:

fun local invoke -d 3000 --config VSCode php72

但不同的是,以 debug 方式運行 php 函數后,php 函數并沒有阻塞等待 vscode 調試器的連接,而是直接運行結束。

skip pulling images ...
you can paste these config to .vscode/launch.json, and then attach to your running function
///////////////// config begin /////////////////{    "version": "0.2.0",    "configurations": [
        {            "name": "fc/localdemo/php72",            "type": "php",            "request": "launch",            "port": 3000,            "stopOnEntry": false,            "pathMappings": {                "/code": "/Users/tan/code/fun/examples/local/php7.2"
            },            "ignore": [                "/var/fc/runtime/**"
            ]
        }
    ]
}
///////////////// config end /////////////////FunctionCompute php7.2 runtime inited.
FC Invoke Start RequestId: 6e8f7ed7-653d-4a6a-94cc-1ef0d028e4b4
FC Invoke End RequestId: 6e8f7ed7-653d-4a6a-94cc-1ef0d028e4b4
hello worldRequestId: 6e8f7ed7-653d-4a6a-94cc-1ef0d028e4b4          Billed Duration: 48 ms          Memory Size: 1998 MB        Max Memory Used: 58 MB

這是因為,對于 php 程序,需要首先啟動 vscode 的調試器。

php 類型的函數啟動 VSCode 調試器的流程與其他類型的函數一致:復制上面日志中的 vscode 配置到 launch.json,單擊“開始調試”即可。

然后在終端重新以調試模式啟動 php 函數即可開始調試:

fun local invoke -d 3000 php72

開發函數計算的正確姿勢 —— 使用 Fun Local 本地運行與調試

Event 事件源

函數計算提供了豐富的觸發器,包括但不局限于對象存儲觸發器、日志服務觸發器、CDN 事件觸發器等。在本地無論是運行還是調試函數時,為了能夠完全模擬線上環境,通常需要構造觸發事件。

觸發事件可以是一段可讀的 json 配置,也可以是一段非可讀的二進制數據。這里我們拿 json 舉例,假設觸發事件內容為:

{    "testKey": "testValue"}

想要將這段事件內容傳給函數,可以通過以下三種途徑:

  1. 管道: echo '{"testKey": "testValue"}' | fun local invoke nodejs8

  2. 文件: 將的 json 內容寫入到文件,文件名隨意,比如 event.json。然后通過 -e 指定文件名: fun local invoke -e event.json nodejs8

  3. 重定向: fun local invoke nodejs8 < event.json 或者 fun local invoke nodejs8 <<< '{"testKey": "testValue"}' 等等。更多信息可以參考這篇 文章 。

環境變量

在 template.yml 中配置的 EnvironmentVariables 會與線上行為一致,當函數運行時,可以通過代碼獲取到。更多信息 參考 。

在本地運行函數時,除了 EnvironmentVariables 配置的環境變量,fun 還會額外提供一個 local=true 的環境變量,用來標識這是一個本地運行的函數。

通過這個環境變量,用戶可以區分是本地運行還是線上運行,以便于進行一些特定的邏輯處理。

Initializer

在 template.yml 中配置的 Initializer 屬性會與線上行為一致,當函數運行時,會首先運行 Initializer 指定的方法。Initializer 更多信息 參考 。

Credentials

用戶可以通過 Credentials 中存儲的 ak 信息訪問阿里云的其他服務。Fun local 在本地運行函數時,會按照與 fun deploy 相同的 策略 尋找 ak 信息。

關于函數計算 Credentials 的描述,可以 參考 。

以下是一個根據本地、線上環境的不同,利用函數提供的 Credentials 配置 oss client 的例子:

local = bool(os.getenv('local', ""))if (local):    print 'thank you for running function in local!!!!!!'
    auth = oss2.Auth(creds.access_key_id,
                     creds.access_key_secret)else:
    auth = oss2.StsAuth(creds.access_key_id,
                        creds.access_key_secret,
                        creds.security_token)

附錄

代碼

本文講解涉及到的 demo 代碼,托管在 github 上。項目目錄結構如下:

.
├── java8│   ├── pom.xml│   ├── src│   │   └── main│   │       └── java│   │           └── example│   │               └── App.java│   └── target│       └── demo-1.0-SNAPSHOT.jar├── nodejs6│   └── index.js├── nodejs8│   └── index.js├── php7.2│   └── index.php├── python2.7│   └── index.py├── python3│   └── index.py└── template.yml

template.yml 定義了函數計算模型,其中定義了一個名為 localdemo 的服務,并在該服務下,定義了 6 個函數,名稱分別是 nodejs6、nodejs8、php72、python27、python3、java8。它們對應的代碼目錄由 template 中的 CodeUri 定義,分別位于 nodejs6、nodejs8、php7.2、python2.7、python3、java8 目錄。

更多參考

  1. Fun Repo

  2. Fun specs

  3. Fun examples

  4. Fun 發布 2.0 新版本啦

  5. 函數計算工具鏈新成員 —— Fun Local 發布啦


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南汇区| 晋州市| 礼泉县| 临邑县| 镶黄旗| 保康县| 抚宁县| 门源| 府谷县| 涡阳县| 咸宁市| 岐山县| 焉耆| 福鼎市| 合肥市| 清水河县| 乌兰浩特市| 浮山县| 新营市| 勐海县| 湛江市| 石台县| 广平县| 凤翔县| 宣化县| 平远县| 松原市| 通道| 阿鲁科尔沁旗| 蓝山县| 英山县| 华亭县| 长岛县| 剑河县| 古浪县| 嘉兴市| 兰溪市| 大石桥市| 德昌县| 吴忠市| 佛教|