+1

[SAP C02] Deployments

AWS CodePipeline

Aws CodePipeline là một dịch vụ phân phối liên tục (Continous Delivery Service) cho phép người dùng model hoá, trực quan hoá và tự động hoá các bước cần thiết để release sản phẩm phần mềm. CodePipeline kiểm soát flow từ bước build đến deployment. Nói về Pipeline, Pipeline được tạo nên từ các stages, stage chứa các action nối tiếp nhau hoặc song song. Sự chuyển dịch giữa các stage có thể được tự động hoá hoặc yêu cầu sự chấp thuận từ quản trị viên. Các Action trong stage có thể sử dụng các artifacts cũng có thể tạo ra các artifacts. Artifacts thì đơn giản chỉ là các files. Những sự thay đổi của Pipeline hay Stage hay Action có thể tạo ra các event được publish đến EventBridge. Ta cũng có thể sử dụng CloudTrail để quản lý các API calls và console UI để để theo dõi và tương tác với CodePipeline.

Aws CodeCommit

CodeCommit là một managed git service. Nó hoạt động tương tự như Gitlab, Github, BitBucket nhưng được lưu trữ trên aws. Xác thực có thể được thực hiện thông qua IAM.

  • Notifications rules: Có thể gửi thông báo của các sự kiện như code changes, commits, pull request, .... Các sự kiện này có thể được gửi đến SNS hay Aws ChatBot
  • Triggers:  Cho phép tạo các quá trình hướng sự kiện dựa trên những thay đổi xảy ra trong repo. Sự kiện có thể được gửi đến SNS hoặc Lambda.

Git Commit lưu trữ repo tại Aws S3 hoặc DynamoDB.

image.png

Aws CodeBuild

Aws CodeBuild là một sản phẩm Build as a Service. Nó là một managed service và người dùng trả tiền cho lượng tài nguyên được sử dụng trong quá trình build. CodeBuild là một giải pháp thay thế cho các công cụ như Jenkins. CodeBuild sử dụng docker cho môi trường build nên ta có thể customize một cách dễ dàng. Đồng thời CodeBuild cũng có thể tích hợp với nhiều dịch vụ khác của Aws như KMS, IAM, VPC, CloudTrail, S3,... Ta có thể build từ các nguồn như Github, CodeCommit, CodePipeline hay thậm chí là S3. CodeBuild đẩy log ra CloudWatch logs, và metrics ra CloudWatch Metrics đồng thời đẩy các event ra EventBridge.

buildspec.yml Được dùng để tuỳ chỉnh quá trình build, phải được đặt ở thư mục root của repository,

image.png

Aws CodeDeploy

Aws CodeDeploy là một sản phẩm Code Deployment as a Service. Có thể coi CodeDeploy là một giải pháp thay thế cho các dịch vụ bên thứ 3 như Jenkins, Ansible, hay thậm chí là CloudFormation. Tuy nhiên CodeDeploy được sử dụng để deploy code chứ không phải deploy resource (CloudFormation). Tương tự như CodeBuild, CodeDeploy cũng sử dụng docker cho build environment và có thể dễ dàng tuỳ chỉnh. Nó có thể deploy lên EC2, on-premise, Lambda hay ECS. Nhưng để deploy lên EC2 hay On-premise thì cần phải sử dụng Agent. CodeDeploy cũng có thể tích hợp với các dịch vụ khác của Aws như KMS, IAM, CloudTrail, S3, VPC.

appspec.[yaml|json] Nó quản lý quá trình deploy: configurations và các lifecycle event hooks.

image.png

Sử dụng CodeDeploy để deploy lên Lambda:

image.png

Aws Elastic BeanStalk

Là một sản phẩm Paas (Product as a Service) trên Aws. Có thể coi nó là một centric view dành cho người phát triển để deploy sản phẩm phần mềm lên Aws. Nó sử dụng rất nhiều các dịch vụ của Aws như EC2, ELB, ASG, RDS,... Beanstalk miễn phí nhưng ta cần phải trả phí cho những instance được sử dụng bên trong nó. Beanstalk thường được sử dụng cho Replatform. BeanStalk sẽ quản lý instances configurations và OS, deploy strategy có thể được configure nhưng được thực hiện bởi Beanstalk.

Có 3 mô hình kiến trúc:

  • Single Instance Deployment: Phù hợp với quá trình phát triển. Lưu ý rằng ở mô hình này thì EC2 instance sẽ được gắn với 1 Elastic IP để phù hợp cho quá trình chuyển đổi nếu Instance xảy ra vấn đề.
  • Load Balancing và Auto Scaling Group: Phù hợp mới môi trường production và pre-production web applications
  • Only ASG: Phù hợp cho non web app ở môi trường production như workers, etc . Có thể kết hợp với SQS.

Elastic BeanStalk Deployment Blue/Green: Đây không phải là một chức năng thực sự của Beanstalk, zero downtime và release facility. Ta sẽ tạo môi trường stage và deploy phiên bản v2 lên đây. Phiên bản mới có thể được thử nghiệm độc lập và rollback nếu gặp vấn đề. Có thể dùng route53 weighted route policies để chuyển dịch dần traffic từ bản v1 (blue) sang bản v2(green) theo thời gian。

Aws CloudFormation

Là một dịch vụ IaC (Infrastructure as code) của Aws. Ta có thể sử dụng stack của nó cross-region và cross-account. Backbone của Elastic BeanStalk, Service Catalog Service. DeletePolicy: Ta có thể set DeletePolicy trên một số tài nguyên để điều khiển những gì xảy ra khi CloudFormation Template bị xoá:

  • DeletePolicy=Retain: Đặt trên các tài nguyên cần được giữ lại, backup trong trường hợp CloudFormation bị xoá.
  • DeletePolicy=SnapShot: Có thể áp dụng trên tất cả các tài nguyên có thể snapshot,
  • DeletePolicy=Delete: Đây là hành vi mặc định, tuy nhiên với RDS:DBCluster hành vi mặc định là snapshot. Một lưu ý nữa là trước khi xoá S3 bucket thì cần phải xoá hết nội dung bên trong bucket đó.

Custom Resources(Lambda): Sử dụng Custom Resources trong một trong những trường hợp sau:

  • Dịch vụ chưa được hỗ trợ trên CloudFormation.
  • Một dịch vụ on-premise
  • Xoá nội dung của một S3 Bucket trước khi xoá bỏ nó

StackSets: Được dùng để create, update, delete stack across-region, across-account chỉ với một thao tác. Chỉ Admintrator account mới có thể tạo StackSets. Trusted Account có thể create, update, delete stack instances từ StackSets. Cần lưu ý rằng khi update StackSets tất cả các stack có liên quan đêù sẽ bị thay đổi ở mọi region và account.

CloudFormation Drift: Dịch vụ này bảo vệ resources được tạo bởi CloudFormation, nó sẽ thông báo cho admin nếu có sự thay đổi trong configuration của stack và các dịch vụ bên trong nó.

Resource Import: Import dịch vụ có sẵn vào một stack mới hoặc có sẵn. Tuy nhiên ta không cần xoá hay tạo lại các resource trong stack. Ta chỉ cần chuẩn bị Template với đầy đủ tất cả các dịch vụ, cần đảm bảo sự thống nhất, không mâu thuẫn giữa các dịch vụ. Với mỗi dịch vụ được import cần phải có một DeletePolicies và khong thể import 1 dịch vụ giống nhau vào nhiều stack cùng 1 lúc.

Aws Service Catalog

Tạo và quản lý IT services catalogs được đồng ý bởi Aws. Sản phẩm là CloudFormation Templates. Đơn giản nó không cho người dùng sử dụng CloudFormation một cách trực tiếp. Người dùng được phân vào các Portfolio (Teams). Giúp ích cho việc Compliance, Governance, Consistency.

Aws Sam (Serverless Application Model)

Đây là framework để phát triển và deploy ứng dụng serverless. Nó còn có thể giúp người dùng sử dụng các dịch vụ như lambda, API Gateway hay DynamoDB locally. Sam sử dụng CodeDeploy để deploy lambda function và sử dụng CloudFormation ở backend.

image.png

Aws CDK (Cloud Development KIT)

Cho phép định nghĩa Cloud Infrastructure mà không sử dụng yaml mà sử dụng các ngôn ngữ quen lập trình quen thuộc. Sau đó code sẽ được compile thành dạng CloudFormation Template ở dạng JSON hay Yaml

Aws System Manager:


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.