5

我遵循了一個出色的指南(Serverless Stack),它創建了一個典型的帶無響應前端的CRUD無服務器基礎結構。它使用AWS的Serverless Framework無服務器框架:如何實現完整的「基礎架構作爲代碼」?

我不喜歡的是,引導安裝程序,有很多手動點擊圖形用戶界面(主要是亞馬遜的控制檯界面)涉及。即該設置不受版本控制,不易重現。這是不容易將其與CI/CD過程等延伸。在這個例子中,以下資源需要手動設置:

  • AWS Cognito用戶羣
  • AWS Cognite用戶羣的應用
  • AWS Cognito聯合身份游泳池
  • AWS DynamoDB例如
  • AWS S3桶(X3)(這還舉辦frontend
  • AWS CloudFront的分佈
  • AWS Route53區域文件

從代碼構建的唯一資源是無服務器函數(lambdas)本身以及API網關實例。這就是無服務器框架使用其文件serverless.yml的原因。但是以上所有資源都是而不是自動創建的。他們有時需要使用他們的ARN爲referenced to,但他們不是由serverless.yml配置創建的。在生產環境中運行這樣的系統(主要依賴通過GUI手動創建服務)看起來有風險。

我在想這個解決方案是使用Terraform或Cloudformation。但是無服務器框架本身已經在使用Cloudformation來設置Lambda,但不是用於其他資源。那麼如何消除這種差距呢?換句話說,如何在代碼中重建Serverless Stack中描述的整個設置?

將CloudFormation設置爲無服務器,然後使用自己的Cloudformation模板來設置lambdas似乎很奇怪,也許不可能。擴展無服務器框架可能更有意義,不僅可以定義需要在serverless deploy上創建的函數和API網關,還可以定義其他資源,如DynamoDB或Cognito用戶池。人們是否有過這樣的例子或企圖?

回答

3

我同意關於這方面的文檔將使一個出色的pull request here

你說得對,serverless正在使用CloudFormation。該框架通過您的serverless.ymlresources密鑰的方式向您提供底層的CloudFormation機制。

我覺得the intent of the framework是,你會把這些資源的其餘部分(Cognito東西,S3等)在serverless.yml文件的resources:部分,使用regular old CloudFormation syntax

例如,該文件將創建一個DynamoDB表和S3鬥,除了無服務器功能:

service: aws-nodejs # NOTE: update this with your service name 
provider: 
    name: aws 
    runtime: nodejs6.10 
functions: 
    hello: 
    handler: handler.deletecustomer 
    events: 
     - http: 
      path: /deletecustomer 
      method: post 
      cors: true 
resources: 
    Resources: 
    tablenotes: 
     Type: AWS::DynamoDB::Table 
     Properties: 
     AttributeDefinitions: 
      - AttributeName: noteId 
      AttributeType: S 
      - AttributeName: userId 
      AttributeType: S 
     KeySchema: 
      - AttributeName: userId 
      KeyType: HASH 
      - AttributeName: noteId 
      KeyType: RANGE 
     ProvisionedThroughput: 
      ReadCapacityUnits: '5' 
      WriteCapacityUnits: '5' 
    mysamplebucket: 
     Type: AWS::S3::Bucket 
     Properties: 
     WebsiteConfiguration: 
      IndexDocument: index.html 
      ErrorDocument: error.html 
     AccessControl: Private 
     VersioningConfiguration: 
      Status: Suspended 

如果你是新來CloudFormation,我也建議採取偷看CloudFormer

0

基於@Mike Patrick的選項,增加了我對無服務器框架和其他類似無服務器重點工具的理解。

正如您所提到的,對於無服務器項目,涉及到大量資源。將它們結合在一起不是簡單的工作。所以選擇一個合適的工具很難。

比較Serverless frameworkCloudformationTerraform,無服務器架構是無服務器專家,Cloudformation發展和terraform是GP

Cloudformation發展和terraform完全Infrastructure as Code涵蓋大部分資源。

無服務器框架是一箇中間層,僅用於生成大部分僅用於無服務器相關資源的Cloudformation模板。

您可以直接在Cloudformation模板中編寫所有內容,但模板文件會很大,很難通過其JSON/Yaml模板進行維護。通過serverless.yml中的幾十行,無服務器框架可以生成一千或幾千行雲信息模板。它可以節省大量的時間來處理雲信息代碼。

讓無服務器框架處理所有AWS資源沒有意義,其他工具已經做得最好。

無服務器框架仍在開發中,因爲它的普及,許多開發人員都參與到日常添加功能中。也許有一天你可以得到你所需要的,但現在你必須在一些情況下將無服務器框架與Cloudformation或Terraform或其他工具混合在一起。