5

Tôi đã làm theo một hướng dẫn tuyệt vời (Serverless Stack) tạo ra một cơ sở hạ tầng không có máy chủ CRUD điển hình với giao diện người dùng phản ứng. Nó đang sử dụng Serverless Framework cho AWS.Frameworkless Server: cách để đạt được đầy đủ "cơ sở hạ tầng như mã"?

Điều tôi không thích là để khởi động thiết lập, có rất nhiều thao tác nhấp bằng tay trong GUI (chủ yếu là giao diện điều khiển của Amazon) có liên quan. I E. thiết lập không phải là phiên bản được kiểm soát và không dễ tái sản xuất. Nó sẽ không dễ dàng để mở rộng nó với một quá trình CI/CD, vv Trong ví dụ này các nguồn lực sau đây cần phải được thiết lập bằng tay:

  • AWS Cognito tài Pool
  • AWS Cognite tài Pool Application
  • AWS Cognito định liên đoàn Pool
  • AWS DynamoDB dụ
  • xô AWS S3 (x3) (điều này cũng tổ chức các frontend) phân phối
  • AWS CloudFront
  • Tệp vùng AWS Route53

Tài nguyên duy nhất được xây dựng từ mã là các chức năng không có máy chủ (lambdas), cũng như các trường hợp cổng API. Đây là những gì mà khung máy chủ không sử dụng tệp serverless.yml của nó. Nhưng tất cả các tài nguyên trên là không phải được tạo tự động. Đôi khi chúng cần phải là referenced to sử dụng ARN của chúng, nhưng chúng không được tạo bởi cấu hình serverless.yml. Việc chạy một hệ thống như vậy trong sản xuất (phụ thuộc rất nhiều vào việc tạo ra các dịch vụ thủ công thông qua GUI) sẽ có vẻ nguy hiểm.

Tôi đã nghĩ rằng một giải pháp cho điều này sẽ là sử dụng Terraform hoặc Cloudformation. Nhưng bản thân Serverless Framework đang sử dụng Cloudformation để thiết lập Lambdas, mặc dù không phải cho các tài nguyên khác. Vậy làm thế nào để loại bỏ khoảng cách này? Nói cách khác, làm cách nào để xây dựng lại toàn bộ thiết lập được mô tả tại Serverless Stack trong mã?

Có vẻ lạ, và có lẽ không thể, để thiết lập CloudFormation Serverless, sau đó có các mẫu Cloudformation của riêng nó để thiết lập lambdas. Nó có thể có ý nghĩa hơn để mở rộng Serverless Framework để không chỉ xác định các chức năng và API Gateways cần được tạo trên serverless deploy, mà còn các tài nguyên khác như DynamoDB hoặc Cognito User Pool. Có bất kỳ ví dụ hoặc nỗ lực nào của những người làm việc này không?

Trả lời

3

Tôi đồng ý rằng tài liệu về điều này sẽ tạo ra một số xuất sắc pull request here.

Bạn đang chính xác rằng serverless đang sử dụng CloudFormation trong mui xe. Khung làm hiển thị máy móc CloudFormation cơ bản cho bạn, bằng cách bấm phím resources của serverless.yml.

Tôi nghĩ the intent of the framework là bạn sẽ đặt phần còn lại của các tài nguyên này (công cụ Cognito, S3, v.v.) trong phần resources: trong tệp serverless.yml của bạn, sử dụng regular old CloudFormation syntax.

Ví dụ, tập tin này sẽ tạo ra một bảng DynamoDB và S3 xô, ngoài các chức năng serverless:

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 

Nếu bạn là người mới đến CloudFormation, tôi cũng khuyên bạn nên tham gia một peek tại CloudFormer .

0

Dựa trên các tùy chọn của @Mike Patrick, bổ sung thêm sự hiểu biết của tôi cho khung công cụ không có máy chủ và các công cụ tập trung vào máy chủ không tương tự khác.

Như bạn đã đề cập, đối với các dự án không có máy chủ, có rất nhiều tài nguyên liên quan. Kết hợp chúng với nhau không phải là công việc đơn giản. Vì vậy, lựa chọn một công cụ thích hợp là khó khăn.

Hãy so sánh Serverless framework-CloudformationTerraform, khung serverless là serverless chuyên, Cloudformation và Terraform là GP

Cloudformation và terraform hoàn toàn Infrastructure as Code trong đó bao gồm hầu hết các nguồn tài nguyên.

Khuôn khổ máy chủ là lớp ở giữa chỉ để tạo mẫu Cloudformation, chủ yếu chỉ dành cho tài nguyên liên quan đến không có máy chủ.

Bạn có thể viết tất cả trong mẫu Cloudformation trực tiếp, nhưng tệp mẫu sẽ lớn, rất khó để duy trì bởi mẫu JSON/Yaml của nó. Với một vài chục dòng trong serverless.yml, khung không máy chủ có thể tạo ra hàng nghìn hoặc hàng nghìn dòng mẫu đám mây. Nó tiết kiệm rất nhiều thời gian để đối phó với các mã đám mây.

Không có nghĩa lý gì khi cho phép khung công tác không cần xử lý với tất cả các tài nguyên AWS, mà các công cụ khác đã làm tốt nhất.

Khuôn khổ máy chủ vẫn đang được phát triển, vì tính phổ biến của nó, nhiều nhà phát triển có liên quan để thêm các tính năng vào nó hàng ngày. Có thể một ngày nào đó bạn có thể có được những gì bạn cần, nhưng bây giờ bạn phải kết hợp khung không máy chủ với Cloudformation hoặc Terraform hoặc các công cụ khác lại với nhau trong một số trường hợp.

Các vấn đề liên quan