Building nostra serverless secundum Fn

Building nostra serverless secundum Fn

Serverless computing is one of the most prominent trends in cloud computing. Praecipuum operandi principium est quod infrastructura non pertinet ad DevOporum, sed ad servitium provisoris. Resource scalis automatice ad onus accommodet et magnas commutationes habet.

Alia notatio communis est propensio ad codicem umbilicum extenuandi, quae idcirco computatio sine calculo interdum munus serviendi appellatur (FaaS).

Historice, primum nubes provisor offerre Faas cum AWS Labda Amazon erat, unde nomen. Aliae nubis officia similia etiam praebent;

  • Cloud functiones de Google
  • Caeruleus functiones Microsoft

Omnes hae societates supputationem, auto- scalis servientem praebent, et tantum solvet quod actu uteris, sed clientes in operis proprietatis claudunt. Nihilominus, liber et apertus fons optionum rationum ministrantium computandi sunt. Notatu dignum est;

  • Platform Apache OpenWhiskelaboratum in incubatore IBM;
  • Ver Cloud functiones, ut pars satis opulenti fontis Framework ecosystematis, quae etiam uti frons pro AWS Labda, Azure functionibus et OpenWhisk adhiberi potest,
  • Project Fnoraculo fultus.

Omnes hae omnino sine nubibus sunt, id est, in quavis nube inaugurari possunt, etiam tuo proprio, publico vel privato, et sane in Exoscale.

Quomodo operatur in Fn project

Fn Docker perfecte fundatur in duobus principalibus componentibus constat;

  • CLI programma ordinatur ad omnes rationes Fn infrastructure administrandas et cum Fn servo interacte;
  • Ipsum Fn servo regularis applicationis in Docker continente sarcinam constringit.

Munera in Fn explicata etiam in vasis separatis exsecuta sunt, quae multum tibi permittit ut linguas programmandi, exempli gratia... Clojure!

Munus argumentorum ad regulam input (STDIN), eventus scripti sunt ad vexillum output (STDOUT). Si rationes vel valores reditus simplices non sunt (ut obiectum JSON), converti possunt utentes abstractionis iacuit, dummodo per ipsum Fn in forma functionis Development Kit (FDK).

Pro opportunitate, aedificata in locis templaterum faciliorem praebentur instruere Faas in amplissimo indice diversarum linguarum earumque versionum (Ite, variae versiones Javae, Python, etc.).

Faas facile creando hoc schemate sequendo;

  • Explicare munus utens Fn CLI: applicatio configurationis fasciculi Fn creatur fundatur in template delectae.
  • Munus proprium evolvimus, iterum utendo CLI Fn: continens imaginem in quodam repositorio collocatur, post quod de exsistentia et collocatione huius imaginis notificatur.

Building nostra serverless secundum Fn
Principium munera tradendi ad Fn

Locus institutionem et probatio functionum serverless

Incipiamus installare Fn in machinam localem. Primum, Docker installatur, postulante Fn. Posito Debian / Ubuntu sumus:

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

Aut procurator sarcina utere/Docker secundum rationem tuam aedificare. Tunc recta ire potes ad Fn CLI inaugurari. Exempli gratia: Crispum:

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

Si in OS es cum Homebrew inauguratus, aliter ire potes:

$ 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

Nunc parati sumus ad munus nostrum explicandum initio utendi CLI. Pro simplici utemur in ambitu fabricato, ut Node:

$ fn init --runtime node --trigger http hellonode

Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.

Novum directorium creabitur hellonode ut adhuc munus nostrum Fn cum quibusdam fasciculis fundamentalibus conformationis enucleet. Intra directorium novi creatum, applicationem tuam creare potes secundum signa linguae electae vel runtime:

# Каталог с 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

Fn structuram projecti initialem creat, fasciculum creat func.yamlcontinens loca necessaria pro Fn, et Formulam Codicis in lingua quam elegeratis ponit.

In casu nodi runtime hoc significat:

$ 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}
})

Nunc munus nostrum localiter experiemur quomodo omnia opera faciant.

Primum incipiemus a Fn servo. Ut iam dictum est, servo Fn Docker continente est, ergo, post satus, ibit et imaginem e Docker registro accipiet.

$ 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

Ut munus nostrum currat, necesse est ut « evolvatur ». Hoc postulat имя приложения: In Fn, omnes applicationes ut nomina spatii ad functiones relatas specificari debent.

Fn CLI quaeram tabella func.yaml in directorio hodierno quod munus configurare debet. Prius ergo debes ire ad nostrum presul 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

Ut videre potes ex imperio output, novum Docker continens imaginem creatur in quo munus nostrum est. Munus advocandi paratus est, et duos modos ad id faciendum habemus;

  • per imperium Fn invoke
  • vocant directe per http

voca invoke via Fn simpliciter aemulatur opus per HTTP pro probationibus, quod convenit ad probationes vivas;

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

{"message":"Hello World"}

Ut munus directe vocare, plenam URL scire debes:

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

{"message":"Hello World"}

Fn server munera sua in portu 8080 exponit et munus URL apparet exemplar aequare t/app/functionsed non omnino. Per HTTP functionem non directe dicitur, sed per felis sic dictam, quae, secundum nomen suum, munus vocatum "incipit". Triggers definiuntur `func.yml exstare:

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 триггера

Nomen felis mutare possumus ut munus nomine par, hoc omnia simpliciorem reddet;

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

Deinde munus partus iterum curritur et eam e novo felis vocamus;

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

{"message":"Hello World"}

Omnia laborat! Tempus est ut experimenta probemus et nostrum Faas in calculonis divulgent!

Installing serverless function services on your own infrastructure

Cito machinam virtualem instituamus utens Exoscale CLI. Si nondum eam posuisti, uti potes nostri velox initium dux. Hoc instrumentum frigidum est quod augebit ubertatem tuam magis. Noli oblivisci te regulam configurare ad portum apertum 8080 in Societas Securitatis! Praecepta sequentia virtualem machinam puram deducet, ad munera nostra hospitio parata;

$ 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

Tunc ssh in machinam virtualem potes et in servo Fn remoto institue:

$ 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)

Deinde Docker et Fn server eodem modo inaugurare, qua iam in machina locali factum est, servo incipere:

$ 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

Fn munera accipere parata est! Pro iaculis functionum translatione ad remotum server, mandato utemur deploy de locali computatrum omittendo vexillum --local.

Praeterea, Fn requirit ut locum designatum subcriptio servo Fn et Docker. Haec optiones per ambitum variabilium constitui possunt FN_API_URL и FN_REGISTRY respective, sed etiam commodiorem viam praebet ut facilius creationem et administrationem figurarum instruere possit.

In Fn verbis conformatio instruere dicitur context. Sequens mandatum contextum creabit:

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

Potes videre contextus praesto sic:

$ fn list contexts

CURRENT NAME      PROVIDER      API URL                      REGISTRY
    default       default       http://localhost:8080/
    exoscale      default       http://185.19.30.175:8080    nfrankel

Et vertas ad contextum qui modo creatus est sic:

 $ fn use context exoscale

 Now using context: exoscale

Hinc in pluma Fn partus detrahet Docker imagines utens ratione delectae DockerHub (in causa mea - nfrankel) et postea certiorem servo remotum (in hoc exemplo - http://185.19.30.175:8080) de situ et versione imaginis novissimae continens munus tuum.

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

Denique:

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

{"message":"Hello World"}

Building nostra serverless secundum Fn
Munus Lifecycle in Fn-Substructio Serverless Computing

Commoda serverless computandi ad facultatem tuam

In calculonis servis solutio opportuna est ad partes independentes celeriter exsequendas applicationis, quae inter se occurrunt cum applicationibus multiplicioribus vel microformiis.

Hoc saepe ob absconditum sumptum claudendi ad electum venditorem, qui, pro certo casu ac volumine, ad altiores sumptus ducere potest ac flexibilitatem in futurum reduci.

Multi-nubes et nubes hybrida architecturae in hoc casu etiam patiuntur, quia facile te invenire potes in casu quo velis calculonis servis uti, sed propter corporates rationes fieri non potest.

Fn facillime uti potest, et eadem fere faas interfaciei, cum paulo supra caput. Excludit quemlibet venditorem in seram et in locum institui potest vel in qualibet nube convenienti solutionis provisoris electionis tuae. Est etiam libertas loquendi programmandi.

Articulus hic solum fundamenta Fn operit, sed runtime proprium creans est admodum simplex, et altiore architectura latius Fn librario onere utendo explicari potest, vel post tutelae procuratorem ponendo Fn.

Source: www.habr.com

Add a comment