この記事はなに?
SlackBotにハロワをさせるだけです😅
「既存の記事と多少違う!」という点はPython + CDK + Boltで実装する!という点です。
BoltはSlackの公式ライブラリーで、Slackを使ったアプリが簡単に作れるやつです!
これを使うにはバックエンドのサーバーが必要です。
ここを今回はAPIGateway + Lambdaでやっていきます。
またこのインフラ&アプリはPython + CDKで実装します!
という内容の記事😅
2021/09/27
もっとシンプルにする方法がありました🙇
使ったライブラリー
Lambdaで直接Boltは使えないのでFlaskを利用し、
さらにLambdaで直接Flaskは使えないので、awsgiを利用する感じです!
実際のコードはこんな感じ
CDKのスタック
LambdaをRestApiでデプロイします👍
app.py
import os
from aws_cdk import core
from aws_cdk.aws_apigateway import LambdaRestApi
from aws_cdk.aws_lambda import Runtime
from aws_cdk.aws_lambda_python import PythonFunction
APP_NAME = "CdkBoltHelloWorld"
class CdkBoltHelloWorldStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
lambda_ = PythonFunction(
self, f"{APP_NAME}Lambda", entry="app", handler="handler", runtime=Runtime.PYTHON_3_8,
)
LambdaRestApi(self, f"{APP_NAME}Gateway", handler=lambda_)
app = core.App()
env = core.Environment(account=os.getenv("CDK_DEFAULT_ACCOUNT"), region=os.getenv("CDK_DEFAULT_REGION"))
CdkBoltHelloWorldStack(app, APP_NAME, env=env)
app.synth()
アプリ側
Lambdaのrequirements.txt
はこんな感じ
app/requirements.txt
slack-bolt==1.7.0
aws-wsgi==0.2.6
Flask==1.1.1
アプリ本体はこんな感じ
app/index.py
# ---- Boltアプリ ------------------------------
from slack_bolt import App
SLACK_SIGNING_SECRET = "SlackアプリのSIGNING_SECRETを貼り付ける"
SLACK_BOT_TOKEN = "SlackアプリのBotトークンを貼り付ける"
app = App(signing_secret=SLACK_SIGNING_SECRET, token=SLACK_BOT_TOKEN,process_before_response=True)
@app.message("hello")
def message_hello(message, say):
say(f"Hey there <@{message['user']}>!")
# ---- flaskアプリ -----------------------------
from flask import Flask, request
from slack_bolt.adapter.flask import SlackRequestHandler
flask_app = Flask(__name__)
slack_handler = SlackRequestHandler(app)
@flask_app.route("/slack/events", methods=["POST"])
def slack_events():
return slack_handler.handle(request)
# ---- Lambda向けハンドラー -----------------------
import awsgi
def handler(event, context):
return awsgi.response(flask_app, event, context)
# 最後に
今回初投稿でした!
これからは定期的に投稿できるようにがんばりますー😆
ブログもやってます!
今回の記事でもうちょっと細かい説明を!という方がいましたらブログの方をみてみてください😆もうちょい詳しいです
また今回とはちょっと違いますがソースコードはこのへんにありますー
ではでは〜