AWS CloudFormation

Khai báo Infrastructure bằng code và khởi tạo môi trường đã khai báo bằng CloudFormation.

Các lợi ích:

  • Cơ sở hạ tầng được cung cấp một cách nhất quán, với ít lỗi hơn (lỗi con người)
  • Tiết kiệm thời gian và công sức hơn so với cấu hình tài nguyên bằng tay (khai báo 1 lần, dùng lại nhiều lần)
  • Bạn có thể sử dụng version control và đánh giá bởi teammate cho các template CloudFormation
  • Miễn phí sử dụng (chỉ bị tính phí cho các tài nguyên được cung cấp)
  • Có thể được sử dụng để quản lý các bản cập nhật và dependency
  • Có thể được sử dụng để rollback hoặc xóa toàn bộ stack.

Component

  • Template: JSON hoặc YAML file, chứa Infrastructure
  • Stack: toàn bộ môi trường định nghĩa bởi template và quá trình tạo, sửa, xoá
  • NestedStack: re-use template cho các common case như ALB, Web Application
  • StackSet: như Stack nhưng giữa các account, region, sử dụng 1 template để deploy lên các region khác nhau, các account khác nhau.
  • Change Set: giống Git change, xem lại thay đổi trước khi update Stack.
    • Direct update: submit thay đổi ngay lập tức, phù hợp deployment
    • Create & update change set: preview trước khi apply

Logical ID: sử dụng để reference resource trong template

Physical ID: ID của resource sau khi resource được khởi tạo bằng stack, được tạo bởi AWS.

Có thể deploy stack qua Console, CLI hoặc API. Khi có lỗi sẽ mặc định sẽ tự động rollback toàn bộ stack (vẫn phải trả phí cho các resource đã khởi tạo nếu có lỗi)

Templates components

  • Resources: Khai báo các resource mà CloudFormation sẽ khởi tạo
  • Parameters: Khai báo các Input
  • Mappings: Khai báo các variable đã biết trước ứng với các key
  • Conditionals: Cần thiết khi tạo Resource với một hoặc các điều kiện
  • Metadata
  • Output: Các variable được output khi Stack hoàn thành
    • Sử dụng Fn:ImportValue để reference
    • Không thể xoá Stack nếu output được reference bởi Stack khác

Rollback

Mặc định sẽ rollback toàn bộ khi tạo mới, và khi update. Có thể setting để disable rollback để debug xem có vấn đề gì với template (nhưng không thể update template khi tạo mới nếu có lỗi).

UPDATE_ROLLBACK_FAILED

UPDATE_ROLLBACK_FAILED là state khi CloudFormation update version mới nhưng không thành công, sẽ rollback về version cũ, và xảy ra lỗi, solution

  • Fix lỗi ngoài CloudFormation (VD như tạo lại resource đã bị xoá) rồi tiếp tục update stack
  • Skip resource mà không thể rollback, lúc đó CloudFormation sẽ mark là UPDATE_COMPLETE
  • Nested stack sảy ra lỗi thì sẽ thử rollback toàn bộ Stack liên quan

ChangeSets

Tạo và xem trước các thay đổi trong template đã upload trước khi apply

Nested Stacks

Khi cần sử dụng các resource common thì nên sử dụng nested stack, ví dụ như tạo ALB + Target Group

Nested Stack khác với Cross Stack, Cross Stack sử dụng output của Stack và sử dụng lại ở các Stack khác, trong khi Nested Stack tạo lại các Resource theo common Stack.

StackSet

Thực hiện Stack trên các Account và Region khác nhau. Từ root account tạo StackSet, các account khác có thể CRUD Stack instance từ StackSet. Khi update StackSet, tất cả các Stack Instance sẽ được update

Drift

Khi có action thay đổi config của resource tạo bởi CloudFormation, có thể sử dụng CloudFormation drift để xem lại các thay đổi này (Không phải tất cả resource đều support)

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift-resource-list.html

DeletionPolicy

  • Retain
    • Chỉ định resource nào sẽ được giữ lại khi xoá Stack
    • Tất cả resource/nested stack đều hỗ trợ
  • Snapshot
    • Backup data trước khi xoá, nhưng chỉ hỗ trợ 1 số resource
    • EBS, Elasticache, RDS, Redshift
    • AWS::RDS::DBCluster mặc định là Snapshot
  • Delete
    • Option mặc định, xoá resource khi xoá stack
    • Trường hợp muốn xoá S3 cần Empty bucket trước khi xoá

Termination Protection

Ngăn chặn xoá Stack

Stack Policies

Là JSON Document quy định Allow/Deny action trên các Resource trong Template. Khi set Stack Policy, mặc định tất cả các resource đều được protect (không cho phép update)

CFN Init

  • cfn-init
    • Lấy metadata, cài package, tạo file và start service
  • cfn-signal
    • Sử dụng cùng CreationPolicy hoặc WaitCondition, để đồng bộ các resource khác trong Stack
  • cfn-get-metadata
    • Lấy thông tin trong metadata theo path hoặc tree
  • cfn-hup
    • Deamon, check update metadata và execute custom hook khi phát hiện các thay đổi
    • /ect/cfn-cfn-hup.conf
    • /etc/cfn/hooks.d/cfn-auto-reloader.conf

Custom Resource

  • AWS::CloudFormation::CustomResource hoặc Custom::MyCustomResourceTypeName
  • Chỉ định ServiceToken để send request (là ARN của SNS hoặc Lambda)
  • 2 Loại
    • SNS
    • Lambda
    • Phải cùng Region với Stack
  • CloudFormation sẽ gửi request kèm S3 Presign URL để SNS/Lambda push Object Json tới, sau đó CloudFormation sẽ đọc thông tin object đó để thực hiện tiếp
  • Trường hợp sử dụng
    • Resource mà CloudFormation không hỗ trợ
    • OnPremise Resource
    • Run Lambda để empty S3 trước khi xoá…
Format Data được CloudFormation gửi
Format của Object mà SNS/Lambda sẽ gửi qua S3 Presign URL

SSM Parameters

  • Có thể lưu value trong SSM Parameter Store rồi reference trong template
  • Max 60 dynamic reference
    • AWS::SSM::Parameter::Name
    • AWS::SSM::Parameter::Value<String>
    • AWS::SSM::Parameter::Value<List<String>>
    • AWS::SSM::Parameter::Value<ComaDelimitedList>
    • AWS::SSM::Parameter::Value<AWS-Paramerter>
    • AWS::SSM::Parameter::Value<List<AWS-Parameter>>

Dynamic References

  • Hỗ trợ SSM, SSM Secure, Secret Manager
  • SSM
    • {{resolve:service-name:reference-key}}
    • String, StringList
    • Không hỗ trợ SSM Public
    • Trườn hợp không chỉ định version thì sẽ lấy version public
  • SSM Secure
    • {{resolve:service-name:reference-key}}
    • SecureString
    • Trườn hợp không chỉ định version thì sẽ lấy version public
    • Không hỗ trợ toàn bộ CloudFormation Resource
  • Secret Manager
    • {{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
    • Để update Secret thì cần update cả Resource đang reference trong template

StackSets

  • Deploy template tới các region/account khác nhau
  • Khi update stack, tất cả các stack instance được update
  • Regional service
  • Có thể ủy quyền admin StackSets cho các tài khoản thành viên
  • Apply tới tất cả các account trong Organization
    • StackSet sẽ tạo Role và enable trusted access trong AWS Organization
    • Phải enable tất cả các feature trong AWS Organization
    • Có thể tự động deploy tới account mới được thêm vào Organization sau này
  • Sử dụng Role khi cần deploy tới nhiều account/region khác nhau mà không nằm trong Organization

StackSets Drift

  • Giống Stack Driff nhưng cho StackSet
  • Trường hợp thay đổi trong Stack (Không phải StackSet) không được coi là Drift
  • Có thể dừng Drift detection trên StackSet

Deployment Option

  • Theo thứ tự
    • Chỉ định thứ tự region/account sẽ thực hiện
    • Thực hiện deploy 1 region ở 1 thời điểm
  • Maximum Concurrent Account
    • Số lượng hoặc % target account mỗi region sẽ deploy
  • Failure Tolerance
    • Số lượng hoặc % target account mỗi region mà có thể failure trước khi CloudFormation dừng deploy tới tất cả region
  • Region Concurrency
    • Deploy theo thứ tự (mặc định) hoặc song song
  • Retain Stacks
    • Khi xoá StackSet, có thể dùng để giữ lại Stack và resource

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *