Botkit을 통해 AWS 리소스 가져오기

Zenn의 첫 투고에서는 Botkit의 간단한 사용법을 AWS의 API와 TypeScript로 설명한다.
이번에는 슬랙 협업을 하지 않고 간단한 웹 포트를 만들어 확인한다.
샘플 창고가 미리 준비되어 있으니 궁금하신 분들은 Clone을 사용해보세요.👌
  • https://github.com/fnaoto/botkit-typescript-aws-sample
  • Botkit 시작 방법


    먼저 Botkit은 TypeScript에서 사용할 수 있습니다.
    4
    ## ライブラリのインストール
    
    $ yarn add botkit # yarnの代わりにnpm使ってもOKです
    $ yarn add typescript
    $ yarn add botbuilder-adapter-web
    $ yarn add aws-sdk
    
    ## tsconfigの作成
    
    $ npx tsc --init
    
    tsconfig 이런 느낌으로 수정.
    상세한 상황은 이곳의 보도를 참조하시오.
  • https://qiita.com/ryokkkke/items/390647a7c26933940470
  • // tsconfig.json
    {
      "compilerOptions": {
        "module": "esnext",
        "target": "esnext",
        "moduleResolution": "node"
      },
      "include": [
        "src/**/*"
      ],
      "exclude": [
        "node_modules"
      ]
    }
    
    package.json은 다음과 같이 수정되었습니다.
    // package.json
    {
      "scripts": {
        "start": "node dist/index.js", // jsを実行
        "build": "npx tsc --outDir ./dist ./src/index.ts" // tsファイルをjsにトランスパイル
      },
      "dependencies": {
        // 割愛
      }
    }
    

    TypeScript로 Botkit 샘플 만들기


    src 디렉터리와 index.ts 만들기
    4
    $ mkdir src
    $ touch src/index.ts
    
    샘플 코드 제작.
    참조 URL 여기 있습니다.
  • https://botkit.ai/docs/v4/platforms/web.html
  • 4
    import { Botkit } from "botkit";
    import { WebAdapter } from "botbuilder-adapter-web";
    
    const adapter = new WebAdapter; // botbuilder-adapter-webからadapterを作成
    
    const controller = new Botkit({
      adapter: adapter, // 作成したadapterをBotkitの初期化時に渡す
    });
    
    controller.on("test", async (bot, msg) => { // イベントのフィルター、`type: test`で返信
      await bot.reply(msg, "I received an text: " + msg.text); // 受け取った`text:`の内容を返す
    });
    
    Botkit의 바디와 어댑터는 라이브러리로 나뉜다.
    Botkit을 초기화할 때, 슬랙과 웹 등 어댑터를 제공하여 기능을 추가할 수 있습니다.
    여기서 간단한 테스트를 해보도록 하겠습니다.
    # jsファイルを生成
    $ yarn build
    
    # botkitを実行、待ち状態になる
    $ yarn start
    
    # 別のターミナル or シェルを起動
    # Botkitにリクエストを送る
    $ curl -X POST \
        -H "Content-Type: application/json" \
        -d '{
              "type": "test",
              "text": "ok bokujyou",
              "channel": "websocket",
              "user": "user"
            }' \
        http://localhost:3000/api/messages
    
    # 以下のレスポンスが返ってくればOK
    [{"type":"message","text":"I received an event: ok bokujyou"}]
    

    Botkit을 통해 AWS 리소스 호출


    이번에는 CodeBuild의 프로젝트 일람표를 간단하게 호출해 봅시다.
    원본 파일 만들기
    3
    $ mkdir -p src/aws
    $ touch src/aws/CodeBuild.ts
    
    TypeScript 코드
    (사실 리턴의 처리에서 답장값이나interface 같은 것을 쓰려고 했지만 이번에는 생략했다)
    // src/aws/CodeBuild.ts
    import * as AWS from "aws-sdk"; // ライブラリをインポート
    
    const codebuild = () => { // classのインスタンスを作成
      return new AWS.CodeBuild; // classを生成
    };
    
    // CodeBuildのプロジェクト一覧をAWSから取得して返す関数
    const CodeBuildListProjects = () => { // 何も受け取らないLambda処理
      return codebuild().listProjects().promise(); // 非同期処理(コールバック)
    };
    
    export { CodeBuildListProjects } // 別ファイルでimportするためにexportしておく
    
    // src/index.ts
    import { Botkit } from "botkit";
    import { WebAdapter } from "botbuilder-adapter-web";
    import { CodeBuildListProjects } from "./aws/CodeBuild"; // import
    
    const adapter = new WebAdapter;
    
    const controller = new Botkit({
      adapter: adapter,
    });
    
    controller.on("test", async (bot, msg) => {
      await bot.reply(msg, "I received an event: " + msg.text);
    });
    
    // 追加
    controller.on("codebuild", async (bot, msg) => {
      // CodeBuildListProjectsを実行
      await bot.reply(msg, await CodeBuildListProjects()); // 非同期処理なのでawaitを忘れない
    });
    
    확인
    $ yarn build
    $ yarn start
    
    # AWSの認証鍵を環境変数に設定
    
    $ export AWS_ACCESS_KEY_ID=<>
    $ export AWS_SECRET_ACCESS_KEY=<>
    $ export AWS_REGION=<>
    
    ## もしくは
    
    $ export AWS_PROFILE=<>
    
    # リクエスト
    
    $ curl -X POST \
        -H "Content-Type: application/json" \
        -d '{
              "type": "codebuild",
              "text": "test",     
              "channel": "websocket",
              "user": "user"
            }' \
        http://localhost:3000/api/messages
    
    # [<CodeBuildのプロジェクト一覧>] が返ってくるはず
    

    총결산


    Botkit을 사용하면 상당히 간단하게 API 스타일의 물건을 만들 수 있습니다.
    여기에 쓰여 있지 않지만, Slack chatbot을 사용하여 deply를 실행합니다.
    문턱이 좀 높다고 생각하시는 분들은 꼭 편하게 놀아주세요.🎉

    좋은 웹페이지 즐겨찾기