12/08/2018, 17:44

Giới thiệu về cloud formation và cách sử dụng cơ bản

Cloud formation là gì? Cách dễ nhất để mô tả CloudFormation là nó là một công cụ từ AWS cho phép bạn khởi tạo tài nguyên một cách dễ dàng. Bạn xác định tất cả các tài nguyên mà bạn muốn AWS bật lên trong một bản thiết kế chi tiết, bấm vào một nút, và sau đó AWS sẽ thực hiện giúp bạn phần việc còn ...

Cloud formation là gì?

Cách dễ nhất để mô tả CloudFormation là nó là một công cụ từ AWS cho phép bạn khởi tạo tài nguyên một cách dễ dàng. Bạn xác định tất cả các tài nguyên mà bạn muốn AWS bật lên trong một bản thiết kế chi tiết, bấm vào một nút, và sau đó AWS sẽ thực hiện giúp bạn phần việc còn lại. Bản thiết kế này được gọi là một template trong CloudFormation. CloudFormation đảm bảo rằng các tài nguyên phụ thuộc trong template của bạn đều được tạo theo đúng thứ tự. Ví dụ, giả sử chúng ta muốn tạo record DNS Route53 và một instance EC2 có record DNS trỏ tới instance EC2. CloudFormation sẽ để cung cấp instance EC2 trước, chờ cho nó sẵn sàng được sử dụng, và sau đó tạo bản ghi DNS. AWS CloudFormation điều phối việc cung cấp các tài nguyên mong muốn. Vì vậy, thay vì phải viết script với một loạt các lời gọi API AWS, chờ vòng lặp và thử lại logic, bạn chỉ cần mô tả những gì bạn muốn và yêu cầu CloudFormation thực hiện điều đó cho bạn. Thật tuyệt phải không?

Ví dụ cơ bản về Cloud formation

Chúng ta hãy xem qua một ví dụ đơn giản về việc bật một stack CloudFormation lên. Chúng ta sẽ khởi tạo một instance EC2 và một security group. Sau đó, ta sẽ ssh vào server để xác nhận. Để thực hiện tutorial này bạn sẽ cần một tài khoản AWS của riêng bạn và tốn một số tiền nhỏ. Thay vì bắt đầu với một template CloudFormation trống, hãy lấy một template mẫu từ document của AWS. Điều đơn giản mà chúng ta muốn là instance Amazon EC2 trong một security group. Theo văn bản này, template ví dụ được cung cấp ở dạng json nhưng tôi thích sử dụng yaml. Vì vậy, tôi đã lấy template mẫu và đã chuyển đổi nó thành định dạng yaml. Nó có sẵn trên GitHub: tongueroo/cloudformation-examples/ templates single_instance.yml. Hãy dùng các lệnh sau để tải xuống và chuyển đổi mẫu json thành yaml:

$ mkdir templates
$ cd templates
$ curl -o single_instance.json "https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/EC2InstanceWithSecurityGroupSample.template"
$ ruby -ryaml -rjson -e 'puts YAML.dump(JSON.load(ARGF))' < single_instance.json > single_instance.yml

Chúng ta hãy cùng tìm hiểu về template. Ở top level của template, có 6 properties. Để điều tra về template, tôi sẽ dùng version json của file này vì jq tool giúp cho việc tìm hiểu các top level keys dễ dàng hơn:

$ cat single_instance.json | jq -r 'keys[]'

Đây là một giải thích ngắn gọn về ý nghĩa của những mục trên:

  • AWSTemplateFormatVersion: Cho biết version của file template AWS CloudFormation
  • Description: Đoạn văn bản giải thích về template
  • Mappings: Ánh xạ các key và các giá trị liên quan mà bạn có thể sử dụng để chỉ định các giá trị tham số có điều kiện. Đây là version CloudFormation của cú pháp "case".
  • Outputs:Mô tả các giá trị được trả về bất cứ khi nào bạn xem các properties của stack của mình. Phần này được hiển thị trong Console của CloudFormation AWS.
  • Parameters: Chỉ định các giá trị mà bạn có thể thiết lập cho các mục trong template của mình khi khởi tạo stack
  • Resources: Chỉ định các resource và properties của stack, ví dụ như chỉ định instance EC2. Đây là property duy nhất bắt buộc phải có.

Các thuộc tính level cao nhất quan trọng nhất của một template CloudFormation là các Parameter và Resources. Resources là nơi mà instance EC2 của chúng ta được định nghĩa. Hãy xem xét tài nguyên EC2 Instance một cách cụ thể hơn: templates/single_instance.yml#L361-L378 Nó được viết lại ở đây để thuận tiện cho việc theo dõi:

EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType:
        Ref: InstanceType
      SecurityGroups:
      - Ref: InstanceSecurityGroup
      KeyName:
        Ref: KeyName
      ImageId:
        Fn::FindInMap:
        - AWSRegionArch2AMI
        - Ref: AWS::Region
        - Fn::FindInMap:
          - AWSInstanceType2Arch
          - Ref: InstanceType
          - Arch

Ví dụ này rất phù hợp với tài liệu tham khảo template AWS CloudFormation và AWS Resource Types documentation về AWS :: EC2 :: Instance.

0