Giới thiệu về AWS CloudFormation

aws_cloudformation_0

Nếu đã từng làm việc trên AWS (Amazon Web Service) – môi trường cloud computing của Amazon – có thể bạn sẽ cần nhiều tới sự trợ giúp của CloudFormation – một công cụ để “tài liệu hóa” nguồn tài nguyên ( EC2 instances, RDS database , VPC …) trên AWS.

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ữ mới trong nghành phát triển các sản phẩm phần mềm hiện đại.

Mục tiêu của bài viết này chia sẻ kiến thức cơ bản về CloudFormation, cách sử dụng nó qua một số ví dụ.

I. Một số khái niệm

1. Templates

Thành phần cốt lõi để CloudFormation làm việc là các templates. Nếu bạn là người thích liên tưởng, thì các templates giống như các bản thiết kế, phác thảo trong ngành xây dựng vậy. Nếu không thì đây là các tài liệu ở định dạng JSON, định nghĩa danh sách các tài nguyên, cấu hình của chúng mà bạn muốn sử dụng để xây dựng môi trường cho sản phẩm của mình trên AWS. Bạn sẽ định nghĩa trước các thành phần, bộ phận mà bạn muốn có ở đây. Sau đó Cloudformation sẽ đọc và thực thi theo yêu cầu của nội dung chứa trong các templates này.

Một template có cấu trúc như ở bên dưới :

{
"AWSTemplateFormatVersion" : "version date",

“Description” : “JSON string”,

“Metadata” : {
template metadata
},

“Parameters” : {
set of parameters
},

“Mappings” : {
set of mappings
},

“Conditions” : {
set of conditions
},

“Resources” : {
set of resources
},

“Outputs” : {
set of outputs
}
}

2. Stack
Stack là một thực thể của template, nó là một ngăn xếp giúp quản lý tập hợp các tài nguyên AWS đang được sử dụng trong cùng một nhóm. Bạn có thể hình dung như stack là một ngôi nhà cụ thể được xây dựng từ bản thiết kế ( các templates ). Nó là các tài nguyên đang được sử dụng thực, không còn là khái niệm trên các templates nữa.

II. Một số ví dụ

 

Công ty vừa phát triển một sản phẩm mới trên LAMP, bạn được yêu cầu chuẩn bị cơ sở hạ tầng và môi trường để sản phẩm chạy được trên AWS.

Đầu tiên phân tích các thành phần, stacks trên AWS sẽ gồm có :

– VPC : một data center ảo bao gồm subnets, routing tables, internetgateway

– EC2 : server ảo chạy Amazon linux, Public IP address

– RDS : database ảo chạy Mysql

Bây giờ bạn sẽ cần phải chuẩn bị các templates cho mỗi stack ở trên. Trong các templates này, bạn sẽ định nghĩa những thành phần cần thiết ở đây theo định dạng JSON. Ví dụ một đoạn JSON như dưới :

"Resources" : {
"EC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : { "Ref" : "InstanceType" },
"SecurityGroupIds" : [ { "Ref" : "DevBaseWebVPCSecurityGroupID" }, { "Ref" :       "DevProductVPCSecurityGroupID" } ],
"KeyName" : { "Ref" : "KeyName" },
"SubnetId": { "Ref" : "DevPublicSubnet1AID" },
"PrivateIpAddress" : { "Ref": "PrivateIPAddress" },
"BlockDeviceMappings" : [ {"DeviceName" : "/dev/xvda", "Ebs" : { "VolumeSize" : "30" }} ],
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] },
"Tags": [
{
"Key": "Name",
"Value": { "Ref" : "InstanceName" }
}
]
} } }

Trong ví dụ trên bạn sẽ tạo một EC2 instance với các đặc điểm được định nghĩa trước, bạn có thể điền giá trị trực tiếp trong template hoặc truyền vào giống tham số sau như ở phía dưới:

  • InstanceType
  • SecurityGroupIds
  • KeyName
  • SubnetId
  • PrivateIpAddress
  • BlockDeviceMappings
  • ImageId
  • Tags

Chuẩn bị Cloudformation template cho stack VPC, một ví dụ mẫu của VPC template bạn có thể xem ở đây.

Sau khi chuẩn bị xong vpc template, giả sử bạn lưu ở thư mục cloudformation/vpc_template.json. Có nhiều cách sử dụng template này, qua web console, aws command line, api. Ở đây bạn sẽ dùng aws command line, chạy lệnh dưới để tạo stack sử dụng vpc template bạn vừa tạo ở trên :

aws cloudformation create-stack --stack-name vpc-base-network --template-body file:///cloudformation/vpc_template.json

Tương tự cho các stacks EC2, RDS còn lại.

Chuẩn bị Cloudformation template cho stack EC2, một ví dụ mẫu của EC2 template bạn có thể xem ở đây.

Sau khi chuẩn bị xong ec2 template, giả sử bạn lưu ở thư mục cloudformation/ec2_template.json. Chạy lệnh dưới để tạo stack sử dụng ec2 template bạn vừa tạo ở trên, bạn có thể truyền tham số vào template :

aws cloudformation create-stack --stack-name dev-ec2-web --template-body file:///cloudformation/ec2_template.json --parameters ParameterKey=KeyName,ParameterValue=keys.dev ParameterKey=SubnetID,ParameterValue=subnet-a1b2c3d4

Chuẩn bị Cloudformation template cho stack RDS, một ví dụ mẫu của RDS template bạn có thể xem ở đây.

Sau khi chuẩn bị xong rds template, giả sử bạn lưu ở thư mục cloudformation/rds_template.json. Chạy lệnh dưới để tạo stack sử dụng rds template bạn vừa tạo ở trên, bạn có thể truyền tham số vào template :

aws cloudformation create-stack --stack-name dev-rds --template-body file:///cloudformation/dev/rds.json --parameters ParameterKey=DBSecurityGroup,ParameterValue=sg-f677e293 ParameterKey=DBSubnetGroup,ParameterValue=vpc-network-devdbsubnetgroup-19mk1hlxxx

 

Như vậy là bạn đã xây dựng xong cho mình một môi trường hoàn chỉnh trên AWS bao gồm ba stacks chính là VPC, EC2, RDS sẵn sàng cho việc deploy các sản phẩm tuyệt vời lên đó rồi. Các developers khó tính chắc chắn cũng khó để không hài lòng.

Tham khảo: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/

Add a Comment

Scroll Up