인스턴스 생성시 필수 프로그램 설치 자동화 파이프라인 part1 - Event Bridge

  • Aws
  • February 7, 2024

인스턴시 생성시 반드시 설치해야 하는 프로그램들이 있다면 대개 유저데이터를 사용합니다.

근데 실제로 사람이 일을 하다 보면 실수로 유저데이터를 입력 안하는 경우가 있습니다.

담당자에게 주의를 주어서 항상 입력하도록 만든다 할지라도 담당자가 바뀌거나 하는 외부의 요인으로도 같은 문제가 발생합니다.

근본적인 해결책은 의무 설치 과정을 자동화를 하면 됩니다.

IAM을 사용하여 유저데이터가 없으면 생성을 못하게 하는 방식도 있겠지만 이 방식은 결국 생성과정을 한 번 더 거치는 경우가 자주 발생하기에 설치 자체를 자동화 하고 싶었습니다.

자료를 찾아보니 몇몇 참고할 자료가 있었습니다.

구현한 구성은 Cloud Event bridge rule → Lambda → SSM 입니다.

보통 Cloud Event Bridge rule → SSM으로 인스턴스내 설치가 가능한데 해당 파이프 라인으로는 특정 인스턴스만 적용하는 기능이 없어서 중복 설치 문제가 야기됩니다.

무슨 의미인가 하면 EventBridgeRule은 트리거를 해줄수는 있어도 원하는 인스턴스 ID만 직접 SSM에 줄수가 없다는 뜻입니다.

그러다 보니 SSM은 다수의 인스턴스에 설치를 진행하게 되는데 그 다수의 인스턴스안에 이미 설치가 되어있는 인스터가 포함되어 중복 설치를 하게 됩니다.

그래서 새 인스턴스에만 프로그램을 설치하고 싶다면 중간에 람다가 EventBridge에서 인스턴스 ID만 출력하여 RunCommand에 보내야합니다.

그림을 그리게 된다면 아래와 같은 그림이 됩니다.

Untitled

그림에서 알 수 있듯이 가장 먼저 Event Bridge가 실행되어야 하는데 앞서 언급했던 중복 설치를 피하기 위해서는 인스턴스가 생성 될때만 실행이 되어야한다.

특정한 조건을 가지고 Event Bridge를 실행하려면 이벤트 패턴이라는 것을 만들어야 합니다.

아래의 링크로 들어가면 예제 패턴들을 볼 수 있고 원하는 패턴에 맞게 참고하여 수정하면됩니다.

Amazon EventBridge 이벤트 패턴 - Amazon EventBridge

{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["terminated"]
  }
}

하지만 작업은 예상 보다 오래 걸렸다.

필요했던 패턴은 인스턴스 생성 패턴이여서 위의 예시 코드에서 state의 값만 변경하면 된다고 생각 했는데 [“EC2 Instance State-change Notification”]라는 detail-type에는 생성에 해당하는 값이 없었습니다.

그래서 엄청 헤매다가 EventBridge가 AWS API를 직접 호출 할 수 있는 방법이 있다는 것으로 알았고 또한

AWS CloudTrail에는 인스턴스 생성할때만 RunInstances라는 기록을 남게 하는걸 발견했습니다.

그래서 EventBridge가 AWS API 중 CloudTrail을 호출할 수 있으면 RunInstances라는 값을 이용해서 인스턴스 생성할때만 EventBridge를 실행하도록 구성할 수 있습니다.

EventBridge를 사용하여 AWS API를 직접 호출 할 수 있는 방법에 대해 자세히 알고 싶으면 아래의 링크를 클릭하면 됩니다

자습서: EventBridge를 사용하여 AWS API 직접 호출 로깅 - Amazon EventBridge

여러번의 시도 끝에 적절한 패턴을 만들 수가 있었습니다.

{
  "source": ["aws.ec2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
      "eventSource": ["ec2.amazonaws.com"],
      "eventName" : ["RunInstances"]
       }
}
}

그러면 Event Bridge가 어떻게 해서 람다를 실행시키는지는 part2에서 다루도록 하겠습니다.

Tags :

Related Posts

Cloud

클라우드 컴퓨팅이란? 클라우드 컴퓨팅이란 컴퓨팅 파워(CPU, RAM, Network Speeds, Storage OS 소프트웨어)를 물리적인 설치 보다는 네트워크를 이용해서 고객에게 배달해주는 것입니다.

Read More

RDS freeable memory 가 지속적으로 감소하는 이유

캡쳐한 이미지는 DB 메모리 여유량 입니다 MariaDB는 데이터 작업을 하기 위해 버퍼와 캐시를 할당 합니다.

Read More

Azure automation을 이용하여 자동 실행

기업에서는 비용 절감을 위해서 개발환경의 서버는 퇴근 후 끄는 경우가 많습니다.

Read More