iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
DevOps

探索亞馬遜雨林30天系列 第 10

Day 10: Serverless framework deploy(上)

  • 分享至 

  • xImage
  •  

如果想要透過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。

Install Serverless framework

要安裝Serverless framework,可以透過npm進行安裝。如果還沒有安裝npm,先安裝nodejs和npm。

apt-get -y install nodejs npm

然後再透過npm安裝Serverless framework。

npm install -g serverless

接著下serverless -v指令測試,就可以看到是否有安裝成功。

撰寫serverless.yml

一開始先給要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。


上一篇
Day 9: 如何透過AWS KMS加解密資料
下一篇
Day 11: Serverless framework deploy(下)
系列文
探索亞馬遜雨林30天16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言