- vừa được xem lúc

Tạo dịch vụ Fargate với bộ cân bằng tải ứng dụng bằng AWS CDK

0 0 24

Người đăng: VNTechies

Theo Viblo Asia

TL;DR Talk is cheap. Show me the code.

Bạn có thể tham khảo mã nguồn tại Github repository này

Tạo AWS VPC

Trước khi có thể bắt đầu xây dựng dịch vụ Fargate của mình, chúng ta cần thiết lập một Virtual Private Cloud (VPC). VPC là một mạng ảo được tách biệt cho phép bạn khởi tạo vào triển khai các tài nguyên AWS của mình, ví dụ như các dịch vụ Fargate

Bạn có thể chỉ định dải địa chỉ IP cho VPC, thêm mạng con (subnet), liên kết nhóm bảo mật (security group)và định cấu hình bảng định tuyến (route tables). Đối với bài viết này, chúng tôi sẽ tạo một VPC với 9 mạng con được chia trên 3 AZs bằng AWS CDK.

Sau đây là một ví dụ về cách tạo VPC.

Dưới đây là một ví dụ về cách tạo VPC:

# Tạo VPC với 9 subnets trên 3 AZs
my_vpc = ec2.Vpc( self, "my_vpc", nat_gateways=1, cidr="172.31.0.0/16", max_azs=3, subnet_configuration=[ ec2.SubnetConfiguration( name="public", cidr_mask=20, subnet_type=ec2.SubnetType.PUBLIC, ), ec2.SubnetConfiguration( name="application", cidr_mask=20, subnet_type=ec2.SubnetType.PRIVATE_WITH_NAT, ), ec2.SubnetConfiguration( name="data", cidr_mask=20, subnet_type=ec2.SubnetType.PRIVATE_ISOLATED, ), ],
)

Tạo AWS ECS Cluster

Sau khi đã triển khai các tài nguyên phụ thuộc, chúng ta có thể tiếp tục với tài nguyên Fargate thực tế. Đoạn mã tiếp theo sử dụng thư viện Cấu trúc CDK chính thức cho Cấu trúc ECS cấp cao hơn (aws-ecs-pattern) để tạo Nhiệm vụ Fargate đã lên lịch:

# Tạo ECS Cluster
cluster = ecs.Cluster( self, "service-cluster", cluster_name="service-cluster", container_insights=True, vpc=my_vpc,
)

Tạo một dịch vụ Fargate với bộ cân bằng tải ứng dụng (ALB) sử dụng AWS CDK

Sau khi đã triển khai các tài nguyên trên, chúng ta có thể tiếp tục với tài nguyên Fargate. Đoạn mã dưới dây sử dụng CDK Construct library for higher-level ECS Constructs (aws-ecs-patterns) để tạo một dịch vụ Fargate với bộ cân bằng tải ứng dụng (ALB):

image = ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample") ecs_patterns.ApplicationLoadBalancedFargateService( self, "amazon-ecs-sample", circuit_breaker=ecs.DeploymentCircuitBreaker(rollback=True), desired_count=1, task_image_options=ecs_patterns.ApplicationLoadBalancedTaskImageOptions( image=image, container_port=80, log_driver=ecs.LogDriver.aws_logs( stream_prefix="alb-fargate-service", log_retention=aws_logs.RetentionDays.ONE_DAY, ), ),
)
  • circuit_breaker Bật tính năng này cho phép bạn tự động rollback lại các tác vụ liên quan tới ECS của mình với CloudFormation sau khi vượt quá giới hạn ngưỡng triển khai không thành công (kiểm tra health check không thành công).
  • desired_count số lần khởi tạo định nghĩa tác vụ (task definition) mong muốn để tiếp tục chạy trên dịch vụ.
  • ecs_patterns.ApplicationLoadBalancedFargateService tại đây dịch vụ Fargate và bộ cân bằng tải ứng dụng được khởi tạo sử dụng thư viện patterns mẫu của ECS. Chúng ta tham chiếu đến cluster đã được tạo trong phần trước để AWS CDK biết vị trí cần để triển khai dịch vụ Fargate.
  • taskImageOptions chúng ta cấu hình các chi tiết cho container chẳng hạn như image. Trong bài viết này, chúng ta sử dụng hình ảnh mẫu amazon/amazon-ecs-sample, AWS CDK sẽ tự động lấy image này từ Amazon ECR và sử dụng để triển khai dịch vụ Fargate.
  • containerPort=80 cho biết cổng nào sẽ được expose từ dịch vụ Fargate.
  • Bạn có thể chỉ định thời gian lưu giữ cho logs của tác vụ. Mặc định, AWS CDK không cài đặt thời gian lưu trữ cho các logs được tạo bởi các tác vụ của nó. Nếu bạn muốn có cài đặt thời gian lưu trữ log của mình, bạn cần định nghĩa với thuộc tính log_retention trên log_driver. Giá trị aws_logs.RetentionDays.ONE_DAY, có nghĩa là log sẽ bị xoá sau 1 ngày.

Dọn dẹp tài nguyên

Xoá stack vừa được tạo bởi AWS CDK để tránh phát sinh chi phí không cần thiết bạn nhé 😉

cdk destroy

Kết luận

Qua hướng dẫn này, chúng ta đã:

  • Tạo AWS VPC
  • Tạo một AWS ECS Cluster
  • Tạo một dịch vụ Fargate với bộ cân bằng tải ứng dụng (ALB)

Việc sử dụng các Construct level cao hơn hoặc còn được gọi là là các mẫu (patterns), chẳng hạn như các mẫu ECS mà chúng ta đã sử dụng trong ví dụ này giúp giảm bớt rất nhiều công việc trong việc tạo ra nhiều tài nguyên AWS và có cả những giá trị mặc định hợp lý được cài đặt sẵn. Các mẫu như vậy có thể tiết kiệm thời gian phát triển, nhưng chúng ta sẽ có ít các thiết lập được tuỳ biến hơn.

Bài viết gốc

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 66

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 143

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 66

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 84

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 145

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 117