

# CloudWatch Events 이벤트를 수신 대기하도록 Amazon ECS 구성
<a name="ecs_cwet"></a>

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

## 필수 조건: 테스트 클러스터 설정
<a name="cwet_step_1"></a>

이벤트를 캡처할 실행 클러스터가 없는 경우 [Fargate 워크로드에 대한 Amazon ECS 클러스터 생성](create-cluster-console-v2.md)의 단계를 따라 클러스터를 하나 생성합니다. 본 자습서의 말미에서는 이 클러스터에서 태스크를 실행하여 Lambda 함수가 올바로 구성되었는지 테스트합니다.

## 1단계: Lambda 함수 생성
<a name="cwet_step_2"></a>

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

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

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

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

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

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

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

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

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

1. **저장**을 선택합니다.

## 2단계: 이벤트 규칙 등록
<a name="cwet_step_3"></a>

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

**참고**  
AWS Management Console을 사용하여 이벤트 규칙을 만들 경우 콘솔이 Lambda 함수를 호출할 CloudWatch Events 권한을 부여하는 데 필요한 IAM 권한을 자동으로 추가합니다. AWS CLI를 사용하여 이벤트 규칙을 만드는 경우 이 권한을 명시적으로 부여해야 합니다. 자세한 내용은 [Amazon EventBridge 사용 설명서](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)의 [Amazon EventBridge의 이벤트](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) 및 *Amazon EventBridge 이벤트 패턴*을 참조하세요.

**Lambda 함수로 이벤트를 라우팅하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

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

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

1. **대상**에서 **대상 추가**를 선택하고 **대상 유형**에서 **Lambda 함수**를 선택한 다음 Lambda 함수를 선택하세요.

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

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

## 3단계: 태스크 정의 생성
<a name="cwet_step_task-def"></a>

작업 정의를 생성합니다.

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

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

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

1. 다음 예제 태스크 정의를 복사하여 상자에 붙여 넣은 다음 **저장(Save)**을 선택합니다.

   ```
   {
      "containerDefinitions": [ 
         { 
            "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\""
            ],
            "entryPoint": [
               "sh",
               "-c"
            ],
            "essential": true,
            "image": "public.ecr.aws/docker/library/httpd:2.4",
            "logConfiguration": { 
               "logDriver": "awslogs",
               "options": { 
                  "awslogs-group" : "/ecs/fargate-task-definition",
                  "awslogs-region": "us-east-1",
                  "awslogs-stream-prefix": "ecs"
               }
            },
            "name": "sample-fargate-app",
            "portMappings": [ 
               { 
                  "containerPort": 80,
                  "hostPort": 80,
                  "protocol": "tcp"
               }
            ]
         }
      ],
      "cpu": "256",
      "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
      "family": "fargate-task-definition",
      "memory": "512",
      "networkMode": "awsvpc",
      "runtimePlatform": {
           "operatingSystemFamily": "LINUX"
       },
      "requiresCompatibilities": [ 
          "FARGATE" 
       ]
   }
   ```

1. **생성(Create)**을 선택합니다.

## 4단계: 규칙 테스트
<a name="cwet_step_4"></a>

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

**규칙을 테스트하려면**

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

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

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

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

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

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

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