Ke kūkulu nei i kā mākou serverless ma muli o Fn

Ke kūkulu nei i kā mākou serverless ma muli o Fn

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:

  • anuu ʻO Apache OpenWhisk, hoʻomohala ʻia i loko o kahi incubator e IBM,
  • 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,
  • Papahana Fn, kākoʻo ʻia e Oracle.

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.

Ke kūkulu nei i kā mākou serverless ma muli o Fn
ʻ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:

$ sudo apt-get update
$ sudo apt-get install docker.io

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:

$ brew install fn

==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz
  /usr/local/Cellar/fn/0.5.8: 5 files, 16.7MB

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:

$ fn invoke fnexo hellonode      # вызываем функцию hellonode приложения fnexo

{"message":"Hello World"}

No ke kāhea pololei ʻana i kahi hana, pono ʻoe e ʻike i ka URL piha:

$ curl http://localhost:8080/t/fnexo/hellonode-trigger

{"message":"Hello World"}

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:

schema_version: 20180708
name: hellonode
version: 0.0.3
runtime: node
entrypoint: node func.js
format: json
triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode-trigger    # URL триггера

Hiki iā mākou ke hoʻololi i ka inoa trigger e hoʻohālikelike i ka inoa hana, e maʻalahi kēia i nā mea āpau:

triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode    # совпадает с именем функции

A laila holo hou mākou i ka hāʻawi ʻana i ka hana a kāhea iā ia mai kahi hoʻoiho hou:

$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode

{"message":"Hello World"}

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:

$ exo firewall create fn-securitygroup
$ exo firewall add fn-securitygroup ssh --my-ip
$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0
$ exo vm create fn-server -s fn-securitygroup

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:

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo systemctl start docker
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
$ sudo fn start

...

    ______
   / ____/___
  / /_  / __ 
 / __/ / / / /
/_/   /_/ /_/
    v0.3.643

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:

$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel

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 ka hope:

$ curl http://185.19.30.175:8080/t/fnexo/hellonode

{"message":"Hello World"}

Ke kūkulu nei i kā mākou serverless ma muli o Fn
Hana i ke ola ma ka Fn-Based Serverless Computing

ʻ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.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka