Containers hiện đã trở thành cách mặc định để đóng gói ứng dụng web của tôi. Mặc dù tôi yêu thích tốc độ, năng suất và tính nhất quán mà các container cung cấp, nhưng có một khía cạnh của quy trình phát triển container mà tôi không thích: quy trình dài dòng khi tôi triển khai image container lần đầu tiên.
Bạn có thể nhận ra quy trình này: thiết lập trình cân bằng tải, cấu hình tên miền, thiết lập TLS, tạo quy trình CI/CD và triển khai lên dịch vụ container.
Trong nhiều năm qua, tôi đã điều chỉnh quy trình làm việc của mình và hiện tại tôi có một dự án AWS Cloud Development Kit (AWS CDK) template mà tôi sử dụng, nhưng đã mất rất nhiều thời gian để đạt được điều này. Mặc dù dự án template này rất tuyệt vời cho các ứng dụng lớn hơn, nhưng khi tôi chỉ muốn triển khai và mở rộng một image container duy nhất thì nó cảm thấy như một công việc lớn.
Tại AWS, chúng tôi cung cấp nhiều dịch vụ giúp kiểm soát chi tiết ứng dụng được đóng gói thành container. Tuy nhiên, nhiều khách hàng đã hỏi liệu AWS có thể xử lý cấu hình và vận hành môi trường container của họ hay không. Họ chỉ muốn trỏ đến mã nguồn hoặc kho chứa container hiện có và cho ứng dụng chạy và tự động mở rộng trên đám mây mà không cần cấu hình và quản lý các dịch vụ cơ sở hạ tầng.
Do khách hàng yêu cầu chúng tôi tạo ra một giải pháp đơn giản hơn, các kỹ sư của chúng tôi đã nỗ lực để tạo ra một dịch vụ mới mà bạn sẽ yêu thích.
Giới thiệu AWS App Runner
AWS App Runner giúp bạn triển khai ứng dụng web và API lên đám mây dễ dàng, bất kể ngôn ngữ mà chúng được viết bằng, ngay cả đối với các nhóm thiếu kinh nghiệm triển khai và quản lý container hoặc cơ sở hạ tầng. Dịch vụ này tích hợp các quy tắc tốt nhất về vận hành và bảo mật của AWS và tự động mở rộng hoặc thu hẹp khi cần thiết, không gây ra tình trạng “cold start” để lo lắng.
Triển khai từ mã nguồn
App Runner có thể triển khai ứng dụng của bạn bằng cách kết nối đến mã nguồn hoặc đến một kho chứa container. Tôi sẽ trước tiên chỉ cho bạn cách nó hoạt động khi kết nối đến mã nguồn. Tôi có một ứng dụng web Python trong một kho GitHub. Tôi sẽ kết nối App Runner với dự án này, để bạn có thể thấy cách nó biên dịch và triển khai mã của tôi lên AWS.
Trong màn hình App Runner trên AWS Management Console, chọn Create an App Runner service.
Ở mục Repository type, chọn Source code repository và làm theo hướng dẫn để kết nối dịch vụ này tới tài khoản GitHub của mình. Ở mục Repository, tôi chọn bộ chứa ứng dụng mình muốn triển khai. Ở mục Branch, chọn main.
Ở phần Deployment trigger, tôi chọn Automatic. Lựa chọn này nghĩa là khi App Runner phát hiện ra thay đổi mới trong bộ mã nguồn đã cấu hình, nó sẽ tự động dựng và triển khai phiên bản cập nhật mới này lên dịch vụ của tôi.
Giờ tôi có thể bắt đầu cấu hình build. Ở mục Runtime, tôi chọn Python 3. App Runner hiện tại hỗ trợ hai ngôn ngữ: Python và Node.js. Nếu bạn muốn sử dụng với ngôn ngữ khác, bạn sẽ cần theo quy trình dùng container registry (tôi sẽ trình bày ở phần sau). Tôi cũng điền luôn các trường Build command, Start command và Port, như hình dưới đây:
Tiếp theo, tôi đặt tên cho dịch vụ của mình và chọn kích cỡ CPU và bộ nhớ mà tôi muốn mỗi container của mình được cấp. Những lựa chọn đưa ra ở đây sẽ ảnh hưởng đến giá cả tôi phải trả cho việc chạy hệ thống này. Vì ứng dụng mẫu này yêu cầu rất ít CPU và bộ nhớ, nên tôi chọn 1 vCPU và 2 GB để giảm chi phí. Ở màn hình này, ta cũng có thể cung cấp các biến môi trường cần thiết để hỗ trợ cấu hình ứng dụng của mình.
Giao diện console cho phép người dùng tùy chỉnh nhiều cài đặt khác nhau cho dịch vụ:
Người dùng có thể cấu hình hành vi tự động mở rộng – thu hẹp. Mặc định, dịch vụ được triển khai trên một container, nhưng nếu nhận được hơn 80 yêu cầu đồng thời, dịch vụ sẽ tự động mở rộng thành nhiều container. Người dùng cũng có thể chỉ định một số lượng tối đa container để kiểm soát chi phí.
Người dùng có thể mở rộng tính năng Health check và đặt đường dẫn để App Runner gửi yêu cầu kiểm tra tình trạng hệ thống đến đó. Nếu người dùng không thiết lập đường dẫn này, App Runner sẽ thực hiện kết nối TCP để xác định tình trạng hệ thống. Mặc định, nếu App Runner nhận được năm lỗi kiểm tra tình trạng hệ thống liên tiếp, nó sẽ coi container đó là bị hỏng và thay thế nó.
Người dùng cũng có thể mở rộng tính năng Security và chọn một IAM role mà container sẽ sử dụng. Role này cho phép container giao tiếp với các dịch vụ AWS khác. App Runner mã hóa tất cả các bản lưu trữ của gói mã nguồn hoặc container image của ứng dụng. Nếu người dùng cung cấp một khóa quản lý khách hàng (CMK), App Runner sẽ sử dụng khóa đó để mã hóa mã nguồn. Nếu không có khóa nào được cung cấp, App Runner sẽ sử dụng khóa được quản lý bởi AWS.
Cuối cùng, tôi kiểm tra lại các cấu hình của dịch vụ, rồi chọn Create & deploy.
Sau một vài phút, ứng dụng đã được triển khai tự động và App Runner đã cung cấp một URL để truy cập vào ứng dụng web đã triển khai. App Runner đảm bảo rằng ứng dụng được cấu hình HTTPS để tôi có thể chia sẻ với nhóm kiểm thử ứng dụng mà không gặp bất kỳ cảnh báo bảo mật từ trình duyệt. Tôi không cần phải xử lý quy trình truy cập an toàn với HTTPS trong container image của mình, App Runner đã tự động làm điều này.
Bây giờ, tôi muốn thiết lập một tên miền riêng cho ứng dụng của mình. App Runner cho phép tôi cấu hình điều này trực tiếp trên giao diện console. Tại đây, tôi truy cập vào dịch vụ của mình, chọn tab Custom domains, và sau đó chọn Add domain.
Ở mục Domain name, tôi nhập tên miền muốn dùng cho ứng dụng, rồi chọn Save
Sau khi tôi đã xác minh quyền sở hữu với tên miền này, ứng dụng sẽ có thể được truy cập thông qua URL tương ứng. Bây giờ, tôi sẽ hướng dẫn cho bạn cách App Runner hoạt động với các container image.
Triển khai từ container image
Tôi đã tạo một ứng dụng web .NET, dựng nó dưới dạng container image, sau đó đẩy image này lên Amazon ECR Public.
Để triển khai một ứng dụng web dưới dạng container image trên App Runner, bạn cần thực hiện các bước sau:
- Tạo một container image cho ứng dụng web của bạn và đẩy image lên một container registry. Amazon ECR Public là một lựa chọn tốt nếu bạn muốn chia sẻ image của mình với mọi người.
- Truy cập vào console của App Runner và chọn Create service.
- Trong phần Source and deployment, chọn Repository type là Container registry và Provider là Amazon ECR Public.
- Nhập URI của container image mà bạn đã tạo ở bước 1 vào mục Container image URI.
- Trong phần Deployment settings, bạn có thể chọn cách triển khai ứng dụng của mình, ví dụ như triển khai tự động mỗi khi có thay đổi trong container image bằng cách chọn Amazon ECR làm Provider và kích hoạt chức năng “Automatic deployment on change”.
- Sau đó, bạn cần cấu hình các thông số khác như tên dịch vụ, cấu hình mạng và bảo mật, và chọn Create service để triển khai ứng dụng của mình.
Lưu ý rằng khi triển khai ứng dụng web trên App Runner, bạn cần cấu hình một số thông số như mạng, bảo mật và cấu hình môi trường để đảm bảo ứng dụng của bạn chạy đúng cách trên App Runner.
Sau khi bạn đã triển khai ứng dụng web của mình trên App Runner, quá trình tiếp theo sẽ giống y hệt như trong phần “Triển khai từ mã nguồn”. App Runner sẽ cung cấp cho bạn một URL để truy cập vào ứng dụng của mình qua internet.
Bạn có thể chia sẻ URL này với người dùng hoặc đội phát triển để kiểm tra ứng dụng của bạn. Nếu bạn đã cấu hình tên miền riêng cho ứng dụng của mình, bạn cũng có thể truy cập vào ứng dụng bằng tên miền này.
Lưu ý rằng khi triển khai ứng dụng trên App Runner, bạn cần quan tâm đến các thông số mạng và bảo mật để đảm bảo ứng dụng của bạn hoạt động đúng cách và an toàn trên App Runner.
Những điều cần biết
App Runner triển khai hệ thống tệp (file system) trong container của bạn dưới dạng bộ nhớ không bền vững (ephemeral). Điều này có nghĩa là các tệp chỉ tồn tại trong phạm vi của quá trình xử lý yêu cầu và sẽ bị mất nếu dịch vụ App Runner của bạn bị tắt hoặc khởi động lại.
Tuy nhiên, bạn có thể tận dụng việc này bằng cách lưu trữ các tệp tin tạm thời trong bộ nhớ đệm (cache) để tăng tốc độ xử lý yêu cầu sau này. Tuy nhiên, bạn cần lưu ý rằng việc này không đảm bảo rằng các tệp tin này sẽ luôn tồn tại giữa các lần gọi/yêu cầu khác nhau và bạn cần kiểm tra xem tệp tin đã được tải xuống trong yêu cầu trước đó hay chưa.
Nếu bạn muốn lưu trữ dữ liệu lâu dài và đảm bảo tính toàn vẹn của các tệp tin, bạn nên sử dụng các dịch vụ lưu trữ dữ liệu như Amazon S3 hoặc Amazon EFS. Nếu bạn cần lưu trữ các dữ liệu tạm thời và truy xuất chúng nhanh chóng, bạn có thể sử dụng các dịch vụ bộ nhớ đệm như Amazon ElastiCache. Tuy nhiên, hãy lưu ý rằng việc sử dụng các dịch vụ này sẽ tạo ra chi phí phát sinh, vì vậy bạn nên tính toán kỹ trước khi quyết định sử dụng chúng.
Các đối tác
AWS đã hợp tác với nhiều đối tác để tích hợp với App Runner và cung cấp cho khách hàng của mình những giải pháp tốt nhất để triển khai và quản lý ứng dụng trên đám mây.
Trong trường hợp của MongoDB, họ rất vui mừng khi tích hợp App Runner với MongoDB Atlas, dịch vụ cơ sở dữ liệu toàn cầu của họ, để các nhà phát triển có thể sử dụng khả năng mở rộng và hiệu suất của MongoDB Atlas cho các ứng dụng App Runner của họ. Điều này giúp các nhà phát triển dễ dàng triển khai và quản lý các ứng dụng của mình trên đám mây, đồng thời đảm bảo tính hiệu quả và an toàn của cơ sở dữ liệu.
Datadog và HashiCorp cũng đều đã tích hợp với AWS App Runner để cung cấp cho khách hàng của họ những giải pháp tốt nhất để triển khai và quản lý ứng dụng trên đám mây.
Trong trường hợp của Datadog, họ đã tích hợp với App Runner để cung cấp cho khách hàng khả năng theo dõi các chỉ số, logs và sự kiện trong App Runner của họ để khắc phục sự cố nhanh hơn. Điều này giúp khách hàng xác định các tài nguyên và cách cấu hình mở rộng tốt nhất cho ứng dụng của họ.
Trong khi đó, HashiCorp đã tích hợp Terraform với App Runner để giúp các nhà phát triển triển khai các ứng dụng trên đám mây ở mức độ production một cách nhanh hơn và dễ dàng hơn.
Ngoài ra, AWS cũng đã tích hợp với các đối tác khác như Pulumi, Logz.io và Sysdig để cung cấp cho khách hàng của App Runner sử dụng các công cụ và dịch vụ mà họ đã biết và tin tưởng. Và với sự hỗ trợ từ đối tác tư vấn của AWS, Trek10, khách hàng có thể tận dụng tốt nhất App Runner cho thiết kế kiến trúc hệ thống thuần đám mây.
Độ phổ dụng và Chi phí
AWS App Runner hiện có sẵn ở các khu vực Đông Hoa Kỳ (US East – N. Virginia), Tây Hoa Kỳ (US West – Oregon), Đông Hoa Kỳ (US East – Ohio), Châu Á Thái Bình Dương (Asia Pacific – Tokyo), Châu Âu (Europe – Ireland).
Khi sử dụng App Runner, bạn sẽ trả tiền cho tài nguyên máy tính và bộ nhớ mà ứng dụng của bạn sử dụng. AWS App Runner tự động điều chỉnh số lượng container được chạy lên và xuống để đáp ứng các yêu cầu xử lý của ứng dụng. Bạn có thể đặt giới hạn tối đa số lượng container mà ứng dụng được sử dụng để chi phí không vượt quá ngân sách mà mình đề ra.
Phí sử dụng App Runner được tính dựa trên thời gian chạy của ứng dụng. Bạn chỉ bị tính phí khi ứng dụng đang chạy, và có thể tạm dừng ứng dụng của mình một cách dễ dàng và tiếp tục chạy ứng dụng một cách nhanh chóng. Điều này đặc biệt hữu ích trong các trường hợp hệ thống đang được phát triển và kiểm thử, vì bạn có thể tắt ứng dụng khi không sử dụng nó, giúp quản lý chi phí tốt hơn.
Hãy sử dụng AWS App Runner ngay hôm nay để bắt đầu chạy các ứng dụng web của bạn trên quy mô lớn, nhanh chóng và an toàn.
Bài được dịch từ bài viết trên AWS Blogs, bạn có thể xem bài viết gốc tại đây.