Hoʻopili helu kikowaena ʻole ʻo ia kekahi o nā hiʻohiʻona koʻikoʻi o ka ʻike kapua. ʻO ke kumu hana maʻamau, ʻaʻole ia ka hopohopo o DevOps, akā no ka mea lawelawe. Hoʻololi ʻakomi ʻia ka hoʻonui ʻana i ka waiwai i ka hoʻouka ʻana a loaʻa iā ia ka nui o ka loli.
ʻO kekahi hiʻohiʻona maʻamau ka manaʻo e hōʻemi a hoʻopaʻa i ke code, ʻo ia ke kumu i kapa ʻia ai ka serverless computing i kekahi manawa he lawelawe (FaaS).
ʻO ka mōʻaukala, ʻo ka mea hāʻawi kapuaʻi mua e hāʻawi iā FaaS me AWS Lambda ʻo Amazon, no laila ka inoa. Hāʻawi nā mea lawelawe ʻē aʻe i nā mea like:
Nā hana ao mai Google mai
Nā Hana Azure mai Microsoft
Hāʻawi kēia mau ʻoihana āpau i ka helu kikowaena serverless, auto-scaling, a uku wale no ka mea āu e hoʻohana maoli ai, akā laka lākou i nā mea kūʻai aku i kā lākou huahana proprietary. Eia nō naʻe, aia nā ʻokoʻa manuahi a wehe ʻia no ka serverless computing. Pono e hoʻomaopopo:
Nā Hana Kapua Puna, ma ke ʻano o kahi kaiaola Spring Framework waiwai nui, hiki ke hoʻohana ʻia ma ke ʻano he facade no AWS Lambda, Azure Functions a me OpenWhisk,
Kūʻokoʻa loa lākou a pau i nā ao, ʻo ia hoʻi, hiki ke hoʻokomo ʻia i loko o kekahi ao, me kāu ponoʻī, lehulehu a pilikino paha, a ʻoiaʻiʻo ma Exoscale.
Pehea ka hana o ka papahana Fn
Hoʻokumu piha ʻia ʻo Fn ma Docker, ʻelua mau mea nui:
Hoʻolālā ʻia ka papahana CLI e hoʻokele i nā ʻano āpau o ka ʻōnaehana Fn, a pili pū me ka server Fn,
ʻO ka server Fn ponoʻī kahi noi maʻamau i hoʻopili ʻia i loko o kahi pahu Docker.
Hoʻokō ʻia nā hana i kau ʻia ma Fn i loko o nā pahu ʻokoʻa, kahi e hiki ai iā ʻoe ke kākoʻo i ka nui o nā ʻōlelo papahana, no ka laʻana... Clojure!
Hāʻawi ʻia nā ʻōlelo hoʻopaʻapaʻa hana i ka hoʻokomo maʻamau (STDIN), ua kākau ʻia nā hopena i ka puka maʻamau (STDOUT). Inā ʻaʻole maʻalahi nā ʻōlelo hoʻopaʻapaʻa a i ʻole nā waiwai hoʻihoʻi (e like me kahi mea JSON), hiki ke hoʻololi ʻia me ka hoʻohana ʻana i kahi papa abstraction i hāʻawi ʻia e Fn ponoʻī ma ke ʻano o kahi Function Development Kit (FDK).
No ka ʻoluʻolu, hāʻawi ʻia nā hoʻonohonoho i kūkulu ʻia e hoʻomaʻamaʻa i ka hoʻolaha ʻana o FaaS i kahi papa inoa o nā ʻōlelo like ʻole a me kā lākou mau mana (Go, nā ʻano like ʻole o Java, Python, etc.).
He maʻalahi ka hana ʻana i kahi FaaS ma ka hahai ʻana i kēia kiʻi:
Ke hoʻohana nei i ka hana me ka Fn CLI: ua hana ʻia kahi faila hoʻonohonoho noi no Fn e pili ana i ka laʻana i koho ʻia.
Hoʻopuka mākou i kā mākou hana ponoʻī, me ka hoʻohana hou ʻana iā CLI Fn: waiho ʻia ke kiʻi pahu i loko o kahi waihona, a laila hoʻolaha ʻia ke kikowaena no ke ola a me ke kau ʻana o kēia kiʻi.
ʻO ke kumu o ka hāʻawi ʻana i nā hana iā Fn
Hoʻokomo kūloko a hoʻāʻo i nā hana serverless
E hoʻomaka kākou e hoʻokomo iā Fn ma ka mīkini kūloko. ʻO ka mea mua, ua hoʻokomo ʻia ʻo Docker, e like me ka mea i koi ʻia e Fn. Ke manaʻo nei aia mākou ma Debian/Ubuntu:
A i ʻole e hoʻohana i kahi mea hoʻokele paʻi / Docker kūkulu e like me kāu ʻōnaehana. A laila hiki iā ʻoe ke hele pololei i ka hoʻokomo ʻana i ka Fn CLI. No ka laʻana, me ka hoʻohana ʻana i ka curl:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Inā ʻoe ma OSX me ka Homebrew i hoʻokomo ʻia, hiki iā ʻoe ke hele ma ke ala ʻē aʻe:
Ua mākaukau mākou e hoʻomaka mua i kā mākou hana me ka hoʻohana ʻana i ka CLI. No ka maʻalahi, e hoʻohana mākou i kahi kaiapuni i kūkulu ʻia, e like me Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
E hana ʻia kahi papa kuhikuhi hou hellonode e hoʻomohala hou i kā mākou hana Fn me kekahi mau faila hoʻonohonoho kumu. I loko o ka papa kuhikuhi hou i hana ʻia, hiki iā ʻoe ke hana i kāu noi ma muli o nā kūlana o kāu ʻōlelo a i ʻole ka manawa holo.
# Каталог с node выглядит так:
hellonode
├── func.js
├── func.yaml
└── package.json
# Свежеустановленное окружение Java11 такое:
hellojava11
├── func.yaml
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── example
│ └── fn
│ └── HelloFunction.java
└── test
└── java
└── com
└── example
└── fn
└── HelloFunctionTest.java
Hoʻokumu ʻo Fn i ka hoʻolālā papahana mua, hana i kahi faila func.yaml, loaʻa nā hoʻonohonoho pono no Fn, a hoʻonohonoho i ke kumu hoʻohālike no ke code ma ka ʻōlelo āu i koho ai.
I ka hihia o ka Node runtime, penei:
$ cat hellonode/func.js
const fdk=require('@fnproject/fdk');
fdk.handle(function(input){
let name = 'World';
if (input.name) {
name = input.name;
}
return {'message': 'Hello ' + name}
})
I kēia manawa e hoʻāʻo koke mākou i kā mākou hana ma ka ʻāina e ʻike pehea e hana ai nā mea āpau.
ʻO ka mea mua, e hoʻomaka mākou i ka server Fn. E like me ka mea i haʻi mua ʻia, ʻo ka server Fn kahi pahu Docker, no laila, ma hope o ka hoʻomaka ʻana, e hele a lawe i ke kiʻi mai ka papa inoa Docker.
$ fn start -d # запускаем локальный сервер в фоне
Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver
ff3a5c916c92: Pull complete
1a649ea86bca: Pull complete
ce35f4d5f86a: Pull complete
...
Status: Downloaded newer image for fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5
No ka holoʻana i kā mākou hana, pono e "'ōwiliʻia". Pono kēia имя приложения: Ma Fn, pono e kuhikuhi ʻia nā noi a pau ma ke ʻano he inoa inoa no nā hana pili.
E ʻimi ʻo Fn CLI i ka faila func.yaml i ka papa kuhikuhi o kēia manawa e hoʻohana ʻia e hoʻonohonoho i ka hana. No laila pono ʻoe e hele mua i kā mākou papa kuhikuhi hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # выкатываем функцию локально, имя приложения - fnexo.
# параметр local не заливает образ в удаленный реестр,
# запуская его напрямую
Deploying hellonode to app: fnexo
Bumped to version 0.0.2
Building image nfrankel/hellonode:0.0.3 .
Updating function hellonode using image nfrankel/hellonode:0.0.3...
Successfully created app: fnexo
Successfully created function: hellonode with nfrankel/hellonode:0.0.3
Successfully created trigger: hellonode-trigger
E like me kāu e ʻike ai mai ka hoʻopuka kauoha, ua hana ʻia kahi kiʻi pahu Docker hou i loko o kā mākou hana. Ua mākaukau ka hana e kāhea ʻia, a ʻelua mau ala e hana ai:
me ka hoʻohana ʻana i ke kauoha Fn invoke
kelepona pololei ma o http
Paʻi invoke ma o Fn e hoʻohālikelike wale i ka hana ma o HTTP no nā hoʻāʻo, kahi kūpono no ka hoʻāʻo wikiwiki:
Hōʻike ka server Fn i kāna mau hana ma ke awa 8080 a ʻike ʻia ka URL hana e kūlike me ke kumu t/app/function, aka, aole loa. Ma o HTTP, ʻaʻole i kapa pololei ʻia kahi hana, akā ma o kahi mea i kapa ʻia ʻo trigger, e like me kona inoa, "hoʻomaka" ke kāhea hana. Hoʻokaʻawale ʻia nā mea hoʻomaka ma `func.yml papahana:
Ke hana nei nā mea a pau! ʻO ka manawa kēia e neʻe ai i nā hoʻokolohua piha piha a hoʻolaha i kā mākou FaaS ma ke kikowaena!
Ke hoʻokomo nei i nā lawelawe hana serverless ma kāu ʻōnaehana ponoʻī
E hoʻokomo koke i kahi mīkini virtual me ka Exoscale CLI. Inā ʻaʻole ʻoe i hoʻonohonoho i kēia manawa, hiki iā ʻoe ke hoʻohana kā mākou alakaʻi hoʻomaka wikiwiki. He mea hana maikaʻi kēia e hoʻonui ai i kāu huahana. Mai poina pono ʻoe e hoʻonohonoho i kahi lula e wehe i ke awa 8080 i ka Pūʻulu Palekana! E hoʻomaka ana kēia mau kauoha i kahi mīkini maʻemaʻe maʻemaʻe, mākaukau e hoʻokipa i kā mākou mau hana:
A laila hiki iā ʻoe ke ssh i loko o ka mīkini virtual a hoʻokomo i ka kikowaena Fn mamao:
$ exo ssh fn-server
The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)
A laila e hoʻokomo iā Docker a me ka server Fn e like me ka mea i hana mua ʻia ma ka mīkini kūloko, e hoʻomaka i ke kikowaena:
Ua mākaukau ʻo Fn e loaʻa nā hana! No ka hoʻololi ʻana i nā hana i kahi kikowaena mamao, e hoʻohana mākou i ke kauoha deploy mai ke kamepiula kūloko ma ka waiho ʻana i ka hae --local.
Eia kekahi, koi ʻo Fn iā ʻoe e kuhikuhi i kahi o ka Fn server a me Docker registry. Hiki ke hoʻonohonoho ʻia kēia mau koho ma o nā ʻano hoʻololi kaiapuni FN_API_URL и FN_REGISTRY i kēlā me kēia, akā hāʻawi pū kekahi i kahi ala maʻalahi e hoʻokele maʻalahi i ka hana ʻana a me ka hoʻokele ʻana i nā hoʻonohonoho no ka hoʻonohonoho ʻana.
Ma nā huaʻōlelo Fn, ua kapa ʻia ka hoʻonohonoho no ka hoʻonohonoho ʻana context. Na ke kauoha aʻe e hana i ka pōʻaiapili:
Hiki iā ʻoe ke nānā i nā pōʻaiapili i loaʻa e like me kēia:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
A e hoʻololi i ka pōʻaiapili i hana ʻia e like me kēia:
$ fn use context exoscale
Now using context: exoscale
Mai ʻaneʻi, e hoʻoiho ka hāʻawi hiʻohiʻona Fn i nā kiʻi Docker me ka hoʻohana ʻana i ka waihona DockerHub i koho ʻia (i koʻu hihia - nfrankel), a laila e hoʻomaopopo i ke kikowaena mamao (ma kēia hiʻohiʻona - http://185.19.30.175:8080) e pili ana i kahi a me ka mana o ke kiʻi hou loa i loaʻa kāu hana.
$ fn deploy --app fnexo . # выполняется на локальной машине из каталога hellonode
Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .
ʻO nā pōmaikaʻi o ka helu kikowaena serverless ma kāu hiki
ʻO ka hoʻopili ʻana me ka serverless kahi hopena kūpono no ka hoʻokō wikiwiki ʻana i nā ʻāpana kūʻokoʻa o kahi noi e launa pū me nā noi paʻakikī a i ʻole microservices.
ʻO kēia ma muli o ke kumukūʻai huna o ka laka ʻana i ka mea kūʻai aku i koho ʻia, ka mea, e pili ana i ka hihia hoʻohana kikoʻī a me ka leo, hiki ke alakaʻi i nā kumukūʻai kiʻekiʻe a me ka hoʻohaʻahaʻa ʻana i ka wā e hiki mai ana.
Hoʻopilikia pū ʻia nā ʻōnaehana kapuaʻi lehulehu a me nā hybrid cloud i kēia hihia, no ka mea hiki iā ʻoe ke ʻike iā ʻoe iho i kahi kūlana āu e makemake ai e hoʻohana i ka serverless computing, akā ma muli o nā kulekele ʻoihana ʻaʻole hiki.
He mea maʻalahi loa ka Fn e hoʻohana a hiki ke hāʻawi i ka pili FaaS like, me ka liʻiliʻi o luna. Hoʻopau ia i kekahi mea kūʻai aku laka-i a hiki ke hoʻokomo ʻia ma ka ʻāina a i ʻole i kekahi mea hāʻawi hoʻonā kapuaʻi kūpono o kāu koho. Aia nō ke kūʻokoʻa i ke koho ʻana i kahi ʻōlelo papahana.
Hoʻopili wale kēia ʻatikala i nā kumu kumu o Fn, akā maʻalahi ka hoʻokumu ʻana i kāu manawa holo ponoʻī, a hiki ke hoʻohana nui ʻia ka hoʻolālā holoʻokoʻa me ka hoʻohana ʻana i kahi mea kaulike Fn, a i ʻole ma ke kau ʻana iā Fn ma hope o kahi koho no ka pale.