๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ํน์ง์ ์ฝ๋๋ฅผ ์ต์ํํ๊ณ ์ง์คํ๋ ๊ฒฝํฅ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ๋๋๋ก FaaS(Function as a Service)๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ์ ๋๋ค.
์ญ์ฌ์ ์ผ๋ก AWS Lambda๋ฅผ ํตํด FaaS๋ฅผ ์ ๊ณตํ ์ต์ด์ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด๋ Amazon์ด์์ต๋๋ค. ๋ค๋ฅธ ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต์ ์ฒด๋ ๋น์ทํ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Google์ Cloud Functions
- Microsoft์ Azure Functions
์ด๋ค ํ์ฌ๋ ๋ชจ๋ ์๋ฒ๋ฆฌ์ค ์ปดํจํ , ์๋ ํ์ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์ค์ ๋ก ์ฌ์ฉํ ๋งํผ๋ง ๋น์ฉ์ ์ง๋ถํ์ง๋ง ๊ณ ๊ฐ์ ๋ ์ ์ ํ์ ๊ณ ์ ์ํต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ์ํ ๋ฌด๋ฃ ์คํ ์์ค ๋์์ด ์์ต๋๋ค. ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
- ํ๋ซํผ
์ํ์น ์คํ์์คํฌ IBM ์ธํ๋ฒ ์ดํฐ์์ ๊ฐ๋ฐ๋ ์คํ๋ง ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ , AWS Lambda, Azure Functions ๋ฐ OpenWhisk์ ์ธ๊ด์ผ๋ก๋ ์ฌ์ฉํ ์ ์๋ ์๋นํ ํ๋ถํ Spring Framework ์ํ๊ณ์ ์ผ๋ถ๋ก,ํ๋ก์ ํธ Fn , Oracle์์ ์ง์๋ฉ๋๋ค.
์ด๋ค ๋ชจ๋๋ ํด๋ผ์ฐ๋์ ์์ ํ ๋ ๋ฆฝ์ ์ ๋๋ค. ์ฆ, ์์ฒด ํด๋ผ์ฐ๋, ๊ณต์ฉ ํด๋ผ์ฐ๋, ํ๋ผ์ด๋น ํด๋ผ์ฐ๋๋ฅผ ํฌํจํ ๋ชจ๋ ํด๋ผ์ฐ๋์ ์ค์นํ ์ ์์ผ๋ฉฐ ๋ฌผ๋ก Exoscale์๋ ์ค์นํ ์ ์์ต๋๋ค.
Fn ํ๋ก์ ํธ์ ์๋ ๋ฐฉ์
Fn์ ์์ ํ Docker๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ๋ค์ ๋ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- Fn ์ธํ๋ผ์ ๋ชจ๋ ์ธก๋ฉด์ ๊ด๋ฆฌํ๊ณ Fn ์๋ฒ์ ์ํธ ์์ฉํ๋๋ก ์ค๊ณ๋ CLI ํ๋ก๊ทธ๋จ,
- Fn ์๋ฒ ์์ฒด๋ Docker ์ปจํ ์ด๋์ ํจํค์ง๋ ์ผ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
Fn์ ๋ฐฐํฌ๋ ๊ธฐ๋ฅ์ ๋ณ๋์ ์ปจํ ์ด๋์์๋ ์คํ๋๋ฏ๋ก ์๋ฅผ ๋ค์ด Clojure์ ๊ฐ์ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
ํจ์ ์ธ์๋ ํ์ค ์ ๋ ฅ(STDIN)์ผ๋ก ์ ๋ฌ๋๊ณ , ๊ฒฐ๊ณผ๋ ํ์ค ์ถ๋ ฅ(STDOUT)์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ธ์๋ ๋ฐํ ๊ฐ์ด ๋จ์ ๊ฐ(JSON ๊ฐ์ฒด ๋ฑ)์ด ์๋ ๊ฒฝ์ฐ FDK(Function Development Kit) ํํ๋ก Fn ์์ฒด์์ ์ ๊ณตํ๋ ์ถ์ํ ๊ณ์ธต์ ์ฌ์ฉํด ๋ณํํ ์ ์๋ค.
ํธ์๋ฅผ ์ํด ๋ค์ํ ์ธ์ด ๋ฐ ํด๋น ๋ฒ์ (Go, ๋ค์ํ Java ๋ฒ์ , Python ๋ฑ)์ ๊ด๋ฒ์ํ ๋ชฉ๋ก์์ FaaS ๋ฐฐํฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๊ธฐ๋ณธ ์ ๊ณต ํ ํ๋ฆฟ ์ธํธ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ๋ฐ๋ฅด๋ฉด FaaS๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
- Fn CLI๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ ๋ฐฐํฌ: Fn์ฉ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ ํ์ผ์ ์ ํํ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ฉ๋๋ค.
- ๋ค์ CLI Fn์ ์ฌ์ฉํ์ฌ ์์ฒด ๊ธฐ๋ฅ์ ๋กค์์ํฉ๋๋ค. ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ํน์ ์ ์ฅ์์ ๋ฐฐ์น๋ ํ ์๋ฒ์ ์ด ์ด๋ฏธ์ง์ ์กด์ฌ ๋ฐ ๋ฐฐ์น์ ๋ํ ์๋ฆผ์ด ์ ๋ฌ๋ฉ๋๋ค.
Fn์ ๊ธฐ๋ฅ์ ์ ๋ฌํ๋ ์๋ฆฌ
์๋ฒ๋ฆฌ์ค ๊ธฐ๋ฅ์ ๋ก์ปฌ ์ค์น ๋ฐ ํ ์คํธ
๋ก์ปฌ ์ปดํจํฐ์ Fn ์ค์น๋ฅผ ์์ํ๊ฒ ์ต๋๋ค. ๋จผ์ Fn์ ์๊ตฌ์ ๋ฐ๋ผ Docker๊ฐ ์ค์น๋ฉ๋๋ค. Debian/Ubuntu๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
$ sudo apt-get update
$ sudo apt-get install docker.io
๋๋ ์์คํ ์ ๋ฐ๋ผ ํจํค์ง ๊ด๋ฆฌ์/Docker ๋น๋๋ฅผ ์ฌ์ฉํ์ธ์. ๊ทธ๋ฐ ๋ค์ Fn CLI ์ค์น๋ก ๋ฐ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ปฌ์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Homebrew๊ฐ ์ค์น๋ OSX๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
$ 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
์ด์ CLI๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์ฒ์ ๋ฐฐํฌํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ๋จ์ํ๋ฅผ ์ํด Node์ ๊ฐ์ ๋ด์ฅ ์คํ ํ๊ฒฝ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
์ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ฑ๋ฉ๋๋ค. hellonode
๋ช ๊ฐ์ง ๊ธฐ๋ณธ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ Fn ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก ๊ฐ๋ฐํฉ๋๋ค. ์๋ก ์์ฑ๋ ๋๋ ํฐ๋ฆฌ ๋ด์์ ์ ํํ ์ธ์ด ๋๋ ๋ฐํ์์ ํ์ค์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ ์ ์์ต๋๋ค.
# ะะฐัะฐะปะพะณ ั 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์ ์ด๊ธฐ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๊ณ ํ์ผ์ ์์ฑํฉ๋๋ค. func.yaml
, Fn์ ํ์ํ ์ค์ ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ํํ ์ธ์ด๋ก ์ฝ๋์ ๋ํ ํ
ํ๋ฆฟ์ ์ค์ ํฉ๋๋ค.
๋ ธ๋ ๋ฐํ์์ ๊ฒฝ์ฐ ์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค.
$ 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}
})
์ด์ ๋ก์ปฌ์์ ๊ธฐ๋ฅ์ ์ ์ํ๊ฒ ํ ์คํธํ์ฌ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
๋จผ์ Fn ์๋ฒ๋ฅผ ์์ํ๊ฒ ์ต๋๋ค. ์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด Fn ์๋ฒ๋ Docker ์ปจํ ์ด๋์ด๋ฏ๋ก ์์ ํ 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
ํจ์๋ฅผ ์คํํ๋ ค๋ฉด ํด๋น ํจ์๋ฅผ "๋กค์์"ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ะธะผั ะฟัะธะปะพะถะตะฝะธั
: Fn์์๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ํ ๋ค์์คํ์ด์ค๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
Fn CLI๊ฐ ํ์ผ์ ๊ฒ์ํฉ๋๋ค. func.yaml
๊ธฐ๋ฅ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์์ต๋๋ค. ๋จผ์ ์ฐ๋ฆฌ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ผํฉ๋๋ค 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
๋ช ๋ น ์ถ๋ ฅ์์ โโ๋ณผ ์ ์๋ฏ์ด ํจ์๊ฐ ํฌํจ๋ ์๋ก์ด Docker ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋ฉ๋๋ค. ํจ์๋ฅผ ํธ์ถํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- Fn ๋ช
๋ น์ ์ฌ์ฉํ์ฌ
invoke
- ์ง์ ์ ํ๋ฅผ ํตํด
http
๋์ invoke
Fn์ ํตํด ํ
์คํธ๋ฅผ ์ํด HTTP๋ฅผ ํตํ ์์
์ ๊ฐ๋จํ ์๋ฎฌ๋ ์ดํธํ๋ฏ๋ก ๋น ๋ฅธ ํ
์คํธ์ ํธ๋ฆฌํฉ๋๋ค.
$ fn invoke fnexo hellonode # ะฒัะทัะฒะฐะตะผ ััะฝะบัะธั hellonode ะฟัะธะปะพะถะตะฝะธั fnexo
{"message":"Hello World"}
ํจ์๋ฅผ ์ง์ ํธ์ถํ๋ ค๋ฉด ์ ์ฒด URL์ ์์์ผ ํฉ๋๋ค.
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}
Fn ์๋ฒ๋ ํฌํธ 8080์์ ํด๋น ๊ธฐ๋ฅ์ ๋
ธ์ถํ๊ณ ๊ธฐ๋ฅ URL์ด ํจํด๊ณผ ์ผ์นํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฉ๋๋ค. t/app/function
, ๊ทธ๋ฌ๋ ์์ ํ๋ ์๋๋๋ค. HTTP๋ฅผ ํตํด ํจ์๋ ์ง์ ํธ์ถ๋์ง ์๊ณ ์ด๋ฆ์ ๋ฐ๋ผ ํจ์ ํธ์ถ์ "์์"ํ๋ ์์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ํตํด ํธ์ถ๋ฉ๋๋ค. ํธ๋ฆฌ๊ฑฐ๋ ๋ค์์ ์ ์๋์ด ์์ต๋๋ค. `func.yml
ํ๋ก์ ํธ:
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 ััะธะณะณะตัะฐ
ํจ์ ์ด๋ฆ๊ณผ ์ผ์นํ๋๋ก ํธ๋ฆฌ๊ฑฐ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋จ์ํ๋ฉ๋๋ค.
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # ัะพะฒะฟะฐะดะฐะตั ั ะธะผะตะฝะตะผ ััะฝะบัะธะธ
๊ทธ๋ฐ ๋ค์ ํจ์ ์ ๋ฌ์ ๋ค์ ์คํํ๊ณ ์ ํธ๋ฆฌ๊ฑฐ์์ ํธ์ถํฉ๋๋ค.
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}
๋ชจ๋ ๊ฒ์ด ์๋ํ๊ณ ์์ต๋๋ค! ์ด์ ๋ณธ๊ฒฉ์ ์ธ ์คํ์ผ๋ก ๋์ด๊ฐ FaaS๋ฅผ ์๋ฒ์ ๊ฒ์ํ ์๊ฐ์ ๋๋ค!
์์ฒด ์ธํ๋ผ์ ์๋ฒ๋ฆฌ์ค ๊ธฐ๋ฅ ์๋น์ค ์ค์น
Exoscale CLI๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋จธ์ ์ ๋น ๋ฅด๊ฒ ์ค์นํด ๋ณด๊ฒ ์ต๋๋ค. ์์ง ์ค์ ํ์ง ์์๋ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ธ์.
$ 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
๊ทธ๋ฐ ๋ค์ ๊ฐ์ ๋จธ์ ์ SSH๋ฅผ ํตํด ์ฐ๊ฒฐํ๊ณ ์๊ฒฉ Fn ์๋ฒ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
$ 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)
๊ทธ๋ฐ ๋ค์ ๋ก์ปฌ ์์คํ ์์ ์ด๋ฏธ ์ํํ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก Docker์ Fn ์๋ฒ๋ฅผ ์ค์นํ๊ณ ์๋ฒ๋ฅผ ์์ํฉ๋๋ค.
$ 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์ด ๊ธฐ๋ฅ์ ๋ฐ์ ์ค๋น๊ฐ ๋์์ต๋๋ค! ๊ธฐ๋ฅ์ ์๊ฒฉ ์๋ฒ๋ก ์ ์กํ๊ธฐ ์ํด ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค. deploy
ํ๋๊ทธ๋ฅผ ์๋ตํ์ฌ ๋ก์ปฌ ์ปดํจํฐ์์ --local
.
๋ํ Fn์ ์ฌ์ฉํ๋ ค๋ฉด Fn ์๋ฒ ๋ฐ Docker ๋ ์ง์คํธ๋ฆฌ์ ์์น๋ฅผ โโ์ง์ ํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ต์
์ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ์ค์ ํ ์ ์์ต๋๋ค. FN_API_URL
ะธ FN_REGISTRY
๊ฐ๊ฐ ๋ฐฐํฌ๋ฅผ ์ํ ๊ตฌ์ฑ ์์ฑ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๋ณด๋ค ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
Fn ์ฉ์ด๋ก ๋ฐฐํฌ๋ฅผ ์ํ ๊ตฌ์ฑ์ ํธ์ถํฉ๋๋ค. context
. ๋ค์ ๋ช
๋ น์ ์ปจํ
์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ์ปจํ ์คํธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฉ๊ธ ์์ฑ๋ ์ปจํ ์คํธ๋ก ์ ํํฉ๋๋ค.
$ fn use context exoscale
Now using context: exoscale
์ด์ ๋ถํฐ Fn ๊ธฐ๋ฅ ์ ๊ณต์ ์ ํํ DockerHub ๊ณ์ ์ ์ฌ์ฉํ์ฌ Docker ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค(์ ๊ฒฝ์ฐ์๋ - nfrankel
), ๊ทธ๋ฐ ๋ค์ ์๊ฒฉ ์๋ฒ์ ์๋ฆฝ๋๋ค(์ด ์์์๋ - http://185.19.30.175:8080
) ํจ์๊ฐ ํฌํจ๋ ์ต์ ์ด๋ฏธ์ง์ ์์น์ ๋ฒ์ ์ ๋ํด ์์๋ณด์ธ์.
$ 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 .
๋ง์ง๋ง์ผ๋ก:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
Fn ๊ธฐ๋ฐ ์๋ฒ๋ฆฌ์ค ์ปดํจํ
์ ๊ธฐ๋ฅ ์๋ช
์ฃผ๊ธฐ
์์ฒด ์ฉ๋์ ๋ฐ๋ฅธ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ์ด์
์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์ํธ ์์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ฆฝ์ ์ธ ๋ถ๋ถ์ ์ ์ํ๊ฒ ๊ตฌํํ๊ธฐ ์ํ ํธ๋ฆฌํ ์๋ฃจ์ ์ ๋๋ค.
์ด๋ ์ ํํ ๊ณต๊ธ์ ์ฒด์ ๊ณ ์ ํ๋ ๋ฐ ๋ฐ๋ฅธ ์จ๊ฒจ์ง ๋น์ฉ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ, ์ด๋ ํน์ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๊ท๋ชจ์ ๋ฐ๋ผ ํฅํ ๋น์ฉ์ด ์ฆ๊ฐํ๊ณ ์ ์ฐ์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ๋ฉํฐ ํด๋ผ์ฐ๋ ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ํด๋ผ์ฐ๋ ์ํคํ ์ฒ๋ ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ ์ฌ์ฉํ๊ณ ์ถ์ ์ํฉ์ ์ฝ๊ฒ ์ฒํ ์ ์์ง๋ง ๊ธฐ์ ์ ์ฑ ์ผ๋ก ์ธํด ๋ถ๊ฐ๋ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Fn์ ์ฌ์ฉํ๊ธฐ ๋งค์ฐ ์ฝ๊ณ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ์์ด ๊ฑฐ์ ๋์ผํ FaaS ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ ๊ณต๊ธ์ ์ฒด ์ข ์์ ์ ๊ฑฐํ๊ณ ๋ก์ปฌ๋ก ์ค์นํ๊ฑฐ๋ ์ํ๋ ํธ๋ฆฌํ ํด๋ผ์ฐ๋ ์๋ฃจ์ ์ ๊ณต์ ์ฒด์ ์ค์นํ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ ํ์๋ ์์ ๊ฐ ์์ต๋๋ค.
์ด ๋ฌธ์์์๋ Fn์ ๊ธฐ๋ณธ ์ฌํญ๋ง ๋ค๋ฃจ์ง๋ง ์์ฒด ๋ฐํ์์ ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ Fn ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ณดํธ๋ฅผ ์ํด ํ๋ก์ ๋ค์ Fn์ ๋ฐฐ์นํ์ฌ ์ ์ฒด ์ํคํ ์ฒ๋ฅผ ๋ ๊ด๋ฒ์ํ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com