DevOps/Slack & API Gateway (8) 썸네일형 리스트형 Slack Slash Command를 통해 AWS 서버 스케줄링하기 - 3. API Gateway & Slack REST API로 구성하도록 하겠습니다. Method를 POST로 Auth 함수를 연동시켜주세요 매핑 탬플릿은 아래와 같습니다. application/x-www-form-urlencoded ## convert HTML POST data to JSON ## get the raw post data from the AWS built-in variable and give it a nicer name #set($rawAPIData = $input.path('$')) ## first we get the number of "&" in the string, this tells us if there is more than one key value pair #set($countAmpersands = $rawAPIData... Slack Slash Command를 통해 AWS 서버 스케줄링하기 - 2. Lambda 가장 먼저, Token 값을 인증할 람다함수를 만들겠습니다. 슬랙 앱을 구성하고 맨 처음에 있는 토큰 값을 가지고 인증할 것입니다. import json import boto3 def check_token(token): token_list = ["Slack Verify Token"] if token in token_list: return True else: return False def lambda_handler(event, context): print(event) token = event['token'] client = boto3.client('lambda') if check_token(token): response = client.invoke_async( FunctionName='slack-slash.. Slack Slash Command를 통해 AWS 서버 스케줄링하기 - 1. Intro Slash Command의 구성도는 위와 같습니다. 슬랙에서 유저가 슬래쉬 커맨드를 입력하면, 세팅된 URL을 통해 입력한 텍스트와 Response URL 등이 전달되고 Response를 3000ms 안에 준 후에, Response URL로 제대로 된 응답을 계속해서 줄 수 있습니다. 따라서 Auth에서 처음 Slack Slash Command를 통해 받은 토큰 값을 체크하고 인증되었다는 Response를 준 후, 실제 커맨드에 대한 결과는 Response URL로 다른 람다함수를 실행하여 그 결과값을 전달해주는 형태로 구성하였습니다. 만약 좀 더 사용자에게 편하게 구성하고자 한다면, 이전 슬랙 승인체계 구축할때 사용하였던 Interactive component로 응답을 주어 EC2 리스트 중 선택하여 .. Slack으로 CICD 승인체계 구성하기 - 4. Slack, Jenkins Job 이제 마무리 단계입니다. 전 게시글에서 배포한 API, Gateway Jenkins Rest API를 콜하는 URL을 넣어주세요 자, 이제 기존 젠킨스 잡에서 누군가 Job을 Build 했을 때, 슬랙에서 승인이 되어야 넘어갈 수 있도록 Jenkins Job을 수정하도록 하겠습니다. 먼저, Slack Bot Token 값을 Credentials에 만든 후, 젠킨스 잡에서 변수로 넣어주도록 하겠습니다. 이제 기존 Pipeline 소스코드에 스크립트를 추가하겠습니다. 승인체계만 있는 Jenkins Pipeline Stage Script는 아래와 같습니다. 잘 읽어보시면 알겠지만 account(approver)가 admin이어야 넘어가는 형태입니다. Jenkins 권한을 쪼개서, 스크립트 수정을 못하게 (볼 .. Slack으로 CICD 승인체계 구성하기 - 3. API Gateway REST API로 구성하도록 하겠습니다. 전 게시글에서 만든, Lambda들을 넣어주세요 리소스를 하나씩 추가해주겠습니다. 이제 method를 post로 구성해서 람다를 연결시켜주세요 이유는 잘 모르겠지만 애들도 사람인지라 이렇게 못 찾는 경우가 있습니다. 그럴 땐 람다 ARN을 복사해서 넣어주세요 만들어진 메소드 -> 통합 설정 -> 매핑 탬플릿에서 application/json -> 메서드 요청 패스스루 지정해주시면 됩니다. 마찬가지로 rest-api도 리소스를 만들어주겠습니다. 똑같이 메소드 POST에 람다 골라주시고, 이번엔 아래와 같이 설정해주세요 application/x-www-form-urlencoded ## The `substring(8)` returns the input with ever.. Slack으로 CICD 승인체계 구성하기 - 2. Lambda 앞선 글에 이어서 이제 위에서 2단계 ~ 4단계까지 구성을 하나씩 해보도록 하겠습니다. 먼저, 2단계를 수행해주는 람다함수를 만들어보겠습니다. Slack Interactive Component입니다. 슬랙채널에 버튼 같은 요소를 직접 작성하여 Slacker를 통해 구현하며, Slack Bot Token으로 인증하여 메세지를 채널에 전달합니다. 전 글에서 마지막에 본 Slack Bot Token을 환경변수에 저장해주도록 하겠습니다. 만약 보안상의 염려가 되신다면, KMS를 통해 암호화하신 후 사용하셔도 좋습니다. 이제 Layer입니다. Slacker 라이브러리를 사용하기 때문에 해당 라이브러리를 바로 Layer로 올려서 사용해주시면 됩니다. 소스코드는 아래와 같습니다. import os from slack.. Slack으로 CICD 승인체계 구성하기 - 1. Intro 전체 구성은 위와 같이 구성하여 진행할 예정입니다. 따라서 기본적인 Jenkins Pipeline 배포과정까지는 CICD 게시글을 참고하여서 구성을 끝내주셔야합니다. 물론 사실 더 좋은 Pipeline은 Jira Confluence를 사용하여 Slack 대신 게시글을 작성하고 소스코드 리뷰 하고 이력도 완벽하게 남기면서 배포하도록 API를 연동하시는 것이 더 좋습니다. (소스코드 품질 검증 소나큐브, 화이트소스 등, 도커 스캐닝등 과정도 포함해주시면 상당히 정석적인 구조를 완성하실 수 있습니다.) 하지만 저는 돈이 없기 때문에 위와 같이 체계와 간단한 로깅을 남기도록 만들겠습니다. 이 게시글에서는 간단하게 슬랙 채널과 앱을 만들어 주도록 하겠습니다. 그 다음 알맞게 입력해주시면 채널이 생성됩니다. 이제 .. Slack Slash Command를 통해 집 근처 약국 마스크 수량 알아보기 Slack Slash Command + API Gateway + Lambda를 통해 간단하게 입력한 주소 근처 마스크 수량을 알아보도록 하겠습니다. 전체 구성도는 아래와 같습니다. Kakao Geocode REST API를 통해 주소 입력 -> 위도, 경도를 받아 마스크 Open API를 콜해 알아보는 방식입니다. 따라서 먼저, Kakao Geocode REST API를 쓰기위해 API Key를 받도록 하겠습니다. https://developers.kakao.com/docs/restapi/local Kakao Developers_ 더 나은 세상을 꿈꾸고 그것을 현실로 만드는 이를 위하여 카카오에서 앱 개발 플랫폼 서비스를 시작합니다. developers.kakao.com 먼저 카카오 API 위의 링크에 .. 이전 1 다음