【LINE】Notify APIからMessaging APIへ移行する②

こんにちは。

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

投稿者プロフィール

KatoShingo
学んだことをアウトプットしていきます!
好きなこと:音楽鑑賞🎵 / ドライブ🚗 / サウナ🧖

関連記事

  1. 【LINE】Notify APIからMessaging APIへ移行す…

最近の記事

  1. raspberrypi

制作実績一覧

  1. Checkeys