이벤트브릿지 인풋 트랜스포머 사용을
연습해 보도록 하겠습니다
먼저 이벤트브릿지로 들어가서
Rules를 선택한 다음
규칙을 생성해주고 DemoInputTransformer라고 하겠습니다
여기에서 저희가 하고자 하는 것은
인풋을 넣되
변환을 해주는 것입니다
이것은 hands-on lab으로라도
시험에 나올 수 있는
부분이기 때문입니다
어떻게 하면 될까요?
이벤트 버스가 있고
이벤트 패턴에 맞는
규칙도 있습니다
Next 버튼을 눌러주고
이벤트 소스는 AWS 이벤트이고
샘플 이벤트로는
이것을 트리거해주고
AWS 이벤트를 선택해 둡니다
우리가 필터링하고 싶은 이벤트는
EC2 Instance State-change Notification입니다
이걸 붙여넣고나면
인풋 이벤트는 이렇게 보여집니다
이렇게 ID와
세부 유형과 소스가 있고
계정, 타임스탬프, 리전을 비롯해, 전체 ARN에 공급되는 인스턴스 ID인
리소스도 있습니다
그리고 detail 아래로는 인스턴스 ID와 state가 있습니다
이것은 JSON 문서인데
이대로 괜찮아 보입니다만
만약 다운스트림 애플리케이션이 특정 이벤트 유형을 원하는데
이것을 사용하는 대신 인스턴스 ID가 detail 아래에 있는 것이 아니라 그저 한 레벨 위에 있는
단순화된 버전을 사용하고 싶어할지도 모르고
이유가 무엇이건
이것의 변환이 필요할 수 있습니다
어떻게 할 수 있는지 살펴보겠습니다
먼저 Creation method 에서
Use pattern form을 선택하고
AWS services와 EC2를 선택합니다
이벤트 형식도 다시 선택해주어야 하므로
이것을 가져다 붙여 넣겠습니다
그러면 여기 이렇게
생성된 이벤트 패턴을
확인하실 수 있습니다
이부분은 됐으니
Next를 클릭해 넘어갑니다
다음은 AWS 서비스를 타겟으로 해볼텐데
이것을 위해 CloudWatch 로그 그룹을
타겟으로 설정하고
/aws/events/event-input-transformation으로 설정해줍니다
실제 인풋 변환 설정은
Additional Settings 안에
들어가 있습니다
Configure target input 아래에서
여기를 클릭하고
Input transformer를 선택합니다
여기서 해당 변환기 설정이 가능한데
이제부터 재미있어집니다
먼저 샘플 이벤트를 다시 명시해주어야 하니
이렇게 필터를 넣어주겠습니다
이제 전과 같은 샘플링 이벤트들이 생겼는데
달라진 것은 이런 input path(입력 경로)가 생겼다는 겁니다
이 콘솔은 여러분이 가질 수 있는
것들에 대한 정보를 줍니다
예를 들어 지금 보여드려 보자면
이렇게 입력 경로를 제공하고
이렇게 템플릿과
아웃풋도 제공됩니다
저희도 비슷한 걸 사용할 건데
관련 예시 부분은 나중에 각자 살펴보시기 바랍니다
Target input transformer로 가보겠습니다
이건 변수를 정의하는 건데
이 안에서 최대 100개의
변수를 가질 수 있고
해당 변수는
variable-name으로 사용할 수 있습니다
변수를 정의하기 위해서는
JSON 문서를 사용해야 합니다
일단 이것을 붙여 넣고
잠시 후에 보도록 하죠
여기 왼쪽을 보시면
변수의 이름은 timestamp로 정의하고
여기에서는 타임스탬프의 값을 정의합니다
네 달러 기호는 인풋을 취한다는 뜻이고
.은 JSON 양식에서
필드를 찾는다는 뜻이며
time은 time 필드를 찾는 것입니다
그러므로 $.time 이라는 것은
이 time 필드로 인도하는데
이 값을 가지고와서
timestamp라는 이름 아래에 저장해 줍니다
원하는대로 내려가서
$.detail.instance-id 라고 한다면
여기 detail로 가서
그 밑으로 JSON 문서가 있고
instance-id가 있는 것을 확인할 수 있고
거기에서 인스턴스 ID를 가지고 옵니다
states의 경우에도 마찬가지입니다
마지막으로, 배열에서는
괄호를 이용해
배열 내 위치에서
관련 값을 명시할 수 있습니다
그러니까 $.resources는 배열이고
[0]은 숫자 0을 의미하는 겁니다
여기 resource를 보시면
이것은 배열이고
0은 이 부분을 의미합니다
됐습니다
이렇게 네 개의 인풋 변수를 정의해 주었고
이제 원하는 건 뭐든 할 수 있습니다
예를 들어
was launced at 라고 입력하고
이것을 실행시켜 보겠습니다
Generate output 버튼을 눌러주면
보시는 것처럼
해당 인스턴스가
이 타임스탬프에 실행된 것을 보실 수 있습니다
이 인풋 템플릿이 이 아웃풋이 된 겁니다
모든 것이 순조롭습니다
CloudWatch 로그 그룹에 뭔가를 보내려면
JSON 문서가 포함되어야 하기 때문에
아주 단순한 내용으로
이 JSON 문서를 포함시킬텐데
거기에는
timestamp는 이 timestamp이고
이것은 CloudWatch 로그 그룹에 필요한 것이라는 내용과
그 안의 메세지로는
is in state at ,
with arn 라고 입력하고 아웃풋을 생성하겠습니다
보시는 것처럼
우리가 원했던 대로의 메세지를
확인할 수 있습니다
이제 Confirm 버튼을 눌러서
이벤트를 저장해 줍니다
여기서 저장을 해주고
Update rule 버튼을 눌러주는데, 이것은 어떻게 테스트 할까요?
먼저 EC2 콘솔로 가서
EC2 인스턴스를 생성해주고
이벤트브릿지에서 무언가
보이는지를 확인하기 위해
Launch instances를 클릭 후 demo라고 입력해주고
빠르게 스크롤을 내려줍니다
key pair는 필요치 않고
나머지는 다 괜찮아 보이므로
이 인스턴스를 런칭하겠습니다
런칭되는 인스턴스들은
이벤트브릿지 데이터를 생성해낼 것이고
이벤트브릿지는 그것을 CloudWatch 로그로 보낼 겁니다
그러면 이제 CloudWatch 로그로 들어가봅니다
됐습니다
여기에서 Logs로 들어가 Log groups를 선택하고
aws event input transformation을 찾습니다
보시다시피
로그 스트림이 생성되는데요
그중 하나를 보시면
포함시켰던 타임스탬프가 이렇게 들어있고
메세지에는 인스턴스가
pending 상태이며 이 타임스탬프에서
이러한 ARN을 갖고있다고 보여지므로 제대로 작동한다고 볼 수 있습니다
이쪽의 이벤트를 살펴보면
여기에는
인스턴스가 running 상태인 것을 볼 수 있습니다
모두 완벽히 작동하는 것을 보니 좋습니다
인풋 트랜스포머 덕에
이벤트브릿지에서 이벤트를 가져와
변환시킬 수 있었고
그것은 이제 CloudWatch 로그에 있습니다
마무리를 해주기 위해서
인스턴스를 종료함으로
이것과 관련해 코스트가 발생하지 않도록 하고
규칙은 원하시는대로 실행되게 두거나
비활성화 시켜주시면 됩니다
오늘 강의는 여기까지입니다
유익하셨기를 바라며, 다음 강의에서 뵙겠습니다