fn quick start
Fn is an event-driven, open source, functions-as-a-service compute platform that you can run anywhere. Some of it's key features:
Write once
- Any language
- AWS Lambda format supported
Run anywhere
- Public, private and hybrid cloud
- Import functions directly from Lambda and run them wherever you want
- Easy to use for developers
- Easy to manage for operators
- Written in Go
- Simple yet powerful extensibility
1.安装fn
brew install fn
2. 升级docker
docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:40:09 2017
OS/Arch: darwin/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:45:38 2017
OS/Arch: linux/amd64
Experimental: false
3. 登录docker hub
docker login
Username (feuyeux@gmail.com): feuyeux
Password:
Login Succeeded
4. 启动fn服务
fn start
______
/ ____/___
/ /_ / __ \
/ __/ / / / /
/_/ /_/ /_/
v0.3.141
5. 撰写函数
mkdir hello
cd hello
vim func.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello from Fn!")
}
6. 创建应用
fn init
______
/ ____/___
/ /_ / __ \
/ __/ / / / /
/_/ /_/ /_/
Found go function, assuming go runtime.
func.yaml created.
7. 打包应用
fn run
Building image feuyeux/hello:0.0.1
Sending build context to Docker daemon 4.096kB
Step 1/8 : FROM funcy/go:dev as build-stage
---> 4cccab7fc828
Step 2/8 : WORKDIR /function
---> Using cache
---> ba44eaaa14da
Step 3/8 : ADD . /go/src/func/
---> c6480ae51b4f
Step 4/8 : RUN cd /go/src/func/ && go build -o func
---> Running in ac0d2269aebb
---> 7ed8e8c8c7ba
Removing intermediate container ac0d2269aebb
Step 5/8 : FROM funcy/go
---> 573e8a7edc05
Step 6/8 : WORKDIR /function
---> Using cache
---> 00809f3fee14
Step 7/8 : COPY --from=build-stage /go/src/func/func /function/
---> Using cache
---> ee31e804adca
Step 8/8 : ENTRYPOINT ./func
---> Using cache
---> 5f32eff9e328
Successfully built 5f32eff9e328
Successfully tagged feuyeux/hello:0.0.1
Hello from Fn!
8. 部署应用
fn deploy --app myapp
Deploying hello to app: myapp at path: /hello
Bumped to version 0.0.2
Building image feuyeux/hello:0.0.2
Sending build context to Docker daemon 4.096kB
Step 1/8 : FROM funcy/go:dev as build-stage
---> 4cccab7fc828
Step 2/8 : WORKDIR /function
---> Using cache
---> ba44eaaa14da
Step 3/8 : ADD . /go/src/func/
---> 88ec5ca237e5
Step 4/8 : RUN cd /go/src/func/ && go build -o func
---> Running in e2247c834266
---> c787e9416655
Removing intermediate container e2247c834266
Step 5/8 : FROM funcy/go
---> 573e8a7edc05
Step 6/8 : WORKDIR /function
---> Using cache
---> 00809f3fee14
Step 7/8 : COPY --from=build-stage /go/src/func/func /function/
---> Using cache
---> ee31e804adca
Step 8/8 : ENTRYPOINT ./func
---> Using cache
---> 5f32eff9e328
Successfully built 5f32eff9e328
Successfully tagged feuyeux/hello:0.0.2
Pushing feuyeux/hello:0.0.2 to docker registry...The push refers to a repository [docker.io/feuyeux/hello]
b34434bfd239: Pushed
3d098239d19c: Pushed
e9474866f7d4: Pushed
c0e205d473e9: Pushed
0.0.2: digest: sha256:b88635814d7935e7a505133b167c3937663fa73344579790dea60877c13f5491 size: 1154
Updating route /hello using image feuyeux/hello:0.0.2...
9. 测试应用
curl http://localhost:8080/r/myapp/hello
Hello from Fn!
fn call myapp /hello
Hello from Fn!