12/08/2018, 16:45

Chuyên mục Cloud - CloudFormation AWS (P1)

1. Giới thiệu về CloudFormation AWS CloudFormation cung cấp một ngôn ngữ chung để bạn mô tả và cung cấp tất cả các tài nguyên về cơ sở hạ tầng trong môi trường đám mây của bạn. CloudFormation cho phép bạn sử dụng một tệp văn bản đơn giản để mô hình hoá và cung cấp tất cả các tài nguyên cần thiết ...

1. Giới thiệu về CloudFormation

AWS CloudFormation cung cấp một ngôn ngữ chung để bạn mô tả và cung cấp tất cả các tài nguyên về cơ sở hạ tầng trong môi trường đám mây của bạn. CloudFormation cho phép bạn sử dụng một tệp văn bản đơn giản để mô hình hoá và cung cấp tất cả các tài nguyên cần thiết cho các ứng dụng của bạn trên tất cả các vùng và tài khoản một cách tự động và an toàn. Tệp này đóng vai trò là nguồn chân lý duy nhất cho môi trường đám mây của bạn. AWS CloudFormation cung cấp cho các nhà phát triển và quản trị hệ thống một cách dễ dàng để tạo và quản lý một tập hợp các nguồn lực AWS có liên quan, cung cấp và cập nhật chúng theo cách có trật tự và có thể dự đoán được. Bạn có thể sử dụng các template có sẵn của AWS CloudFormation hoặc tạo các template của riêng mình để mô tả các tài nguyên AWS và bất kỳ phụ thuộc hoặc các thông số thời gian chạy nào được yêu cầu để chạy ứng dụng của bạn. Sau khi các tài nguyên AWS được triển khai, bạn có thể sửa đổi và cập nhật chúng một cách có kiểm soát và có thể dự đoán, có hiệu lực áp dụng kiểm soát phiên bản vào cơ sở hạ tầng AWS theo cách tương tự với phần mềm của bạn. Việc sử dụng CloudFormation giúp tái sử dụng các tài nguyên trên AWS dễ dàng và tự động. Giúp tiến gần tới khái niệm “Infrastructure as Code”, một thuật ngữ trong nghành phát triển các sản phẩm phần mềm hiện đại.

2. Các tính năng của CloudFormation

2.1 Biên soạn với JSON / YAML

AWS CloudFormation cho phép bạn mô hình toàn bộ cơ sở hạ tầng của mình trong một tệp văn bản. Bạn có thể sử dụng JSON hoặc YAML để mô tả tài nguyên AWS bạn muốn tạo và định cấu hình. Nếu bạn muốn thiết kế trực quan, bạn có thể sử dụng AWS CloudFormation Designer để giúp bạn bắt đầu với mẫu AWS CloudFormation.

2.2 Kiểm soát an toàn

AWS CloudFormation tự động cung cấp và cập nhật cơ sở hạ tầng của bạn một cách an toàn và kiểm soát. Không có các bước thủ công hoặc điều khiển có thể dẫn đến lỗi. Bạn có thể sử dụng Rollback Triggers để chỉ định CloudWatch cảnh báo các thành phần mà CloudFormation phải giám sát trong quá trình tạo và cập nhật stack. Nếu có bất kỳ cảnh báo nào, CloudFormation sẽ roll back toàn bộ về trạng thái đã triển khai trước đó.

2.3 Xem trước những thay đổi trong hạ tầng

AWS CloudFormation Change Sets cho phép bạn xem trước các thay đổi được đề xuất đối với stack có thể ảnh hưởng đến tài nguyên đang chạy của bạn như thế nào. Ví dụ: liệu các thay đổi của bạn sẽ xóa hoặc thay thế bất kỳ tài nguyên quan trọng nào. AWS CloudFormation thực hiện các thay đổi cho stack của bạn chỉ sau khi bạn quyết định thực hiện Change Set.

2.4 Quản lý phụ thuộc

AWS CloudFormation tự động quản lý các mối quan hệ phụ thuộc giữa các tài nguyên của bạn trong quá trình quản lý stack. Bạn không cần phải lo lắng về việc xác định thứ tự tài nguyên được tạo, cập nhật hoặc xóa. CloudFormation xác định trình tự chính xác của các hành động để sử dụng cho mỗi tài nguyên trong stack.

2.5 Quản lý account chéo và region chéo

AWS StackSets cho phép bạn cung cấp một tập hợp chung các tài nguyên AWS trên nhiều tài khoản và region với template CloudFormation. StackSets tự động cung cấp, cập nhật hoặc xóa stack trên nhiều tài khoản và nhiều khu vực. Điều này cung cấp cùng mức độ tự động, khả năng lặp lại và độ tin cậy để quản lý stack trên khắp các vùng và tài khoản.

2.6 Khả năng mở rộng

AWS CloudFormation cho phép bạn tạo các tiện ích tùy chỉnh cho template stack của mình bằng AWS Lambda. Bạn có thể sử dụng Custom Resources, là một cơ chế mở rộng cho phép bạn viết các yêu cầu cung cấp tuỳ chỉnh trong một hàm Lambda và kích hoạt nó trong một ngăn xếp CloudFormation. Bạn có thể viết logic cung cấp tùy chỉnh cho các tác vụ như cung cấp tài nguyên bên thứ ba hoặc tìm kiếm các ID AMI mới nhất để sử dụng trong stack.

3. Các thành phần của CloudFormation

Như chúng ta đã đề cập nhiều lần ở trên, thành phần chính của CloudFormation bao gồm: Template, Stack và Change Sets

3.1 Template

Template AWS CloudFormation là tệp văn bản được định dạng JSON hoặc YAML. Bạn có thể lưu các tệp này bằng bất kỳ phần mở rộng nào, chẳng hạn như .json, .yaml, .template, hoặc .txt. AWS CloudFormation sử dụng các template này làm bản thiết kế để xây dựng tài nguyên AWS của bạn. Ví dụ: trong mẫu, bạn có thể mô tả một thể hiện của Amazon EC2, chẳng hạn như instance type, loại EBS, AMI mẫu, size, security group... Bất cứ khi nào bạn tạo một stack, bạn cũng phải chỉ định một template mà AWS CloudFormation sử dụng để tạo ra. VD 1 template mẫu:

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "A sample template",
  "Resources" : {
    "MyEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : "ami-2f726546",
        "InstanceType" : "t1.micro",
        "KeyName" : "cuongtv",
        "BlockDeviceMappings" : [
          {
            "DeviceName" : "/dev/sda",
            "Ebs" : {
              "VolumeType" : "io1",
              "Iops" : "200",
              "DeleteOnTermination" : "yes",
              "VolumeSize" : "20"
            }
          }
        ]
      }
    },
    "MyEIP" : {
      "Type" : "AWS::EC2::EIP",
      "Properties" : {
        "InstanceId" : {"Ref": "MyEC2Instance"}
      }
    }
  }
}

3.2 Stack

Khi sử dụng CloudFormation, bạn quản lý tài nguyên liên quan như một đơn vị được gọi là stack. Bạn tạo, cập nhật và xóa một bộ sưu tập tài nguyên bằng cách tạo, cập nhật và xóa các stack. Tất cả các tài nguyên trong stack được xác định bởi template AWS CloudFormation.

3.3 Change Sets

Nếu bạn cần thay đổi các tài nguyên đang chạy trong stack, bạn cập nhật stack. Trước khi thực hiện thay đổi đối với tài nguyên của bạn, bạn có thể tạo một change sets, nó sẽ cho phép bạn xem các thay đổi trực tiếp tác động như thế nào đến tài nguyên đang chạy của bạn, đặc biệt đối với các tài nguyên quan trọng, trước khi triển khai chúng.

Ví dụ: nếu bạn thay đổi tên của một ví dụ cơ sở dữ liệu Amazon RDS, AWS CloudFormation sẽ tạo một cơ sở dữ liệu mới và xóa một cơ sở dữ liệu cũ. Bạn sẽ mất dữ liệu trong cơ sở dữ liệu cũ trừ khi bạn đã sao lưu nó. Nếu bạn tạo change sets, bạn sẽ thấy rằng thay đổi của bạn sẽ làm thay đổi cơ sở dữ liệu, và bạn sẽ có thể lập kế hoạch cho phù hợp trước khi cập nhật stack.

4 Hoạt động

4.1 Khởi tạo CloudFormation

Khi tạo stack, AWS CloudFormation tạo các cuộc gọi dịch vụ cơ bản đến AWS để cung cấp và định cấu hình các tài nguyên của bạn. Vì vậy hãy chắc chắn tài khoản của bạn có quyền trên IAM thực hiện các tác vụ cần thiết.

4.2 Cập nhật một Stack với Change Sets

Khi bạn cập nhật một stack, bạn chỉnh sửa lại file template gốc của stack. AWS Formation so sánh template đã được chỉnh sửa với template gốc và cập nhật chỉ những tài nguyên đã thay đổi. Sơ đồ sau tóm tắt lại quá trình cập nhật một stack.

4.3 Xóa Stack

Khi bạn xóa một stack, bạn chỉ ra stack cần xóa, và AWS CloudFormation xóa stack cùng tất cả các tài nguyên bên trong nó. Nếu bạn muốn xóa một stack nhưng muốn giữ lại một vài resource bên trong nó, bạn có thể sử dụng deletion policy để giữ lại các tài nguyên đó. Sau khi tất cả các resource bị xóa, AWS CloudFormation gửi tín hiệu thông báo stack của bạn đã được xóa thành công. Nếu AWS CloudFormation không thể xóa một tài nguyên nào đó, stack sẽ không bị xóa. Những tài nguyên chưa bị xóa sẽ tồn tại cho tới khi bạn có thể xóa thành công stack.

5 Làm việc với Stack

Như ta đã biết, muốn tạo 1 stack thì phải có template. Có thể sử dụng template sẵn có của AWS (wordpress, ruby on rails stack, LAMP stack ...) nhưng tất cả đều không bao giờ là đủ và phù hợp với nhu cầu của chính người dùng. Do đó AWS hỗ trợ người dùng tự viết template của mình, hỗ trợ kéo thả trong quá trình design nhưng tất nhiên điều đó vẫn chưa thể đầy đủ và hoàn thiện được. Ngoài ra, AWS còn hỗ trợ dựng template dựa trên resource đang chạy sử dụng CloudFormer. Trong quá trình dùng CloudFormer, AWS sẽ tự bật 1 instance t2.medium ec2 để sử dụng. Đây là cách tốt nhất để bạn design 1 cách hoàn hảo mô hình mà bạn cần dưới dạng template. Từ đó sẽ dễ dàng setup các môi trường như vậy trong tương lai.

Ở bài viết sau, mình sẽ gửi tới các bạn 1 template sẵn cho 1 mô hình web cơ bản. Mô hình thế nào thì mời các bạn đón xem phần tiếp nhé.

0