2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜

Last updated at Posted at 2024-04-26

はじめに

こちらの記事は三部構成になっております。

また、全ての記事の内容を含んだ動画も用意しております。
動画で確認したい方はコチラまで。
※動画開始50分頃からの内容になります。

AWS Lambda編の概要

ここの説明になります
スクリーンショット 2024-04-16 16.29.39.png

Backlog APIを利用する前に

Backlogの設定にもよりますが、弊社の場合はIPアドレスによる制限をかけています。
社内のIPアドレス、特定のIPアドレスからのみアクセスを許可しています。
スクリーンショット 2024-04-16 17.51.56.png

AWS Lambdaからアクセスする際にも特定IPアドレスからAPIへアクセスするように制御が必要になります。

AWS Lambdaの特定IPアドレス化

通常のAWS Lambdaは、サーバレスなので起動のタイミングで毎回IPアドレスが変化します。
IPアドレスを固定させるには、VPC内にAWS Lambdaを用意してインターネット経由でネットワーク接続するIPを特定のアドレスで指定する必要があります。
システム構成図としては、このような形になります。
スクリーンショット 2024-04-16 19.09.24.png

VPCの設定について

こちらは省略します。ネットワーク関連の仕組みは管轄外のため…

AWS Lambdaの設定

AWS Lambdaの設定にVPCからの実行権限を付与する必要があります。

  1. Lambda設定画面からアクセス権限を選択し、ロール画面へ移動
    スクリーンショット 2024-04-17 12.34.43.png

  2. IAMロール設定画面の【許可】タブ内の【許可を追加】ボタンをクリックし、【ポリシーをアタッチ】をクリック
    スクリーンショット 2024-04-17 13.01.19.png

  3. ポリシーアタッチ画面が表示されるので、検索テキストボックスに lambdavpc と入力し、絞り込みタイプ【AWS管理】を選択すると、AWSLambdaVPCAccessExecutionRole がリストに表示されるので、チェックボックスを選択し、【許可を追加】ボタンをクリック
    スクリーンショット 2024-04-17 15.08.36.png

  4. IAMロール設定画面に戻りポリシーの設定が完了
    スクリーンショット 2024-04-17 15.21.31.png

  5. Lambda設定画面からVPCを選択し、【編集】ボタンをクリックして各VPC設定を行ったら、準備完了です
    スクリーンショット 2024-04-17 18.24.58.png

Backlogへのデータ登録

BacklogのAPI仕様に関しては、こちらのリンク先を参照
https://developer.nulab.com/ja/docs/backlog/api/2/add-issue/#
Lambdaのサンプルコードはコチラになります

lambda_function.py
import os
import json
import requests

#--------------------------------------------------
# Backlog登録処理
# summary:チケットタイトル
# description:チケット詳細内容
# custom1:カスタムフィールド(質問フラグ)
# custom2:カスタムフィールド(発信部門)
#--------------------------------------------------
def backlog_add_issue(summary, category_id, description, custom1, custom2):
    project_id = '**[対象のプロジェクトID]**'
    issue_type_id = '**[課題タイプ]**'
    priority_id = '3'
    url = 'https://***[バックログ登録キー]***.backlog.jp/api/v2/issues'
    payload={
        'projectId': project_id,
        'issueTypeId': issue_type_id,
        'priorityId': priority_id,
        'categoryId[]': category_id,
        'summary': summary,
        'description': description,
        'customField_69109': custom1,
        'customField_69357': custom2
    }
    # BacklogAPI呼び出しキーを設定
    params = {
        'apiKey': os.environ['API_KEY'],
    }
    req = requests.post(url, params=params, data=payload)
    req.raise_for_status()
    return req

Slack通知を利用する前に

(非推奨)Incoming WebHooks の取得

2019年からSlackのカスタムインテグレーションによるWebhookは非推奨となっています。
従いまして、下記のような画面で新たに Incoming WebHooks を作成するのは止めましょう。
スクリーンショット 2024-04-17 18.42.40.png

Slack App から Incoming Webhooks の取得

  1. (その2)で作ったSlack Appの基本情報画面の左メニューから Incoming Webhooks リンクをクリック
    スクリーンショット 2024-04-17 19.04.36.png

  2. Incoming Webhooksの設定画面の Activate Incoming Webhooks スイッチをONに設定し、【Add New Webhook to Workspace】ボタンをクリック
    スクリーンショット 2024-04-18 14.16.07.png

  3. Incoming Webhooksの送信チャンネルを選択し、【Allow】ボタンをクリック
    スクリーンショット 2024-04-18 14.25.59.png

  4. こちらでWebhook URLが作成されるので、準備完了です。【copy】ボタンをクリックして、Webhook URLをコピーしてソースコードで利用できます
    スクリーンショット 2024-04-18 17.16.05.png

Slackチャンネルへの通知

Incoming Webhookを利用したメッセージの送信方法に関しては、こちらのリンク先を参照
https://slack.dev/java-slack-sdk/guides/ja/incoming-webhooks
Lambdaのサンプルコードはコチラになります

lambda_function.py
import os
import json
import requests

#--------------------------------------------------
# Slack通知関数
# notice:送信先
# message:送信メッセージ
#--------------------------------------------------
def slack_notice(notice, message):
    notice_urls = {
        '企画':os.environ['SLACK_PLANNING'],
        '営業':os.environ['SLACK_SALES'],
        '開発':os.environ['SLACK_DEVELOP']
    }
    if notice in notice_urls:
        url = notice_urls[notice]
    else:
        return
    req = requests.post(url, data=json.dumps({'text': message}), headers={'Content-Type': 'application/json'})
    req.raise_for_status()
    return req

まとめ

スクリーンショット 2024-04-26 10.38.15.png

3回に分けて説明となりましたが、今回用意した仕組みで

  • Workflow Builderを使ってデータ入力
  • Slack Appを使ってAPIへデータ送信
  • Lambdaを使ってBacklogへデータ登録
  • Lambdaを使ってSlackへメッセージ通知

上記4つの動きを実装することが出来るようになりました。

Slackを起因に、何か作業をすることは業務効率をより良くするものだと思いますので
これらを参考に他のAPIへ連携するなり、メールを送るなり、DBへ格納するなりやれることは無限にあります。

技術を使った生産成向上にゴールはないので、皆さんも工夫してみてください!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?