Theo dõi các image server mới nhất thông qua xây dựng các pipeline  

by Eric Johnson | on 18 NOV 2020 | in Amazon EC2, Amazon Simple Notification Service (SNS), AWS Lambda, AWS Systems Manager, Serverless | Permalink |  Share

Bài viết này được viết bởi Anoop Rachamadugu, Cloud Architect tại AWS

Dịch vụ  Amazon EC2 Image Builder giúp người dùng xây dựng và duy trì các hình ảnh máy chủ. Các hình ảnh được tạo bởi EC2 Image Builder có thể được sử dụng với Amazon Elastic Compute Cloud (EC2) và trên nền tảng on-premises. Image Builder giảm thiểu công sức để duy trì các  images luôn được cập nhật và an toàn bằng cách cung cấp giao diện đồ họa, tự động hóa tích hợp và các cài đặt bảo mật do AWS cung cấp. Khách hàng đã cho chúng tôi biết rằng họ quản lý nhiều hình ảnh máy chủ và đang tìm cách để theo dõi các hình ảnh máy chủ mới nhất được tạo bởi các pipelines.

Trong bài đăng này, tôi sẽ hướng dẫn một giải pháp sử dụng AWS LambdaAWS Systems Manager (SSM) Parameter Store. Giải pháp này sẽ theo dõi và cập nhật các Amazon Machine Image (AMI) mới nhất mỗi khi một Image Builder pipeline được chạy. Với Lambda, bạn chỉ trả tiền cho những gì bạn sử dụng. Bạn sẽ được tính phí dựa trên số lượng yêu cầu cho các hàm của bạn và thời gian chạy mã của bạn. Trong trường hợp này, Lambda function được gọi khi hoàn thành image builder pipeline. Các tham số tiêu chuẩn của SSM có sẵn mà không tốn thêm chi phí.

Người dùng có thể tham chiếu đến các tham số SSM trong các kịch bản tự động hóa và các mẫu AWS CloudFormation  để truy cập vào ID AMI mới nhất cho cơ sở hạ tầng EC2 của bạn. Hãy xem xét trường hợp sử dụng cập nhật ID Amazon Machine Image (AMI) cho các EC2 instances trong các mẫu CloudFormation của bạn. Thông thường, bạn có thể ánh xạ các ID AMI vào các loại instance cụ thể và các khu vực. Sau đó, để cập nhật chúng, bạn sẽ phải thay đổi thủ công trong mỗi mẫu của bạn. Với tích hợp tham số SSM, mã của bạn vẫn nguyên vẹn và thao tác cập nhật stack CloudFormation sẽ tự động lấy giá trị mới nhất từ Parameter Store.

Tổng quan

Giải pháp này sử dụng một hàm Lambda được viết bằng Python đăng ký vào một chủ đề Amazon Simple Notification Service (SNS). Hàm Lambda và chủ đề SNS được triển khai bằng AWS SAM CLI. Sau khi triển khai, chủ đề SNS phải được cấu hình trong một Image Builder pipeline hiện có. Kết quả là hàm Lambda sẽ được gọi khi Image Builder pipeline hoàn thành.

Khi một hàm Lambda đăng ký vào một chủ đề SNS, nó sẽ được gọi với dữ liệu của các tin nhắn đã được xuất bản. Hàm Lambda nhận dữ liệu tin nhắn làm tham số đầu vào. Hàm Lambda đầu tiên kiểm tra dữ liệu tin nhắn để xem trạng thái hình ảnh có sẵn hay không. Nếu trạng thái hình ảnh là có sẵn, nó sẽ truy xuất ID AMI từ dữ liệu tin nhắn và cập nhật tham số SSM.

Sơ đồ kiến ​​trúc của EC2 Image Builder

Các bước chuẩn bị

Để bắt đầu với giải pháp này, bạn cần có các điều sau:

Triển khai giải pháp

Giải pháp bao gồm hai tệp, có thể tải xuống từ amazon-ec2-image-builder GitHub repository.

  1. Tệp Python image-builder-lambda-update-ssm.py chứa mã cho hàm Lambda. Đầu tiên, nó kiểm tra dữ liệu nhúng SNS để xác định xem hình ảnh có sẵn không. Nếu có sẵn, nó sẽ trích xuất ID AMI từ dữ liệu nhúng SNS và cập nhật tham số SSM đã chỉ định. Biến ‘ssm_parameter_name’ chỉ định đường dẫn tham số SSM nơi ID AMI nên được lưu trữ và cập nhật. Hàm Lambda kết thúc bằng việc thêm các tag vào tham số SSM.
  2. Tệp template.yaml là một mẫu AWS SAM. Nó triển khai hàm Lambda, chủ đề SNS và vai trò IAM cần thiết cho hàm Lambda. Tôi sử dụng Python 3.7 làm runtime và gán bộ nhớ là 256 MB cho hàm Lambda. Chính sách IAM cấp cho hàm Lambda quyền truy xuất và cập nhật các tham số SSM. Bạn có thể triển khai ứng dụng này bằng AWS SAM CLI với lệnh hướng dẫn sau:
sam deploy –guided

Sau khi triển khai ứng dụng, ghi lại ARN của chủ đề SNS đã được tạo. Tiếp theo, cập nhật các thiết lập cơ sở hạ tầng của một đường ống Image Builder hiện có với chủ đề SNS mới được tạo này. Điều này dẫn đến việc hàm Lambda được gọi khi đường ống xây dựng hình ảnh hoàn tất.

cấu hình chi tiết

Xác minh giải pháp

Sau khi image builder pipeline hoàn tất, sử dụng AWS CLI hoặc kiểm tra AWS Management Console để xác minh tham số SSM đã được cập nhật. Để xác minh qua AWS CLI, hãy chạy các lệnh sau để truy xuất và liệt kê các thẻ được gắn với tham số SSM

aws ssm get-parameter –name ‘/ec2-imagebuilder/latest’
aws ssm list-tags-for-resource –resource-type “Parameter” –resource-id ‘/ec2-imagebuilder/latest’

Để xác minh thông qua AWS Management Console, điều hướng đến Parameter Store trong AWS Systems Manager. Tìm kiếm tham số /ec2-imagebuilder/latest:

AWS Systems Manager: Parameter Store

Select the Tags tab to view the tags attached to the SSM parameter:

Image builder tags list

Tham chiếu đến Tham số SSM trong các mẫu CloudFormation

Người dùng có thể tham chiếu đến các tham số SSM trong các kịch bản tự động hóa và các mẫu AWS CloudFormation để truy cập vào ID AMI mới nhất cho cơ sở hạ tầng EC2 của bạn. Mã mẫu sau đây cho thấy cách tham chiếu đến tham số SSM trong một mẫu CloudFormation:

Users can reference the SSM parameters in automation scripts and AWS CloudFormation templates providing access to the latest AMI ID for your EC2 infrastructure. This sample code shows how to reference the SSM parameter in a CloudFormation template.

Parameters :
  LatestAmiId :
    Type : ‘AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>’
    Default: ‘/ec2-imagebuilder/latest’

Resources :
  Instance :
    Type : ‘AWS::EC2::Instance’
    Properties :
      ImageId : !Ref LatestAmiId

Kết luận

Trong bài đăng này, tôi trình bày một giải pháp cho phép người dùng theo dõi và cập nhật ID AMI mới nhất được tạo bởi các Image Builder pipelines. Hàm Lambda trích xuất ID AMI của hình ảnh được tạo bởi một đường ống và cập nhật một tham số AWS Systems Manager. Hàm Lambda này được kích hoạt thông qua một chủ đề SNS được cấu hình trong một đ Image Builder pipelines.

Giải pháp này được triển khai bằng AWS SAM CLI. Tôi cũng ghi chú cách người dùng có thể tham chiếu đến các tham số Systems Manager trong các mẫu AWS CloudFormation để truy cập vào ID AMI mới nhất cho cơ sở hạ tầng EC2 của bạn.

Kho lưu trữ GitHub amazon-ec2-image-builder-samples cung cấp một số ví dụ để bắt đầu với EC2 Image Builder. Image Builder có thể giúp bạn dễ dàng hơn trong việc xây dựng các hình ảnh máy ảo (VM).