【とりあえずハンズオン】LINE×AWS LINE Notifyに触ってみよう

# LINE Notify に QiitaのRSSを流してみよう！！！

## はじめに

この記事では
AWS のサービスと LINE Notify 連携させて
Qiita の RSS を返してくれる LINE bot を作成するハンズオンです。

ベストプラクティスや間違いがあれば書き直していく予定です。

今回は前回の Bot の製作でお世話になりました
[LINE Developers Community](https://linedevelopercommunity.connpass.com/)
協力の元、ハンズオンを作成しております。
ご協力ありがとうございます。

ご興味のある方はぜひ、お気軽にご参加ください！！！

## 解説動画

記事の解説動画です。

<iframe width="560" height="400" src="https://www.youtube.com/embed/dB43AOW9WFE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## 開発環境

- Visual Studio Code
- Surface Book(初代)

  - 実装 RAM 8GB

- エディション Windows 10 Pro
- バージョン 20H2
- OS ビルド 19042.867

- Node.js 14.x
  - [インストール方法 - Windowws](https://qiita.com/echolimitless/items/83f8658cf855de04b9ce)
  - [インストール方法 - MacOS](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)

## 今回扱うサービス

AWS 側
AWS Lambda
AWS API Gateway
AWS IAM
AWS CloudWatch
AWS S3

LINE 側
LINE Notify

## おことわり

今回は外部に漏らしてはいけない重要な情報を扱います。
LINE Notify で言うと

- access_token(アクセストークン)

  AWS 側では

- アカウント ID および IAM ユーザ名

また、これらに加えて IAM ユーザおよび IAM ロールは
**最小権限の原則**を守ってアカウントを運用しましょう。

## 今回利用するサービスの説明

### Lambda

AWS の中ではコンピューティングリソースを提供してくれるサーバレスサービスの代表例
後述の API Gateway と組み合わせることで Web API として利用できるサービス

### API Gateway

API を構築、公開できるフルマネージド型のサービス
フルマネージドというのはざっくりいうと、運用管理などを気にせず、裏側で良しなにやってくれる形態のこと

今回の構成に組み込むことで
LINE Notify を AWS が提供する API として成立させる役割がありますが
この記事のハンズオンでは主に利用しません。

LINE NotifyをWebサービスに連携させたい方向けに手順を掲載しております。

### IAM

AWS Identity and Access Management の略
AWS サービスのアクセス管理に利用するサービス

今回は Lambda を作成する際に デフォルトのIAM ロールが発行されます。
ハンズオンの片付けの際に削除します。

### Cloud Watch

AWS のサービスおよびリソースを監視するサービス
監視した内容は S3 に保存される。

今回は Lambda を定期実行する為に EventBridge(CloudWatch Events)を利用する。

### S3

AWS のオブジェクトストレージサービス
ここでは具体的に述べませんが過去に記事を作成していますので
わからない方はこちらをご覧ください。

[【AWS】用語を整理しながら学ぶ AWS - part7 Simple Storage Service](https://qiita.com/ymd65536/items/14ba426bca4eae3dc249)

今回は bot の動作に直接関係はないですが、Cloud Watch のログを保存する先に指定されています。
(※エラー発生時には参照することになるので解説）

## LINE Notify

### LINE Notify とは

ざっくり言うと LINE アプリに通知を行うためのサービス

具体的な解説はこちら。(KMiuraさん、わかりやすい解説ありがとうございます！！！)

<script async class="speakerdeck-embed" data-id="704ea41e85ec4cdda0f9b28383197b24" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

**ちなみにこれは私の知っているLINE Notifyの活用事例ですが
転職サービスの Findy では求職者が採用企業様にいいねをされると
連携済みの LINE アカウントに対して LINE に通知が届くようになっています。**

今回はそんな LINE Notify を活用して Qiita の RSS を LINE に通知してみたいと思います。

## 今回のインフラ構成図

AWS で利用するサービスと LINE とのつながりを明確に構成図にするとこんな感じになります。

![aws_rss_infra.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/a29fb5b7-bd5e-9620-5a41-17274351f8c2.png)

## 事前準備

### LINE Notify 用スクリプトの作成

Node.js を利用します。
ソースコードは[@K1-Style](https://github.com/K1-Style/line-notify-node)さんにあるソースコードを利用しています。

今回ソースコードは GitHub にアップロードしています。(クリックすると別タブで GitHub を開きます。)

ローカルテスト用
https://github.com/ymd65536/line_notify_local_test

AWS テスト用
https://github.com/ymd65536/line_rss_aws_test

### LINE アプリの設定

### グループを作成

他のサービスで LINE Notify をすでに利用している場合は他の通知と混ざる可能性がある為
LINE Notify とのやり取りはグループで作成する。

グループ名は「 Qiita RSS 用 」
モバイルアプリの LINE から友達を追加する。

追加するアカウント名は「LINE Notify」

### LINE Notify にログイン

LINE Notify のマイページにログインして LINE Notify を設定する。

LINE Notify にログインしてマイページを開く。

https://notify-bot.line.me/ja/

トップページの右上にログインリンクがあるのでクリック

![line_notify_login.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/75b20dd5-4b4f-def9-19b8-91b2b69d2f81.jpeg)

LINE アカウントのユーザ名とパスワードを入力してログイン

![login_form.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/6d0727c0-d672-174a-ff1b-3d01033956ab.jpeg)

ログイン成功後は画面右上にある名前の横にプルダウンがありますので
プルダウンをクリックしてメニューを展開

![notify_menu.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/09ba0477-55a2-7fbf-a5e6-ca42023cab8d.jpeg)

メニューからマイページを開く

### アクセストークンを発行

マイページから今回必要なアクセストークンを発行する。

![access_token.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/a2d609e9-ef53-580c-575f-4ad9068799ad.jpeg)

トークン名：QiitaRSS
利用するルーム名は「 Qiita RSS 用 」

![access_token_get.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/7f0784da-4f68-b732-9b34-0f578ffc45b2.jpeg)

**※アクセストークンの発行は一度だけ行われます。この画面を閉じてしまった場合は**
**アクセストークンを確認することができませんので同じ操作が必要になります。**

ここでコピーしたアクセストークンはこの後の環境変数で利用しますので
いつでも使えるようにテキストファイルに一時保存してください。

## ローカル

### ローカル PC と LINE Notify を連携

今回は PC にインストールした Node.js で
動作確認=>AWS に反映という形で進めていきます。

Lambda 上で実行する前に手元の PC でリポジトリにあるファイルが実行できるかを確認します。
準備した LINE Notify 用スクリプトのあるディレクトリにコマンドラインで移動
以下のコマンドを実行

```bash
# Node.jsがインストールされているかどうかの確認
$ node -v
v14.16.1
# GitHubからクローン
$ git clone https://github.com/ymd65536/line_notify_local_test.git
$ cd line_notify_local_test
# package.jsonを参照してパッケージインストール
$ npm install
```

エラーなくインストールできましたら
環境変数に LINE Notify のアクセストークンをセット
環境変数名は `LINE_NOTIFY_ACCESS_TOKEN` とし.env ファイルで定義します。

```bash
# 環境設定ファイルを作成
$ cp .env.sample .env
```

発行したアクセストークンを.env ファイルに定義

```
LINE_NOTIFY_ACCESS_TOKEN=発行したアクセストークン
```

環境変数をセット後は以下のコマンドを実行

```bash
node index_local.js
```

![index_local.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/55cae9cc-641d-603a-efce-ff770f9052b6.png)

### ローカル PC のコンソール に RSS の取得結果を出力

次にローカル PC で RSS 情報が取得できるかを確認します。
Qiita の RSS はコントリビューション数や連携アカウントと一緒に波マークで
リンクが存在します。
書式としましては以下のようになります。

```
https://qiita.com/QiitaアカウントID/feed
```

line_notify_local_testのディレクトリに移動して RSS を取得する feed.js を実行

```bash
node feed.js
```

スクリプトの動き
RSS の Feed を axios によるリクエストで取得
xml2.js で XML をパースして
変数 feed_result に記事執筆者を表すタイトルと直近 5 つの記事のタイトルを保存します。

※feedparser という RSS feed をパースしてくれるパッケージがありますが、Lambda では動作しないことを確認している為、xml2.js を選定しました。

※http リクエストを送信できるパッケージで request がありますが、2021 年 9 月現在では非推奨となる為、axios を選定しました。

実行結果(コマンドライン)

> ==== ymd65536 の記事 - Qiita ====
> 【AWS】LINE bot RSS 受信用 Terraform
> UiPath は使いよう
> 【とりあえずハンズオン】Amazon SageMaker で PCR の検査人数を分析してみた
> 【小ネタ】Windows 環境で go get がプロキシの関係で入らないとき
> 【とりあえずハンズオン】AWS×LINE で実践！AWS 利用料返信 Bot をつくろう

問題無く実行できましたら次へ

### ローカル PC で LINE Notify に RSS の結果を出力する

次に index_feed_local.js を実行して
RSS を LINE Notify に出力することができるかどうかを確認します。

```bash
node index_feed_local.js
```

実行結果(LINE)

![index_aws_rss_feed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/94d4909a-ef36-d1ae-26b0-321d35ee0b0f.png)


実行結果(コンソール)

> ====ymd65536 の記事 - Qiita====
> 【AWS】LINE bot RSS 受信用 Terraform
> UiPath は使いよう
> 【とりあえずハンズオン】Amazon SageMaker で PCR の検査人数を分析してみた
> 【小ネタ】Windows 環境で go get がプロキシの関係で入らないとき
> 【とりあえずハンズオン】AWS×LINE で実践！AWS 利用料返信 Bot をつくろう
> notify message :
> ====ymd65536 の記事 - Qiita====
> 【AWS】LINE bot RSS 受信用 Terraform
> UiPath は使いよう
> 【とりあえずハンズオン】Amazon SageMaker で PCR の検査人数を分析してみた
> 【小ネタ】Windows 環境で go get がプロキシの関係で入らないとき
> 【とりあえずハンズオン】AWS×LINE で実践！AWS 利用料返信 Bot をつくろう
> message=%0A%3D%3D%3D%3Dymd65536%E3%81%AE%E8%A8%98%E4%BA%8B%20-%20Qiita%3D%3D%3D%3D%0A%E3%80%90AWS%E3%80%91LINE%20bot%20RSS%E5%8F%97%E4%BF%A1%E7%94%A8%20Terraform%0AUiPath%E3%81%AF%E4%BD%BF%E3%81%84%E3%82%88%E3%81%86%0A%E3%80%90%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3%E3%80%91Amazon%20SageMaker%E3%81%A7PCR%E3%81%AE%E6%A4%9C%E6%9F%BB%E4%BA%BA%E6%95%B0%E3%82%92%E5%88%86%E6%9E%90%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%0A%E3%80%90%E5%B0%8F%E3%83%8D%E3%82%BF%E3%80%91Windows%E7%92%B0%E5%A2%83%E3%81%A7go%20get%20%E3%81%8C%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%A7%E5%85%A5%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%0A%E3%80%90%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3%E3%80%91AWS%C3%97LINE%E3%81%A7%E5%AE%9F%E8%B7%B5%EF%BC%81AWS%E5%88%A9%E7%94%A8%E6%96%99%E8%BF%94%E4%BF%A1Bot%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8D%E3%81%86
> loading
> { status: 200, message: 'ok' }

## AWS

### Lambda を利用

ひととおりローカル PC で実行できることが確認できましたので
AWS で実行できるようにインフラを構築してみます。

今回のケースでは RSS を取得する為のコンピューティングリソースが必要になりますので
Lambda を利用します。EC2 やコンテナを利用しても同じことができるかもしれませんが

今回作成したスクリプトを Lambda で実行できる用に改修してアップロードしたほうが
圧倒的に楽で何よりも運用コストが抑えられます。

### Lambda 関数を作成

それでは実際に Lambda 関数を作成してみます。

AWS マネジメントコンソールから Lambda のダッシュボードを開きます。
※Lambda のリージョンは東京リージョン(ap-northeast-1)を利用

Lambda のダッシュボードから関数をクリック

![lambda_dashbord.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/1521b17f-6951-2c91-bcb1-539a1cd3edce.jpeg)

関数の作成をクリック

![function.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/ee9ffbde-9721-838a-d88e-79f5c23244b8.jpeg)

「一から作成(シンプルな Hello World の例で開始します。)」を選択

基本的な情報は以下の表のとおりに設定

| 項目                         | 値                                               |
| :--------------------------- | :----------------------------------------------- |
| 関数名                       | line_rss_bot                                     |
| ランタイム                   | Node.js 14.x                                     |
| デフォルトの実行ロールの変更 | 基本的な Lambda アクセス権限で新しいロールを作成 |

詳細設定は以下の表のとおりに設定

| 項目         | 設定内容 |
| :----------- | :------- |
| コードの署名 | 空白     |
| VPC          | 空白     |

関数の作成をクリック

### 環境変数を設定

「設定」項目をクリック後、環境変数をクリック

![env_var.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/48d869ac-5672-f860-e6e5-8122f5d16bbd.jpeg)

| 環境変数名               | 設定する内容     |
| :----------------------- | :--------------- |
| LINE_NOTIFY_ACCESS_TOKEN | アクセストークン |

![env.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/8a7ed75e-90ac-7b27-126d-4ee0dd05478c.jpeg)

### LINE Notify 用スクリプトを zip で圧縮

```bash
$ git clone https://github.com/ymd65536/line_rss_aws_test.git
$ cd line_rss_aws_test
# package.jsonを参照してパッケージインストール
$ npm install
```

準備した LINE Notify 用スクリプトを Lambda にアップロードする為
ディレクトリ内にある特定のフォルダおよび特定のファイルを圧縮します。

具体的には以下のフォルダとファイル

node_modules
index_rss_feed.js
index.js
line.js
package-lock.json
package.json

MacOS の場合

![mac_zip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/6363e82b-d2ed-9da6-d8fa-95e0c171193a.png)

Windows10 の場合

![win_zip.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/cd886bf9-0def-7427-ab79-14779cc537b5.jpeg)

圧縮後は「 line_rss_bot.zip 」として保存する。
ここで圧縮した index.js は index_local.js を Lambda 用に改修したものです。

### Lambda にアップロード

Lambda のコード画面からアップロード元をクリックして
zip ファイルをアップロードします。

![zip_upload.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/ff66333d-319c-f989-59f6-83db929984e4.jpeg)

アップロードでファイルを選択したら「 保存」をクリック

![saved_zip.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/db3bc8ba-6d7a-4c19-4730-342aa71c9e4d.jpeg)

### テストイベントの設定

アップロード完了後に関数のテストイベントを作成します。

Test ボタンからテストを作成
イベントテンプレート名とイベント名はそれぞれ以下のように設定

イベントテンプレート名：hello-world
イベント名：message

また、イベント発生時に渡す JSON を以下のように設定します。

```json
{
  "message": "Hello, Lambda"
}
```

作成をクリック

![test_event.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/0efbc1aa-8eb1-0c0e-cc80-813ff712b700.jpeg)

### テストを実行

「 Test 」をクリックしてテストを実行

画像のように LINE Notify からのデータを受信できていれば OK

※１回の実行で無反応な場合は数回の実行を試してみてください。

![index_lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/eb40c130-ad01-3465-7fa4-01cc38c967e6.png)

### LINE Notify に RSS の結果を出力する - AWS

AWS Lambda を使って Qiita の RSS の結果を LINE Notify に出力します。

Lambda 上のエディタ画面を開いて「index_rss_feed.js」を「 index.js 」に貼り付け
先頭行のコメントアウトと末尾のコメントをはずします。

※以下のコードを貼り付けても同じです。変数 feed にはご自分の RSS URL を代入してください。

```javascript
exports.handler = async (event, context, callback) => {
  const axios = require("axios");
  const xml2js = require("xml2js");
  const Line = require("./line");
  const myLine = new Line();

  var feed = "https://qiita.com/ymd65536/feed";

  axios
    .get(feed)
    .then(
      function (responce) {
        var feed_result = "";

        xml2js.parseString(responce.data, function (err, result) {
          if (err) {
            console.log(err.message);
          } else {
            feed_result = "\n" + "====" + result.feed.title + "====" + "\n";
            feed_result =
              feed_result +
              result.feed.entry[0].title +
              "\n" +
              result.feed.entry[1].title +
              "\n" +
              result.feed.entry[2].title +
              "\n" +
              result.feed.entry[3].title +
              "\n" +
              result.feed.entry[4].title;
            console.log(feed_result);
          }
        });

        // LINE Notify トークンセット
        myLine.setToken(process.env.LINE_NOTIFY_ACCESS_TOKEN);
        // LINE Notify 実行
        myLine.notify(feed_result);
      }.bind(this)
    )
    .catch(
      function (error) {
        console.log(error);
      }.bind(this)
    )
    .finally(
      function () {
        console.log("loading");
      }.bind(this)
    );
};
```

実行結果

![aws_rss_bot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/d60872cb-390c-4654-1e17-a8039b4fdb6e.png)

### CloudWatch Events を設定

Lambda を使って Qiita の RSS を取得できましたので
CloudWatch Events を使って 1 分毎に Lambda を実行してみます。

Lambda の画面から「トリガーを追加」をクリック

追加するトリガーは CloudWatch_EventBridge

![CloudWatch_EventBridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/b9010cd8-5e57-f6c8-2c80-12f1ba49b0c9.png)

以下のように設定

| 項目           | 値                                            |
| :------------- | :-------------------------------------------- |
| ルール         | 新規のルール                                  |
| ルール名       | QiitaRSS                                      |
| ルールの説明   | Qiita から定期的に RSS を取得する。(1 分おき) |
| ルールタイプ   | スケジュール式                                |
| スケジュール式 | cron(*/1 * * * ? *)                           |

### 動作確認

設定が終わりましたらおよそ 1 分後に LINE Notify から通知が届くと思います。
無事に届いたら成功です。

もし、届かない場合はさらにもう 2、3 分待ちましょう。

動作確認できたら、お好みの時間で設定してみましょう。
お好みの時間で設定する場合はこちらのドキュメントを参考にしてください。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-cloudwatchevents-expressions.html

## お片付け

### API Gateway の API URL を削除

**WebHookなどを利用してLINE Notifyと連携したい** でAPI  Gatewayを設定された方のみ必要

API Gateway のダッシュボードを開く。
API 名、「line_rss」を選択してアクションから「削除」または「Delete」をクリック
ダイアログが表示されるので「削除」をクリック

### Lambda 関数の削除

※API Gatewayの設定されていない方はここから片付けを開始してください。

Lambda のダッシュボードを開き、左メニューから関数をクリック。
関数名「line_rss_bot」を選択してアクションから「削除」または「Delete」をクリック
ダイアログが表示されるので「削除」をクリック

### IAM ロールの削除

Lambda 関数作成時にデフォルトのIAMロールも作成されている為
それも削除します。
ロール名、「line_rss_bot-role-XXXXXXX」選択して「削除」または「Delete」をクリック

ちなみにLambdaがデフォルトで作成するIAM ロール名には一定の命名規則があります。
`関数名-role-Lambda関数のID`

### LINE Notify 連携サービスを解除

連携中のサービスを解除する。

LINE Notify のマイページから
From QiitaRSS の解除ボタンをクリック

![line_notify_delete.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/12e9263b-b291-eb35-3674-4798432a8aba.jpeg)

解除するか問われるので「解除」をクリック

![kaijyo.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/4a21f470-b107-d0ba-de4e-5d5e6b878829.jpeg)

## WebHookなどを利用してLINE Notifyと連携したい

### API Gateway を設定 - 参考

**※今回は CloudWatch Events を使う為、API Gateway は利用しませんが、WebHook などで LINE Notify を利用する場合は URL を発行する必要がありますので参考程度に**

Lambda のテストがうまくいきましたら
API Gateway を設定します。

[API Gateway のリンク - リージョンは ap-northeast-1](https://ap-northeast-1.console.aws.amazon.com/apigateway/main/apis?region=ap-northeast-1)

API タイプはプライベートではないほうの REST API で構築します。

![api_gate_way_top.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/b5952e05-7abe-cd1e-7a05-8afaf8894d34.jpeg)

| 項目                 | 設定内容     |
| :------------------- | :----------- |
| プロトコルを選択する | REST         |
| 新しい API の作成    | 新しい API   |
| API 名               | line_rss     |
| 説明                 | Qiita RSS 用 |
| エンドタイプ         | リージョン   |

### リソースの作成

アクションからリソースの作成を選択

![resource_create.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/5ad261cb-eedf-c794-5ff6-841ceb0ace15.jpeg)

リソース名を決めます。
この名前は API の名前になります。わかりやすい名前をつけましょう。
今回は「 rss 」としました。

### メソッドの作成

アクションからメソッドの作成を選択

![method_create.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/e8f901ad-5dd0-365b-1e10-675c04da2d90.jpeg)

メソッドタイプを POST にしましょう。
メソッドの作成を選択した後にチェックボタンを入れる。

![post.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/2a4c9f9f-4b78-e601-faab-b9a52d6be87a.png)

メソッド作成がうまくいくと設定画面が右のフレームに表示されます。

![api_post_method.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/3a7dd45e-2fe3-70f4-92ec-d847ecf4ca3e.jpeg)

| 項目                      | 設定内容                  |
| :------------------------ | :------------------------ |
| 統合タイプ                | Lambda 関数               |
| Lambda プロキシ統合の使用 | チェックをはずす          |
| Lambda リージョン         | ap-northeast-1            |
| Lambda 関数               | line_rss_bot              |
| デフォルトタイムアウト    | チェックをいれたままで OK |

※メソッド作成後、Lambda に IAM ロールを付与するか聞かれますが
OK をクリック問題ないです。

### デプロイ

アクションから「API のデプロイ」を選択

![api_deploy.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/317c71ee-4ef0-b512-8976-a1360573b4e4.jpeg)

設定画面が表示される。
ステージ名とステージの説明を入力する。

右プルダウンから新しいステージをクリック

![api_deploy_stage.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/2cb80b3f-31a1-ae68-d722-5c51ad196c6b.jpeg)

今回はステージ名を「 line 」としました。
※ステージの説明は空白で OK

入力が終わったらデプロイ

### API Gateway から Lambda のテスト

デプロイ完了後は左メニューから「リソース」をクリック

![stage.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/015a3e71-ebbf-746f-4dfd-7464d46c61c5.jpeg)

続いて「 POST 」をクリック

イナズママークのテストをクリックしてテストを作成する。
テストをクリック

![api_test.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/63ebabe4-59a1-b091-7ae7-39906383bc11.jpeg)

クリック後に表示されるリクエスト本文は以下のような JSON を貼り付けてください。
※ウィンドウ下側にあります。スクロールを推奨

```json
{
  "message": "Hello, API Gateway"
}
```

貼り付けましたら、右下のテストをクリック

こちらも 1 回のクリックで表示されない場合がありますので
2、３回テストをクリックしてみてください。

実行結果

![index_api_gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/a0fbdbba-c27a-2788-bf1d-f258363f5e4a.png)

## まとめ

今回のハンズオンではLINE Notifyを利用して
ローカルテスト => AWSに実装という流れを体験できたかと思います。

LINE NotifyとAWSのアカウントがあれば誰でもすぐに実装できる内容になっているかと
思いますので手を動かして何かを作りたいという方にオススメです。

また、LINEという利用人口がとても多いサービスの一端に触れることができますので
そういう意味でもやってみて損はないかと思います。

今回、AWSで利用したサービスは出版が予定されている
「[クラウドエンジニアのロードマップ](https://qiita.com/KurokawaKouhei/items/4e9aa3b526f3f233bf85)」でも紹介されていますので

もし、もっとAWSを学習したいという方がおりましたら
参考にしていただけると幸いに思います。

※2021年9月27日 現在、鋭意執筆中！！

LINE Developers Community および AWS CloudTech共々、宜しくお願いできればと思います。

以上

## おわり