こんにちは。
LINE Notify APIのサービス終了の発表があり、Messaging APIへ移行する続きをやっていきます。
今回は、実際にAWSリソースを作成してAPIとして提供できるようにしていきます。
Messaging APIのもろもろ調査は下記をご覧ください!
1. インフラ構成
自分はケチなので、お金がほぼかからないサーバーレス構成でいきます。
では、やっていきましょう。
※今回扱うのは「AWS Cloud」の中です。LINE Messaging APIの設定は完了している前提で進めます。
また、ACMでSSL証明書を発行していることも前提とします。
2. マネコンでポチポチして構築
最終的にはSAM(IaC)で構築しますが、いきなりコードに起こすのはムズイので、今回はマネジメントコンソールで構築していきます。
インフラ構成図の左から作っていきたいところですが、参照先がないと設定できないモノばかりなので、右から構築していきます。
3. CloudWatchロググループの作成
エラーログを貯める場所です。ロググループだけ作っておきます。
4. SNSトピックとサブスクリプションの作成
「SNS」と聞くとソーシャル・ネットワーキング・サービスよりもAWSの方が先に出てくるようになりました。職業病かなw
トラブったことを知るため、メール通知します。
まずは、トピックを作成します。
次に、サブスクリプションを作成します。
プロトコルはEMAILで、他はそのままで大丈夫です。
サブスクリプションを作成すると、初回の疎通確認が来ます。
Confirm subscriptionを押したらこんな感じ。疎通確認OKです。
5. Lambda関数の作成
このタイミングでは、デフォのすぐreturnするだけのままで大丈夫です。
権限もデフォのままでいいです。他のリソースを作ってから設定していきます。
それにしても、新UIはめっちゃVSCodeですねw
6. API GatewayでAPIを作成
通知できればいいので、特にリソースは要らないかな・・POSTで文章を受け取って、そのままLambdaに渡すだけとします。
Lambdaプロキシ統合にチェックしてPOSTメソッドを作りましょう。プロキシ統合はややこしいことを考えなくてよくて楽です。
ノーガードはさすがにアレなので、APIキーは必須にしておきますか。
次に、カスタムドメインの設定を行います。自分だけかもですが、忘れがちなポイントです。
これがないと、Route53からの紐づけができません。
APIキーと使用量プランも用意しましょう。使用量プランは無制限なので意味を成してないですがw
APIキーに使用量プランを紐づけます。
一通りできたので、APIをデプロイします。
ステージが出来上がり、上部の緑のバーでいい感じのメッセージが出てくれれば成功です。
最後に、カスタムドメインを作成します。
その下のAPIマッピングも忘れずに!
そして使用量プランのステージの関連付けも忘れずに!w
不要かもですが、念のため再度APIをデプロイしておきましょう。
7. Route53でルーティングの定義
最後にRoute53でルーティングを作ります。
8. Lambdaの整備
リソースたちが出揃ったので、Lambdaの整備をしていきます。
8-1. 実行権限
IAMロールはLambda用に作るだけなので割愛しますが、IAMポリシーの中身はこんな感じです。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:DescribeLogStreams",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "(CloudWatchロググループのARN)",
"Effect": "Allow"
},
{
"Action": [
"sns:Publish"
],
"Resource": [
"(SNSトピックのARN)"
],
"Effect": "Allow"
}
]
}
8-2. Lambdaコード
try:
# パラメータから通知文章を受け取る
text = "Notify API卒業!"
url = "https://api.line.me/v2/bot/message/push"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}",
}
json = {"to": {user_id}, "messages": [{"type": "text", "text": text}]}
response = requests.post(url, headers=headers, json=json)
except:
# (ここに来ないことを祈りながら)
# CloudWatchログの記載
# SNSトピックへメッセージを発行
9. 実行
curl -X POST \
-H "Content-Type: application/json" \
-H "X-API-Key: (API Gatewayで生成したキー)"
-d '{"type": "text", "text": "Notify API卒業!"}'
https://(Route53のドメイン)
うぇーい🌞 無事構築できました!
10. これから
今回はAWSリソースたちを準備して、curlで叩けるLINE通知サービスを構築できました。
次回はこの内容をSAMで構築していきます。
11. 参考
https://qiita.com/mshr9/items/30b56021985055d45c09
投稿者プロフィール
-
学んだことをアウトプットしていきます!
好きなこと:音楽鑑賞🎵 / ドライブ🚗 / サウナ🧖
最新の投稿
- 【LINE】2024年11月24日【LINE】Notify APIからMessaging APIへ移行する②
- 【LINE】2024年11月17日【LINE】Notify APIからMessaging APIへ移行する①
- 【RaspberryPi】2024年11月10日【RaspberryPi】一酸化炭素濃度の警報装置を作ってみた①
- 【Next.js】2024年8月10日【Next.js】ローカル環境をSSL化してみる