티스토리 뷰

AWS Lambda와 API GateWay를 활용한 Slack의 Slash 명령어를 만들어 보려고 합니다.

진행 순서

  1. Slack의 App과 Slash 명령어 생성
  2. AWS Lambda + API Gateway 생성
  3. 연동

Slack의 App과 Slash 명령어 생성

Slack에 가입 후 Cloud Study라는 채널에 입장한 상태로 시작합니다~

슬랙은 메신저 뿐만 아니라 다양한 통합 기능을 제공하고 있습니다. (Web Hooking, Slash Command등)

  • 왼쪽 상단에 이름을 누르면 나오는 Apps & integrations 메뉴 클릭!

  • 오른쪽 상단 Build 버튼 클릭!

  • Start Building 버튼 클릭!

  • AppName을 입력하시고
  • App을 적용시킬 팀을 선택하시면 됩니다.
  • Create App 버튼 클릭!

  • Slash Commands 선택!
  • 다음 페이지에서 Create New Command 버튼 클릭!

  • command 명 입력 ex) /wiki
  • Request URL은 AWS API Gateway가 뱉어내는 URL을 나중에 입력
  • Short Description은 짧게 설명을 샤샤샥 작성
  • Usage Hint ex) [Search Text]

AWS Lambda 생성

아마존 클라우드 프리티어 사용 중입니다~

아마존 클라우드 로그인 후 대쉬보드 화면으로 GO GO

  • AWS에서 제공하는 서비스는 엄청 많으니까 검색창에 lambda라고 검색
  • 다음 페이지에서 Create New Function 버튼 클릭!

  • Select blueprint는 샘플로 lambda를 구성해 놓은 것이고,
  • Configure triggers는 다른 AWS 서비스에서 코드를 자동으로 트리거하도록 설정하는 것 입니다.
    적용사례) DynamoDB 테이블의 데이터 수정에 응답하는 애플리케이션을 구축할 수 있습니다.
  • Configure function을 클릭하시면 아래와 같은 화면이 보이게 됩니다.

  • Name 입력하시고
  • Description에 간단한 설명과
  • Runtime 환경 설정해 주시면 됩니다
  • Code entry type은 코드를 어떻게 등록할 것인지 선택해야 합니다.
  1. 배포 패키지 만들기를 통해 로컬PC에서 작업한 소스를 업로드 하시거나
  2. Amazon S3 bucket에 올려놓은 코드가 있다면 그걸 쓰셔도 되고
  3. Edit code inline로 직접 작성하셔도 됩니다.
  • 여기서는 Node JS 런타임 환경과 Edit code inline을 선택하겠습니다^^ 아래 코드를 입력해 주세요~ 슬랙 슬래시 명령어에서 날려준 text를 받아다가 wiki 검색 URL을 리턴하는 코드입니다.
// The entry point of this lambda function.
exports.handler = function(event, context) {
  console.log(event);

  context.succeed({
    "response_type": "in_channel",
    "text": "I found some about \"" + event.text + "\"",
    "attachments": [
        {
            "text": "For more info please visit to \nhttps://ko.wikipedia.org/wiki/" + event.text,
            "color": "#7CD197"
        }
    ]
  });

};
  • Existing role은 service-role/myRoleName 선택 후 Next 버튼 클릭!
  • 다음 화면에서 Create fuction 버튼 클릭!
  • function을 만든 후 Test 버튼 클릭하면 아마 위 코드에서 선언한 event.text 값이 undefined 로 결과 로그가 나오게 될 겁니다. 당황하지 마시고 Actions 드롭다운박스를 클릭해서 Congigure test event를 클릭해 주세요.

  • 테스트 할 이벤트를 위와 같이 수정 후 Save ant test 하면 결과 로그가 제대로 나올겁니다.







API Gateway 생성

AWS Lambda는 혼자서는 어떤 기능을 하기 힘들기 때문에 이제 API Gateway와 연결해서 Slack에서 가져다 쓸 수 있도록 작업해 보겠습니다. 

  • 대쉬보드로 가서 API Gateway 검색
  • 다음페이지에서 Create API 버튼 클릭!
  • 그 다음페이지에서 API Name과 Description을 쓰시고 Create API 버튼 클릭!

  • Actions 드롭다운박스를 클릭해서 Create Resource
  • 생성된 Resource를 클릭한 상태로 Actions 드롭다운박스를 클릭해서 Create Method 중 post Method를 생성 (오른쪽 체크버튼을 누르면 생성완료 됨)

  • Lambda Region은 AWS Lambda >> Functions 에서 해당 Function의 ARN 정보를 보면 나와있습니다 <sup>그냥 하나씩 Region을 선택해보는게 더 빠를수도 있습니다.</sup>
  • Setup을 마치면 Resource 트리에서 post Method를 클릭하면 Method Execution 화면이 보이게 됩니다.

Slack에서 명령어를 호출하면 "application/x-www-form-urlencoded" Content-Type을 사용하여 폼 post 방식 전송을 하기 때문에 이를 JSON 형태로 변환하는 작업이 필요합니다.

마지막으로 Actions 드롭다운박스를 클릭해서 Deploy API 해 주셔야 수정한 것들이 적용됩니다.

연결

Lambda와 API Gateway가 잘 생성됐으면 맨 왼쪽 Tree에서 API >> Stages 에 가면 Invoke URL 정보를 보실 수 있습니다.

이 URL을 복사해서 아까 맨 처음에 Slack 명렁어 생성시 비워뒀던 Request URL에 채워넣고, Slack 채팅창으로 가서 생성한 명령어가 사용가능한지 확인 해 보시면 됩니다~


참고한 블로그
AWS Lambda와 API Gateway로 Slack Bot 만들기
AWS API GatewayでContent-Type:application/x-www-form-urlencoded のPOSTデータを受け取り JSONに変換する
AWS Lambda를 이용해서 GitHub과 Slack 연동하기
[AWS] 서버없이 Lambda와 API Gateway로 서버API 만들기


'Cloud' 카테고리의 다른 글

Azure Kubernetes Service 기본 구성  (0) 2022.11.16
Azure 네트워크 구성  (0) 2022.11.02
Azure Cloud 사용하기  (0) 2022.06.24
Google Cloud Platform VM 접속하기  (0) 2020.01.17
Google Cloud Platform 사용하기  (0) 2019.05.31
댓글