fun local

命令使用。Fun Local 工具可以將函數(shù)計(jì)算中的函數(shù)在本地完全模擬運(yùn)行,并提供單步調(diào)試的功能,旨在彌補(bǔ)函數(shù)計(jì)算相對于傳統(tǒng)應(yīng)用開發(fā)體驗(yàn)上的短板,并為用戶提供一種解決函數(shù)計(jì)算問題排查的新途徑。

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

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

本地運(yùn)行函數(shù)

運(yùn)行函數(shù)的命令格式為:

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

其中 options、service 都是可以省略的。

從調(diào)用方式上,可以理解為,fun local invoke 支持通過

函數(shù)名

調(diào)用,或者

服務(wù)名/函數(shù)名

的方式調(diào)用,即

fun local invoke functionfun local invoke service/function

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

fun local invoke php72

調(diào)用結(jié)果為:

再比如,要運(yùn)行名為 nodejs8 的函數(shù),可以使用:

fun local invoke nodejs8

會得到如下結(jié)果:

如果 template.yml 中包含多個(gè)服務(wù),而多個(gè)服務(wù)中包含相同名稱的函數(shù)時(shí),通過函數(shù)名的方式調(diào)用 fun 只會

運(yùn)行第一個(gè)名稱匹配的函數(shù)

如果想要精準(zhǔn)匹配,可以使用

服務(wù)名/函數(shù)名

的方式。

比如想要調(diào)用 localdemo 下的 php72,可以使用:

fun local invoke localdemo/php72

在本例中,會得到和

fun local invoke php72

一致的結(jié)果。

以下是一個(gè)運(yùn)行 nodejs8 函數(shù)的演示:

本地運(yùn)行 java 類型的函數(shù)

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

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,因此不需要任何改動,可以直接通過以下命令運(yùn)行:

fun local invoke java8

運(yùn)行結(jié)果如下:

以下是一個(gè)運(yùn)行 java8 函數(shù)的演示:

本地調(diào)試

fun local invoke 支持

-d, --debug-port <port>

選項(xiàng),可以對函數(shù)進(jìn)行本地單步調(diào)試。本文檔只介紹如何配置調(diào)試,并不涉及調(diào)試技巧,更多文章,請

參考

備注:Fun Local 涉及到的 debugging 技術(shù)全部都基于各個(gè)語言通用的調(diào)試協(xié)議實(shí)現(xiàn)的,因此無論什么語言的開發(fā)者,即使不喜歡用 VSCode,只要使用對應(yīng)語言的 remote debugging 方法都可以進(jìn)行調(diào)試。

本地調(diào)試 nodejs、python 類型的函數(shù)

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

我們上面演示了可以通過

fun local invoke nodejs8

來運(yùn)行名稱為 nodejs8 的函數(shù),如果想對該函數(shù)進(jìn)行調(diào)試,只需要使用 -d 參數(shù),并配置相應(yīng)的端口號即可。

比如我們以調(diào)試方式運(yùn)行函數(shù),并將調(diào)試端口設(shè)定在 3000,可以通過下面的命令:

fun local invoke -d 3000 nodejs8

另外,推薦添加 –config 參數(shù),在調(diào)試的同時(shí),可以輸出用來調(diào)試的 IDE 的配置信息:

fun local invoke -d 3000 --config VSCode nodejs8

命令執(zhí)行結(jié)果如下:

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

程序會阻塞在這里,并不會繼續(xù)往下執(zhí)行。只有 IDE 的連接上來后,程序才會繼續(xù)執(zhí)行。接下來,我們針對 VSCode 配置、VSCode 調(diào)試兩個(gè)方面分別進(jìn)行講解。

其中 VSCode 配置只有在第一次對函數(shù)進(jìn)行調(diào)試時(shí)才需要,如果已經(jīng)配置過,則不需要再次配置。

VSCode 配置

創(chuàng)建 vscode launch.json 文件

復(fù)制日志中的 config begin 與 config end 之間的配置到 launch.json 中。

完成上面配置后,在 Debug 視圖可以看到配置的函數(shù)列表。

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

官方文檔

VSCode 調(diào)試

VSCode 配置成功后,只需要在 VSCode 編輯器側(cè)邊欄單擊設(shè)置斷點(diǎn),然后點(diǎn)擊“開始調(diào)試”按鈕,即可開始調(diào)試。

以下是一個(gè) nodejs8 函數(shù)本地單步調(diào)試的流程例子:

本地調(diào)試 java 類型的函數(shù)

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

使用 VSCode 調(diào)試 java

使用 VSCode 調(diào)試 java 時(shí),需要安裝兩個(gè)插件:

Language Support for Java(TM) by Red Hat



Debugger for Java

。利用 VSCode 的插件市場安裝插件很簡單,可以

參考

以下是一個(gè)使用 VSCode 調(diào)試 java 類型函數(shù)的例子:

使用 IDEA 調(diào)試 java

IDEA 配置

IDEA 配置 remote debugging 還是比較簡單的,首先在菜單欄依次點(diǎn)擊

Run -> Edit Configurations...

然后新建一個(gè) Remote Debugging:

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

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

使用 IDEA 開始調(diào)試

首先將 java 函數(shù)以 debug 的方式運(yùn)行起來:

fun local invoke -d 3000 java8

可以看到函數(shù)卡在這里了,接著我們使用 IDEA 連接并開始調(diào)試。可以通過菜單欄上的

Run -> Debug...

或者工具欄直接點(diǎn)擊 Debug 按鈕,即可開始調(diào)試。

以下是一個(gè)用 IDEA 進(jìn)行 remote debugging 的完整流程演示:

本地調(diào)試 php 類型的函數(shù)

php 的調(diào)試與其他類型的函數(shù)調(diào)試在流程上有一些不同。

首先,php 的運(yùn)行通過

fun local invoke php72

命令完成,這與其他類型的函數(shù)一致。調(diào)試時(shí),也像其他類型的函數(shù)一樣,通過 -d 參數(shù)以調(diào)試模式啟動函數(shù):

fun local invoke -d 3000 --config VSCode php72

但不同的是,以 debug 方式運(yùn)行 php 函數(shù)后,php 函數(shù)并沒有阻塞等待 vscode 調(diào)試器的連接,而是直接運(yùn)行結(jié)束。

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

這是因?yàn)椋瑢τ?php 程序,需要首先啟動 vscode 的調(diào)試器。

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

然后在終端重新以調(diào)試模式啟動 php 函數(shù)即可開始調(diào)試:

fun local invoke -d 3000 php72

Event 事件源

函數(shù)計(jì)算提供了豐富的觸發(fā)器,包括但不局限于對象存儲觸發(fā)器、日志服務(wù)觸發(fā)器、CDN 事件觸發(fā)器等。在本地?zé)o論是運(yùn)行還是調(diào)試函數(shù)時(shí),為了能夠完全模擬線上環(huán)境,通常需要構(gòu)造觸發(fā)事件。

觸發(fā)事件可以是一段可讀的 json 配置,也可以是一段非可讀的二進(jìn)制數(shù)據(jù)。這里我們拿 json 舉例,假設(shè)觸發(fā)事件內(nèi)容為:

{    "testKey": "testValue"}

想要將這段事件內(nèi)容傳給函數(shù),可以通過以下三種途徑:

管道:


echo '{"testKey": "testValue"}' | fun local invoke nodejs8

文件:

將的 json 內(nèi)容寫入到文件,文件名隨意,比如 event.json。然后通過 -e 指定文件名:

fun local invoke -e event.json nodejs8

重定向:


fun local invoke nodejs8 < event.json

或者

fun local invoke nodejs8 <<< '{"testKey": "testValue"}'

等等。更多信息可以參考這篇

文章

環(huán)境變量

在 template.yml 中配置的

EnvironmentVariables

會與線上行為一致,當(dāng)函數(shù)運(yùn)行時(shí),可以通過代碼獲取到。更多信息

參考

在本地運(yùn)行函數(shù)時(shí),除了 EnvironmentVariables 配置的環(huán)境變量,fun 還會額外提供一個(gè)

local=true

的環(huán)境變量,用來標(biāo)識這是一個(gè)本地運(yùn)行的函數(shù)。

通過這個(gè)環(huán)境變量,用戶可以區(qū)分是本地運(yùn)行還是線上運(yùn)行,以便于進(jìn)行一些特定的邏輯處理。

Initializer

在 template.yml 中配置的

Initializer

屬性會與線上行為一致,當(dāng)函數(shù)運(yùn)行時(shí),會首先運(yùn)行 Initializer 指定的方法。Initializer 更多信息

參考

Credentials

用戶可以通過 Credentials 中存儲的 ak 信息訪問阿里云的其他服務(wù)。Fun local 在本地運(yùn)行函數(shù)時(shí),會按照與 fun deploy 相同的

策略

尋找 ak 信息。

關(guān)于函數(shù)計(jì)算 Credentials 的描述,可以

參考

以下是一個(gè)根據(jù)本地、線上環(huán)境的不同,利用函數(shù)提供的 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

上。項(xiàng)目目錄結(jié)構(gòu)如下:

.
├── 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

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

更多參考

Fun Repo

Fun specs

Fun examples

Fun 發(fā)布 2.0 新版本啦

函數(shù)計(jì)算工具鏈新成員 —— Fun Local 發(fā)布啦

更多關(guān)于云服務(wù)器域名注冊,虛擬主機(jī)的問題,請?jiān)L問三五互聯(lián)官網(wǎng):m.shinetop.cn

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。郵箱:3140448839@qq.com。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處:三五互聯(lián)知識庫 » 開發(fā)函數(shù)計(jì)算的正確姿勢 —— 使用 Fun Local 本地運(yùn)行與調(diào)試

登錄

找回密碼

注冊

主站蜘蛛池模板: 免费VA国产高清大片在线| 国产一区二区日韩在线| 亚洲色大成网站WWW永久麻豆| 九九热在线观看视频免费| 双乳奶水饱满少妇呻吟免费看| 中文字幕无码乱码人妻系列蜜桃| 国产亚洲真人做受在线观看| 国产精品有码在线观看| 国产成人精品午夜在线观看| 中文字幕在线精品国产| 正在播放的国产A一片| 少妇人妻综合久久中文字幕| 同性男男黄gay片免费| 国产精品一区二区在线欢| 亚洲成年av天堂动漫网站| 亚洲精品精华液一区二区| 亚洲AV乱码毛片在线播放| 国产99视频精品免费视频6| 国产高跟黑色丝袜在线| 国产综合精品91老熟女| 午夜福利国产精品视频| 深夜在线观看免费av| 国产精品女生自拍第一区| 国产又色又爽又黄的免费软件| 久久精品国产99亚洲精品| 夜鲁夜鲁很鲁在线视频 视频| 亚洲人妻系列中文字幕| 日本美女性亚洲精品黄色| 成人看的污污超级黄网站免费| 国内精品久久久久影院日本| 欧美xxxx做受欧美| 免费费很色大片欧一二区| 色噜噜亚洲男人的天堂| 亚洲av成人在线一区| 天堂亚洲免费视频| 无码国产精品一区二区VR老人| 日韩国产精品无码一区二区三区| 精品 无码 国产观看| 伊人成色综合人夜夜久久| 男人j进入女人j内部免费网站| 日韩黄色av一区二区三区|