Skip to content

Commit 2deb9e9

Browse files
committed
feat: quick start ok
Signed-off-by: seven <zilisheng1996@gmail.com>
1 parent 3a5eb91 commit 2deb9e9

File tree

4 files changed

+183
-2
lines changed

4 files changed

+183
-2
lines changed

docs/.vitepress/config.mts

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default defineConfig({
4545
text: 'ServerlessInsight',
4646
items: [
4747
{text: 'ServerlessInsight介绍', link: 'introduction'},
48-
{text: '快速入门', link: 'getting-started'},
48+
{text: '快速开始', link: 'getting-started'},
4949
{text: '用户手册', link: 'reference'},
5050
{text: '命令行', link: 'cli'},
5151
{text: '支持服务', link: 'support'},

docs/docs/specification.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ events:
6161
```
6262

6363
## Concepts
64-
64+
Please use only lowercase letters, numbers and hyphens. Also, keep Service names short, since they are added into the name of each cloud resource the Serverless Framework creates, and some cloud resources have character length restrictions in their names.
6565
### Version
6666

6767
The version of the ServerlessInsight Iac, the version is used to define the compatibility of the Iac with the

docs/getting-started.md

+181
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# 快速开始
2+
3+
然我们基于ServerlessInsight快速从0到一构建个简单的全栈Serverless应用程序。我们将创建一个简单的应用程序,该应用程序将在浏览器中显示“Hello
4+
World”。这里以阿里云为例子。
5+
6+
## 工具安装
7+
8+
前提条件是您已经安装了Node.js(Node.js >= 18.x)和npm。如果没有,请参考[Node.js](https://nodejs.org/en/download/)下载安装。
9+
10+
1. 安装ServerlessInsight CLI
11+
12+
```bash
13+
npm install -g @geek-fun/serverlessinsight
14+
```
15+
2. 执行`si --version`查看工具是否安装成功,如果安装成功,将会显示版本号。
16+
17+
## 配置供应商密钥(阿里云)
18+
19+
ServerlessInsight需要获得目标云厂商的访问权限包括云供应商的基础设施即代码服务的全部权限以及根据您的业务涉及到的Serverless服务的相应权限。
20+
将对应的秘钥export到全局环境变量中,如阿里云的`ALIYUN_ACCESS_KEY_ID`, `ALIYUN_ACCESS_KEY_SECRET`以及服务部署的目标区域
21+
`ALIYUN_REGION`
22+
23+
![阿里云AccessKey生成示意](/aliyun-access-key.png)
24+
25+
> 请您务必妥善保管您的秘钥信息,不要通过任何方式(e.g. GitHub)将AccessKey 公开到外部渠道,以避免被他人利用而造成 安全威胁 。
26+
> 强烈建议您遵循 阿里云安全最佳实践 ,使用 RAM 子用户AccessKey来进行 API 调用。ServerlessInsight不会保存任何供应商秘钥信息!
27+
28+
## 初始化项目
29+
30+
ServerlessInsight不强制要求项目的目录结构,但是我们建议您按照如下的目录结构组织您的项目(以ts项目为例):
31+
32+
```
33+
hello-world-proj/
34+
├── artifacts/
35+
│ └── hello-world-proj.zip
36+
├── scripts/
37+
│ └── package.sh
38+
├── src/
39+
├── tests/
40+
├── README.md
41+
├── package.json
42+
├── package-lock.json
43+
├── tsconfig.json
44+
|── Dockerfile
45+
└── serverlessinsight.yml
46+
```
47+
48+
其中`src`目录存放应用程序代码,`tests`目录存放测试代码,`scripts`目录存放自动化脚本如打包脚本,`artifacts`目录存放打包后的应用程序代码。
49+
50+
1. 配置`serverlessinsight.yml`声明资源
51+
创建`serverlessinsight.yml`,并将以下内容复制到文件中:
52+
53+
```yaml
54+
version: 0.1
55+
provider: aliyun
56+
57+
vars:
58+
region: cn-hangzhou
59+
60+
stages:
61+
dev:
62+
region: ${vars.region}
63+
64+
service: hello-world-api
65+
66+
tags:
67+
owner: geek-fun
68+
69+
functions:
70+
hello_world_fn:
71+
fc_name: hello-world-fn
72+
runtime: nodejs14
73+
handler: index.handler
74+
code: artifacts/hello-world-api.zip
75+
memory: 512
76+
timeout: 10
77+
environment:
78+
NODE_ENV: prod
79+
80+
events:
81+
gateway_event:
82+
type: API_GATEWAY
83+
name: insight-poc-gateway
84+
triggers:
85+
- method: GET
86+
path: /api/*
87+
backend: hello-world-fn
88+
```
89+
90+
2. 编写应用程序代码
91+
`src`目录下创建`index.ts`文件,并将以下内容复制到文件中:
92+
93+
```typescript
94+
export async function handler(event: any, context: any) {
95+
return {
96+
statusCode: 200,
97+
body: JSON.stringify({
98+
message: 'Hello World!',
99+
}),
100+
};
101+
}
102+
```
103+
104+
3. 打包应用程序
105+
-`Dockerfile`文件中添加以下内容:
106+
```dockerfile
107+
FROM node:18.20.3-buster-slim@sha256:95fb3cf1d1ab1834c0fd65cdd2246198662460ae8f982a6cfab187889dd54bbe AS builder
108+
WORKDIR /app
109+
110+
ENV NODE_ENV=development
111+
COPY ./package.json .
112+
COPY ./package-lock.json .
113+
RUN npm install
114+
COPY ./tsconfig.json .
115+
COPY ./src ./src
116+
RUN npm run build
117+
118+
FROM node:18.20.3-buster-slim@sha256:95fb3cf1d1ab1834c0fd65cdd2246198662460ae8f982a6cfab187889dd54bbe
119+
WORKDIR /app
120+
121+
ENV NODE_ENV=production
122+
COPY --from=builder /app/dist .
123+
COPY ./package.json .
124+
COPY ./package-lock.json .
125+
RUN npm install
126+
```
127+
Dockerfile文件中定义了两个阶段,第一个阶段用于构建应用程序,第二个阶段用于运行应用程序,目的是仅保留必要的执行文件,最大程度减小包的体积。
128+
129+
-`scripts`目录下创建`package.sh`文件,并将以下内容复制到文件中:
130+
```bash
131+
#!/bin/bash -eux
132+
set -o pipefail
133+
134+
cd "$(dirname "$0")/.." || exit
135+
136+
mkdir -p "artifacts"
137+
rm -rf ./dist ./artifacts/*
138+
139+
IMAGE_NAME="hello-world-api"
140+
docker build -t "${IMAGE_NAME}" .
141+
142+
docker run --rm \
143+
-v "$(pwd)"/dist:/dist \
144+
--name "${IMAGE_NAME}-package" "${IMAGE_NAME}:latest" \
145+
sh -c "cp -r /app/. /dist"
146+
147+
cd dist && zip -r -D "../artifacts/${IMAGE_NAME}.zip" ./*
148+
```
149+
然后执行`chmod +x scripts/package.sh`赋予脚本执行权限,执行`./scripts/package.sh`打包应用程序,完成后我们应当在
150+
`artifacts`目录下看到用以部署的`hello-world-api.zip`项目压缩文件。
151+
152+
## 部署服务
153+
154+
在部署服务之前,可以通过命令`si validate`检查`serverlessinsight.yml`文件中的配置项是否正确可用。
155+
通过后执行如下命令部署服务到云提供商的环境中:
156+
157+
```bash
158+
si deploy --stage dev <stackName>
159+
```
160+
161+
stackName是部署的服务在云提供商的资源栈名称,部署成功后,您将会看到如下输出:
162+
163+
```bash
164+
Deploying service hello-world-api to stage dev
165+
Service hello-world-api deployed successfully
166+
```
167+
168+
## 调用服务
169+
170+
-TBC
171+
172+
## 清理资源
173+
174+
如果应用程序不再需要,可以通过以下命令清理资源:
175+
176+
```bash
177+
si destory --stage dev <stackName>
178+
```
179+
180+
<span style="color: red;">**注意:**
181+
删除资源栈会删除所有申明的资源导致服务完全不可用且丢失有状态资源的数据,请确保相关数据、内容已备份或确认不再需要后执行该操作</span>

docs/public/aliyun-access-key.png

704 KB
Loading

0 commit comments

Comments
 (0)