AWS

[Slack]Slash Command-Lambda 연동 :: 마이구미

mygumi 2018. 6. 30. 22:37
반응형

이 글은 슬래시(/) 명령어와 AWS Lambda 연동을 다룬다.

이전 글(Slack-Codecommit 연동)에서는 AWS 에서 이벤트가 발생하면 이를 Slack 에 알려주었다.

여기서는 반대로 Slack 에서 AWS 에게 요청하여 원하는 결과를 받아본다.


슬래시 명령어는 커스텀을 통해 많은 기능을 만들어낼 수 있다.

이것은 일반적으로 알고 있는 REST API 를 생각하면 된다.

REST API 는 원하는 목적에 따라, 각 요청(request)에 따른 응답(response)이 존재한다.

여기서 요청이 URL 이라면, Slack 에서는 슬래시 명령어가 요청이고, 이에 따른 응답이 존재할 것이다.



이전 글을 바탕으로 생각해보면, 위처럼 반대로 Slack 에서 Lambda 로 단순히 요청하면 될 것 같아보인다.

사실상 Slack 에서는 Lambda 의 존재와 위치를 알 수 없다.

이를 위해 라우팅과 같은 역할을 위한 매개체가 존재해야할 것이다.

그 역할에 있어, SQS, Gateway 등과 같은 AWS 서비스들이 존재한다.

본인은 AWS Gateway 를 사용함에 있어, 흐름은 다음과 같다.


  • Gateway - API 들의 인프라
  • Lambda - 작성된 함수 호출
  • CloudWatch Logs - 함수 실행에 관련된 로그 확인


위 그림의 흐름대로 슬래시 명령어를 통해 Gateway 를 거쳐 Lambda 함수를 실행한 후, 그에 대한 응답을 Slack 에 출력한다.

그 결과는 다음과 같은 모습으로 Slack 에 출력할 수 있다.

예제로는 각종 양식에 대한 링크를 출력하는 목적을 가진 슬래시 명령어를 생성한다.



이러한 결과를 얻기 위해서 단계별로 알아본다.


  1. Slack 설정
  2. AWS Lambda 생성
  3. AWS Gateway 생성 및 설정
  4. Lambda-Gateway 연동
  5. Slack 에서 요청할 URL 설정


1. Slack 설정


Slack 의 슬래시 명령어가 실행되면 외부 URL 로 데이터를 보낼 수 있는 기능이다.



관련 설정 페이지에 들어가면 Command, URL, Method 등과 같은 옵션들이 존재한다.



우선 명령어는 /form 으로 입력하고, 단순히 원하는 응답을 출력할 것이기 때문에, GET 방식을 택한다.

URL의 값은 실제로 요청할 URL 을 해당한다.

현재는 공백이지만, 추후 단계에서 Gateway 를 통해 Lambda 와 연동된 URL 을 입력할 것이다.


2. AWS Lambda 생성


이전 글과 같이 원하는 결과를 반환하기 위한 Lambda 함수에 대한 코드를 작성한다.

실질적인 부분으로써, 해당 슬래시 명령어에 따른 응답에 대한 출력 형태를 위해 코드를 작성한다.

관련 이름을 "SLACK_COMMAND" 연동 으로 지정하겠다.

이번 단계에서는 아무 설정없이 단순히 람다 함수를 생성한 것이다. (즉, 이 상태로는 동작할 수 없다.)

추후 작업은 4번 단계에서 진행한다.


3. AWS Gateway 생성 및 설정


Gateway 페이지에서 APIs 메뉴에서 "Create API" 버튼을 통해 관련 API 를 생성한다.

API 이름은 간단하게 이름은 "SLACK" 이라고 지정한다.

그 후 Actions 버튼을 통해 "Create Resource", "Create Method" 를 활용한다.


이전에 GET 방식을 활용한다고 언급했다.

GET 방식의 Method 를 생성한다.



그 후, 위와 같이 생성된 Method 의 설정을 선택한다.

이전 단계에서 생성한 Lambda 함수인 "SLACK-COMMAND" 을 지정한 후 저정한다.

이렇게 생성된 API 를 배포하기 위해서 Stages 메뉴에서 Stage 를 생성한다.

그 결과로는 invoke URL 을 만들어낸다.

이 URL 을 5번 단계에서 사용할 것이다.


4. Lambda-Gateway 연동


2번, 3번 단계는 Lambda 와 Gateway 를 생성했다.

이 단계에서는 두 서비스를 연동한다.


위와 같이 Lambda 페이지에서 "API Gateway" 를 클릭한 후 설정 트리거에서 3번 단계에서 생성한 "SLACK" 이라는 이름을 가진 API 를 선택한다.


5. Slack 에서 요청할 URL 설정


1번 단계에서 비워놨던 URL 값에 3번 단계에서 생성한 invoke URL 을 넣는다.




이전 글과 이번 글을 통해 가장 기본적인 Slack 과의 외부 서비스의 연동을 해보았다.

즉, Slack => AWS, AWS => SLACK 요청 방향이 어떻게 동작하는 지를 확인할 수 있다.

반응형