CloudWatch Events 이벤트를 수신 대기하도록 Amazon ECS 구성
Amazon ECS 작업 이벤트를 수신 대기하고 이를 CloudWatch Logs 로그 스트림에 기록하는 간단한 Lambda 함수를 설정하는 방법을 알아봅니다.
필수 조건: 테스트 클러스터 설정
이벤트를 캡처할 실행 클러스터가 없는 경우 Fargate 시작 유형에 대한 Amazon ECS 클러스터 생성의 단계를 따라 클러스터를 하나 생성합니다. 본 자습서의 말미에서는 이 클러스터에서 태스크를 실행하여 Lambda 함수가 올바로 구성되었는지 테스트합니다.
1단계: Lambda 함수 생성
이 절차에서는 Amazon ECS 이벤트 스트림 메시지의 대상으로 사용할 간단한 Lambda 함수를 생성합니다.
https://console.aws.amazon.com/lambda/
에서 AWS Lambda 콘솔을 엽니다. -
함수 생성(Create function)을 선택합니다.
-
Author from scratch(새로 작성) 화면에서 다음과 같이 합니다.
-
이름(Name)에 값을 입력합니다.
-
런타임(Runtime)에서 Python 버전(예: Python 3.9)을 선택합니다.
-
역할(Role)에서 기본 Lambda 권한을 가진 새 역할 생성(Create a new role with basic Lambda permissions)을 선택합니다.
-
-
함수 생성(Create function)을 선택합니다.
-
함수 코드(Function code) 섹션에서 다음 예제와 일치하도록 샘플 코드를 수정합니다.
import json def lambda_handler(event, context): if event["source"] != "aws.ecs": raise ValueError("Function only supports input from events with a source type of: aws.ecs") print('Here is the event:') print(json.dumps(event))
다음은 Amazon ECS에서 전송하는 이벤트를 인쇄하는 간단한 Python 3.9 함수입니다. 모든 설정이 올바르게 구성되면 이 자습서가 끝날 때 이 Lambda 함수와 연결된 CloudWatch Logs 로그 스트림에 이벤트 세부 정보가 표시됩니다.
-
Save(저장)를 선택합니다.
2단계: 이벤트 규칙 등록
다음에는 Amazon ECS 클러스터로부터 작업 이벤트를 캡처하는 CloudWatch Events 이벤트 규칙을 만듭니다. 이 규칙은 규칙이 정의된 계정의 모든 클러스터에서 전송하는 모든 이벤트를 캡처합니다. 작업 메시지 자체에 작업이 상주하는 클러스터와 같은 이벤트 소스에 대한 정보가 포함되며, 이 정보를 사용하여 프로그래밍 방식으로 이벤트를 필터링 및 정렬할 수 있습니다.
참고
AWS Management Console을 사용하여 이벤트 규칙을 만들 경우 콘솔이 Lambda 함수를 호출할 CloudWatch Events 권한을 부여하는 데 필요한 IAM 권한을 자동으로 추가합니다. AWS CLI를 사용하여 이벤트 규칙을 만드는 경우 이 권한을 명시적으로 부여해야 합니다. 자세한 정보는 Amazon CloudWatch Events 사용 설명서의 이벤트 및 이벤트 패턴을 참조하세요.
Lambda 함수로 이벤트를 라우팅하려면
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
탐색 창에서 이벤트, 규칙, 규칙 생성을 선택합니다.
-
이벤트 소스(Event Source)에서 ECS를 이벤트 소스로 선택합니다. 기본적으로 규칙이 모든 Amazon ECS 그룹의 모든 Amazon ECS 이벤트에 적용됩니다. 또는 특정 이벤트 또는 특정 Amazon ECS 그룹을 선택할 수 있습니다.
-
대상(Targets)에서 대상 추가(Add target)를 선택하고 대상 유형(Target type)에서 Lambda 함수(Lambda function)를 선택한 다음 사용자의 Lambda 함수를 선택합니다.
-
세부 정보 구성(Configure details)을 선택합니다.
-
규칙 정의(Rule definition)에 규칙 이름과 설명을 입력한 다음 규칙 생성(Create rule)을 선택합니다.
3단계: 태스크 정의 생성
작업 정의를 생성합니다.
https://console.aws.amazon.com/ecs/v2
에서 콘솔을 엽니다. -
탐색 창에서 태스크 정의를 선택합니다.
-
새 태스크 정의 생성(Create new Task Definition), JSON으로 새 수정 생성(Create new revision with JSON)을 선택합니다.
-
다음 예제 태스크 정의를 복사하여 상자에 붙여 넣은 다음 저장(Save)을 선택합니다.
{ "containerDefinitions": [ { "entryPoint": [ "sh", "-c" ], "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "cpu": 10, "memory": 300, "image": "httpd:2.4", "name": "simple-app" } ], "family": "console-sample-app-static" }
-
생성(Create)을 선택합니다.
4단계: 규칙 테스트
마지막으로 Amazon ECS 클러스터로부터 작업 이벤트를 캡처하는 CloudWatch Events 이벤트 규칙을 만듭니다. 이 규칙은 규칙이 정의된 계정의 모든 클러스터에서 전송하는 모든 이벤트를 캡처합니다. 작업 메시지 자체에 작업이 상주하는 클러스터와 같은 이벤트 소스에 대한 정보가 포함되며, 이 정보를 사용하여 프로그래밍 방식으로 이벤트를 필터링 및 정렬할 수 있습니다.
규칙을 테스트하려면
https://console.aws.amazon.com/ecs/v2
에서 콘솔을 엽니다. -
Task definitions(작업 정의)를 선택합니다.
-
console-sample-app-static을 선택한 다음 Deploy(배포), Run new task(새 작업 실행)를 선택합니다.
-
Cluster(클러스터)에서 기본값을 선택한 다음 Deploy(배포)를 선택합니다.
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
탐색 창에서 로그를 선택하고 Lambda 함수의 로그 그룹을 선택합니다(예: /aws/lambda/
my-function
). -
이벤트 데이터를 보려면 로그 스트림을 선택합니다.