CloudWatch Events 이벤트를 수신 대기하도록 Amazon ECS 구성 - Amazon Elastic Container Service

CloudWatch Events 이벤트를 수신 대기하도록 Amazon ECS 구성

Amazon ECS 작업 이벤트를 수신 대기하고 이를 CloudWatch Logs 로그 스트림에 기록하는 간단한 Lambda 함수를 설정하는 방법을 알아봅니다.

필수 조건: 테스트 클러스터 설정

이벤트를 캡처할 실행 클러스터가 없는 경우 Fargate 시작 유형에 대한 Amazon ECS 클러스터 생성의 단계를 따라 클러스터를 하나 생성합니다. 본 자습서의 말미에서는 이 클러스터에서 태스크를 실행하여 Lambda 함수가 올바로 구성되었는지 테스트합니다.

1단계: Lambda 함수 생성

이 절차에서는 Amazon ECS 이벤트 스트림 메시지의 대상으로 사용할 간단한 Lambda 함수를 생성합니다.

  1. https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. 함수 생성(Create function)을 선택합니다.

  3. Author from scratch(새로 작성) 화면에서 다음과 같이 합니다.

    1. 이름(Name)에 값을 입력합니다.

    2. 런타임(Runtime)에서 Python 버전(예: Python 3.9)을 선택합니다.

    3. 역할(Role)에서 기본 Lambda 권한을 가진 새 역할 생성(Create a new role with basic Lambda permissions)을 선택합니다.

  4. 함수 생성(Create function)을 선택합니다.

  5. 함수 코드(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 로그 스트림에 이벤트 세부 정보가 표시됩니다.

  6. Save(저장)를 선택합니다.

2단계: 이벤트 규칙 등록

다음에는 Amazon ECS 클러스터로부터 작업 이벤트를 캡처하는 CloudWatch Events 이벤트 규칙을 만듭니다. 이 규칙은 규칙이 정의된 계정의 모든 클러스터에서 전송하는 모든 이벤트를 캡처합니다. 작업 메시지 자체에 작업이 상주하는 클러스터와 같은 이벤트 소스에 대한 정보가 포함되며, 이 정보를 사용하여 프로그래밍 방식으로 이벤트를 필터링 및 정렬할 수 있습니다.

참고

AWS Management Console을 사용하여 이벤트 규칙을 만들 경우 콘솔이 Lambda 함수를 호출할 CloudWatch Events 권한을 부여하는 데 필요한 IAM 권한을 자동으로 추가합니다. AWS CLI를 사용하여 이벤트 규칙을 만드는 경우 이 권한을 명시적으로 부여해야 합니다. 자세한 정보는 Amazon CloudWatch Events 사용 설명서이벤트 및 이벤트 패턴을 참조하세요.

Lambda 함수로 이벤트를 라우팅하려면
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 이벤트, 규칙, 규칙 생성을 선택합니다.

  3. 이벤트 소스(Event Source)에서 ECS를 이벤트 소스로 선택합니다. 기본적으로 규칙이 모든 Amazon ECS 그룹의 모든 Amazon ECS 이벤트에 적용됩니다. 또는 특정 이벤트 또는 특정 Amazon ECS 그룹을 선택할 수 있습니다.

  4. 대상(Targets)에서 대상 추가(Add target)를 선택하고 대상 유형(Target type)에서 Lambda 함수(Lambda function)를 선택한 다음 사용자의 Lambda 함수를 선택합니다.

  5. 세부 정보 구성(Configure details)을 선택합니다.

  6. 규칙 정의(Rule definition)에 규칙 이름과 설명을 입력한 다음 규칙 생성(Create rule)을 선택합니다.

3단계: 태스크 정의 생성

작업 정의를 생성합니다.

  1. https://console.aws.amazon.com/ecs/v2에서 콘솔을 엽니다.

  2. 탐색 창에서 태스크 정의를 선택합니다.

  3. 새 태스크 정의 생성(Create new Task Definition), JSON으로 새 수정 생성(Create new revision with JSON)을 선택합니다.

  4. 다음 예제 태스크 정의를 복사하여 상자에 붙여 넣은 다음 저장(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" }
  5. 생성(Create)을 선택합니다.

4단계: 규칙 테스트

마지막으로 Amazon ECS 클러스터로부터 작업 이벤트를 캡처하는 CloudWatch Events 이벤트 규칙을 만듭니다. 이 규칙은 규칙이 정의된 계정의 모든 클러스터에서 전송하는 모든 이벤트를 캡처합니다. 작업 메시지 자체에 작업이 상주하는 클러스터와 같은 이벤트 소스에 대한 정보가 포함되며, 이 정보를 사용하여 프로그래밍 방식으로 이벤트를 필터링 및 정렬할 수 있습니다.

규칙을 테스트하려면
  1. https://console.aws.amazon.com/ecs/v2에서 콘솔을 엽니다.

  2. Task definitions(작업 정의)를 선택합니다.

  3. console-sample-app-static을 선택한 다음 Deploy(배포), Run new task(새 작업 실행)를 선택합니다.

  4. Cluster(클러스터)에서 기본값을 선택한 다음 Deploy(배포)를 선택합니다.

  5. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  6. 탐색 창에서 로그를 선택하고 Lambda 함수의 로그 그룹을 선택합니다(예: /aws/lambda/my-function).

  7. 이벤트 데이터를 보려면 로그 스트림을 선택합니다.