如果想要透過yaml檔把cloud的infra快速deploy到各雲端平台,可以使用Serverless framework做deploy,並可結合版控工具(ex: github和gitlab)和CI/CD工具達成自動化部署。下面將會介紹,如何透過Serverless framework部署aws的服務。
Serverless framework是一個幫助開發人員部署雲端架構到各雲端供應商(ex: aws、azure和alibaba…)的工具,只要撰寫好serverless.yml(當然也可以寫程式),並指定要deploy到哪個雲端服務,就可以搭配各雲端服務的CI/CD工具把infra部署上去。舉例來說,Serverless framework要部署aws的service時,會把 yaml檔轉成cloudFormation的template,並透過cloudFormation去部署aws的服務。下面將會介紹怎麼在local安裝Serverless framework和如何撰寫serverless.yml。
要安裝Serverless framework,可以透過npm進行安裝。如果還沒有安裝npm,先安裝nodejs和npm。
apt-get -y install nodejs npm
然後再透過npm安裝Serverless framework。
npm install -g serverless
接著下serverless -v
指令測試,就可以看到是否有安裝成功。
一開始先給要deploy的service名稱,並在provider
指定要部署到哪個雲端平台,哪個region,接著撰寫要deploy雲端平台底下的哪些service。以AWS為例,把要deploy的AWS service會寫在resources
底下,像是DynamoDB、eventbus和sns…都是在resource
底下並設定Type
告訴AWS要deploy哪個service。
service: my-ec2-service
provider:
name: aws
region: us-east-1
resources:
Resources:
CustomerTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: primary_key
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: primary_key
KeyType: HASH
TableName: ${self:service}-customerTable-${sls:stage}
但是lambda比較特別,會寫在function底下,並可設定events指定要如何觸發lambda執行程式。另外,如果需要從cli或程式指定要部署的環境和AWS region,可以在provider
底下的stage和region放${opt:stage}
和${opt:region}
,這樣在deploy的時候,就可以透過cli下--stage
和--region
這兩個參數指定。
service: gitlab-serverless-ci-cd
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
functions:
hello:
handler: src/handler.hello
events:
- http:
path: hello
method: get
cors: true
明天再接著說如何測試serverless yaml和部署serverless到AWS。