Giới thiệu
Chào mọi người, ở bài viết hôm trước, mình đã chia sẻ về những thế mạnh của Infrastructure as Code(IaC). Hôm nay, để đi sâu hơn vào IaC, bài viết này mình sẽ chia sẻ về CloudFormation(CFN).
Chắc hẳn mọi người cũng đã biết: AWS CloudFormation là một công cụ mạnh mẽ để tự động hóa việc triển khai và quản lý các tài nguyên AWS.
Trong khi nhiều người đã quen thuộc với các tính năng cơ bản của nó(Template, Stack, ChangeSet…). Thì các tính năng nâng cao và ứng dụng thực tế trong các hệ thống lớn có thể cải thiện đáng kể hiệu quả hoạt động và khả năng mở rộng. Bài viết này khám phá các ứng dụng nâng cao này và cung cấp cái nhìn sâu sắc về cách các tổ chức lớn sử dụng CloudFormation để tối ưu hóa quản lý hạ tầng của họ.
Nội Dung
Nested Stacks cho Quản Lý Theo Mô-đun
Một trong những tính năng nâng cao của AWS CloudFormation là sử dụng nested stacks. Nested stacks cho phép bạn chia nhỏ các mẫu CloudFormation thành các thành phần nhỏ hơn, có thể tái sử dụng. Cách tiếp cận theo mô-đun này đặc biệt hữu ích trong các hệ thống lớn, nơi việc quản lý một mẫu đơn lẻ, nguyên khối có thể trở nên phức tạp.
Ở hầu hết những ứng dụng lớn, người ta thường sử dụng nested stacks để quản lý các thành phần khác nhau của hạ tầng, chẳng hạn như tầng web, tầng ứng dụng và tầng cơ sở dữ liệu. Mỗi thành phần được định nghĩa trong một mẫu riêng biệt, và mẫu chính tham chiếu đến các nested stacks này. Cách tiếp cận này không chỉ đơn giản hóa việc quản lý mà còn thúc đẩy tính tái sử dụng và nhất quán giữa các môi trường khác nhau.
# Main template
Resources:
WebStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://s3.amazonaws.com/mybucket/web-stack.yaml
AppStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://s3.amazonaws.com/mybucket/app-stack.yaml
DBStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://s3.amazonaws.com/mybucket/db-stack.yaml
Cross-Stack References cho Chia Sẻ Tài Nguyên
Cross-stack references cho phép bạn chia sẻ tài nguyên giữa các stack CloudFormation. Tính năng này rất cần thiết trong các hệ thống lớn, nơi nhiều stack cần tương tác với các tài nguyên chung như VPC, subnet hoặc security group.
Trong thực tế, nhiều dự án sử dụng cross-stack references để chia sẻ một VPC và các security group chung giữa nhiều stack ứng dụng. Thiết lập này đảm bảo rằng tất cả các ứng dụng tuân thủ cùng một chính sách mạng và bảo mật, giảm thiểu rủi ro cấu hình sai và tăng cường tuân thủ bảo mật.
# VPC stack
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Outputs:
VPCId:
Value: !Ref MyVPC
Export:
Name: MyVPCId
# Application stack
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
SubnetId: !ImportValue MyVPCId
Stack Sets cho Triển Khai Đa Vùng và Đa Tài Khoản
Stack Sets mở rộng khả năng của CloudFormation bằng cách cho phép bạn triển khai các stack trên nhiều tài khoản và vùng AWS. Tính năng này rất quan trọng đối với các tổ chức hoạt động ở nhiều địa điểm địa lý hoặc quản lý nhiều tài khoản AWS.
Nhiều ứng dụng global sử dụng Stack Sets để triển khai và quản lý hạ tầng phân của mình trên nhiều vùng. Bằng cách sử dụng Stack Sets, đảm bảo cấu hình nhất quán và triển khai nhanh chóng các tài nguyên, giúp phân phối ứng dụng hiệu quả đến toàn cầu. Ví dụ: bạn có thể dễ dàng thiết lập chính sách AWS CloudTrail hoặc AWS Config trên nhiều Account chỉ bằng một thao tác với StackSet. Bạn cũng có thể sử dụng StackSets để triển khai tài nguyên cho một Account nhưng nằm trên nhiều Region.
Custom Resources cho Mở Rộng CloudFormation
Custom resources cho phép bạn mở rộng chức năng của CloudFormation bằng cách viết logic tùy chỉnh mà CloudFormation có thể gọi trong quá trình hoạt động của stack. Tính năng này đặc biệt hữu ích để tích hợp các dịch vụ bên thứ ba hoặc thực hiện các cấu hình phức tạp không được CloudFormation hỗ trợ natively.
Nhiều dự án có nhu cầu tích hợp một dịch vụ tuân thủ bên thứ ba với hạ tầng AWS của mình bằng cách sử dụng custom resources. Custom resource kích hoạt một hàm Lambda tương tác với API của dịch vụ tuân thủ, đảm bảo rằng tất cả các tài nguyên được triển khai đều tuân thủ các yêu cầu quy định.
# Custom resource
Resources:
ComplianceCheck:
Type: Custom::Compliance
Properties:
ServiceToken: !GetAtt ComplianceLambda.Arn
ResourceId: !Ref MyResource
# Lambda function
Resources:
ComplianceLambda:
Type: AWS::Lambda::Function
Properties:
Handler: index.handler
Role: !GetAtt LambdaExecutionRole.Arn
Code:
ZipFile: |
import json
def handler(event, context):
# Custom compliance logic
return {'Status': 'SUCCESS'}
Change Sets cho Cập Nhật An Toàn
Change sets cung cấp một cách để xem trước các thay đổi mà CloudFormation sẽ thực hiện đối với stack của bạn trước khi áp dụng chúng. Tính năng này vô cùng giá trị trong các hệ thống lớn, nơi các thay đổi không mong muốn có thể gây ra tác động đáng kể.
Trước khi áp dụng các cập nhật, chúng ta cần xem xét change set để đảm bảo rằng không có tài nguyên quan trọng nào bị gián đoạn, giảm thiểu thời gian downtime và duy trì trải nghiệm liền mạch cho người dùng.
# Create a change set
aws cloudformation create-change-set --stack-name my-stack --template-body file://template.yaml --change-set-name my-change-set
# Describe the change set
aws cloudformation describe-change-set --change-set-name my-change-set --stack-name my-stack
# Execute the change set
aws cloudformation execute-change-set --change-set-name my-change-set --stack-name my-stack
Kết Luận
AWS CloudFormation cung cấp một loạt các tính năng nâng cao có thể mang lại lợi ích lớn cho các hệ thống quy mô lớn. Bằng cách tận dụng nested stacks, cross-stack references, Stack Sets, custom resources và change sets, các dự án của bạn có thể đạt được tính mô-đun cao hơn, chia sẻ tài nguyên, triển khai đa vùng, mở rộng chức năng và cập nhật an toàn. Những khả năng này không chỉ nâng cao hiệu quả hoạt động mà còn đảm bảo rằng việc quản lý hạ tầng là có thể mở rộng và mạnh mẽ.
Với DevOps Engineer hay Cloud Engineer, việc thành thạo các kỹ thuật CloudFormation nâng cao này có thể giúp bạn tối ưu hóa hạ tầng AWS và cải thiên thêm nhiều tư duy cũng như những nguyên tắc cốt lỗi của Infrastructure as Code.
Bình luận