Slack 앱을 AWS Lambda에서 실행

Slack 앱을 AWS Lambda에서 실행



할 일



Slack 앱을 AWS Lambda로 이동합니다.
Slack 앱은 Slack Bolt에서 개발하여 Slack 바로 가기에서 모달을 시작합니다.

슬랙 볼트란?



Slack 앱을 손쉽게 작성하기 위한 프레임워크로 Slack사가 제공하고 있다. Bot만을 만들 수 있다든가 그런 것은 아니고, 다양한 트리거로부터 앱을 기동시켜 다양한 처리를 시킬 수 있다. 트리거는 다음과 같습니다.
  • Webhook 시작
  • 바로 가기 시작 (이나즈마 마크 녀석)
  • 슬래시 명령 시작

  • 또한 BlockKitBuilder을 사용하면보다 풍부한 UI를 구현할 수 있습니다.

    시퀀싱





    개발 언어


  • Node.js 12.16.1

  • 종속성이 있는 npm 패키지


  • @slack/bolt 2.2.3
  • @slack/logger 2.0.0
  • aws-serverless-express 3.3.8

  • 개발 환경 전용 npm 패키지


  • serverless 1.78.1
  • serverless-offline 6.5.0

  • 로컬의 API는 ngrok 로 외부 공개할 필요가 있다. (이 기사에서는 할애)

    구현 내용


    // ------------------------
    // Bolt 初期化処理
    // ------------------------
    const { App, ExpressReceiver } = require('@slack/bolt');
    const { LogLevel } = require('@slack/logger');
    const logLevel = process.env.SLACK_LOG_LEVEL || LogLevel.DEBUG;
    const processBeforeResponse = false;
    
    const receiver = new ExpressReceiver({
      signingSecret: process.env.SLACK_SIGNING_SECRET,
      processBeforeResponse,
    });
    
    const app = new App({
      token: process.env.SLACK_BOT_TOKEN,  // Bot User OAuth Access Token
      logLevel,
      receiver,
      processBeforeResponse,
    });
    
    // ------------------------
    // Bolt メイン処理
    // ------------------------
    
    // ショートカット起動
    app.shortcut('{callback_id}', async ({ logger, client, body, ack }) => {
      // logic...
      await ack();
    });
    
    // レスポンス処理
    app.view('{callback_id}', async ({ logger, client, body, ack }) => {
      // logic...
      await ack();
    });
    
    // ------------------------
    // AWS Lambda ハンドラ
    // リクエストを受け付けたらExpressサーバを起動する
    // ------------------------
    const awsServerlessExpress = require('aws-serverless-express');
    const server = awsServerlessExpress.createServer(receiver.app);
    module.exports.hello = (event, context) => {
      awsServerlessExpress.proxy(server, event, context);
    };
    

    Slack 앱 만들기



    응용 프로그램은 다음에서 만들 수 있습니다.
    htps : // 아피. scck. 이 m / ps / w

    슬랙 앱 설정



    앱을 바로 가기 시작하는 경우 다음에서 설정합니다. 「Callback ID」는 소스 코드의 app.shortcut('{ callback_id }'~ 와 일치시킨다.
    https://api.slack.com/apps/{작성한 앱 ID}/interactive-messages

    구현 포인트


  • Slack 앱은 응답을 3秒以内 를 반환하지 않으면 오류가 발생하기 때문에 ack() 를 어느 타이밍에 반환할지가 키모가 된다. 3 초를 넘는 처리를 구현하는 경우는 Lambda 를 분할해 먼저 ack() 를 하고 나서, 한쪽의 Lambda 를 비동기 처리시키면 좋을까 생각한다.
  • BlockKitBuilder의 JSON과 app.view의 callback_id가 연결되어 있으므로 view가 열리지 않는다고 생각하면 callback_id를 확인하는 것이 좋습니다.
  • BlockKitBuilder 의 JSON 에 block_idaction_id 를 지정하면(자), 요구를 input 마다 취득할 수 있다.

  • 사이고에게



    Lambda에서 Bolt를 움직이는 경우, Lambda 시작 + Bolt 시작 시간이 올라오므로 3초 규칙이 상당히 시비어. Lambda로 이동하는 것보다 서버에서 Bolt를 일반적으로 움직이는 것이 더 낫다고 생각하는 것이 적습니다.
    개인적인 비망의 기사이므로, 불명점은 코멘트나 참고가 된 URL을 봐 주시면과.

    참고가 된 URL


  • htps : // 기주 b. 코 m / 세라 tch / 보트 lts-r r
  • htps : // 기주 b. 코 m / 세라 tch / 세 r ょ ぇ r
  • htps : // s ck. v / 보트 ltjs / 쟈 jp / 쓰리 아 l / 곁치 gs dr d
  • 좋은 웹페이지 즐겨찾기