[過去記事]AWS lambda Node.jsの追加モジュールを使って他のAPIを実行してみる（requestモジュール使用 現在は非推奨）

## 今回つくるもの

![private__Online_Whiteboard_for_Visual_Collaboration-2-1024x388.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/c1ae4144-f89e-c20a-4b13-279dddc59d70.png)

今回は前回の内容と似ていて、lambdaを用いてQiitaのユーザー情報APIを実行しレスポンスをconsole.logで出力してみようと思います！ただし！今回APIリクエストを実行する際は既存のhttpsモジュールではなく、requestモジュールを使って見ようと思います！

## 前提

今回の作業は前回と同様にAWSアカウントを持っていることを前提とします。さらにlambda関数作成権限とIAMロール作成権限が必要です。

今回requestモジュールのインストールはローカルのPCを用いて作成します。ローカルPCでnpmコマンドが実行できるようにしておいてください。また、ローカルのNode.jsのバージョンは18.xに設定しておいてください。
筆者は下記の方法でMacのローカルにNode.jsを入れ、nodebrewを用いて18.xに設定しています。

https://qiita.com/miriwo/items/73d1546220f1c091a7d5

## 準備

### lambda

前回の記事と同じ様に新しくlambda関数を作成します！

AWSにログインしコンソールからlambdaのホームまで移動しましょう。左サイドバーの「関数」をクリックし「関数の作成」をクリックしましょう。

遷移先ページで下記の様に設定をします。

関数の種類：一から作成
関数名：getQiitaUserForRequest
ランタイム：Node.js 18.x
アーキテクチャ：x86_64
実行ロール：基本的なLambdaアクセス権限で新しいロールを作成
詳細設定：特に設定しない。

設定内容を確認し「関数の作成」をクリックしましょう。

遷移先ページで「Test」をクリックし下記の様に設定をします。

イベントアクションをテスト：新しいイベントを作成
イベント名：test
イベント共有の設定：プライベート
テンプレート - オプション：hello-world

設定内容を確認し「保存」をクリックしましょう。

コードソースの「index.mjs」をクリックして開き、表示されたindex.mjsの内容を一旦削除し下記のコードを記載します。

```index.mjs
import request from 'request';
const url = 'https://qiita.com/api/v2/users/miriwo';

const method = 'GET';
const options = {
    url: url,
    method: method,
};

export const handler = (event) => {
    request(options, function (error, response, body) {
        console.log(body);
    });  
};
```

「cmd」+「s」でindex.mjsを上書きし「Deploy」をクリックして反映しましょう。

### 追加モジュールの準備

ここからはローカルPCを使って追加モジュールのインストールを行ってゆきます。

まずはターミナルで任意のディレクトリに移動しましょう！

下記コマンドを実行してnodeのバージョンが18.xになっていることを確認しましょう。

```
node -v
```

下記コマンドを実行して「nodejs」というディレクトリを作成します。

```
mkdir nodejs
```

下記コマンドを実行して作成した「nodejs」ディレクトリに移動します。

```
cd nodejs
```

下記コマンドを実行してモジュールインストールの準備をします。（対話形式の初期化設定はEnter連打で大丈夫です！）

```
$ npm init
package name: (nodejs) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
```

下記コマンドを実行してrequestモジュールをインストールします。

```
npm install request
```

インストールが完了したら下記コマンドを実行してnodejsディレクトリの一階層上に移動します。

```
cd ../
```

下記コマンドを実行してnodejsディレクトリをzip化します。

```
zip -r nodejs.zip nodejs/
```

### レイヤーの作成

次は先に作成したnodejs.zipを使ってレイヤーを作成します。

AWSにログインしコンソールからlambdaのホームまで移動しましょう。左サイドバーの「レイヤー」をクリックします。

![Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/2bcbbe6c-b1bb-13e1-e94f-f042c6778c70.png)

「レイヤーの作成」をクリックしましょう。

![レイヤー_-_Lambda-1024x255.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/8ae1f1c0-2cfb-0352-951c-81bb3411e194.png)

遷移先ページで下記の様に設定をします。

名前：getQiitaUserForRequestLayer
アップロード方法：.zipファイルをアップロード
互換性のあるアーキテクチャ - オプション：x86_64
互換性のあるランタイム - オプション：Node.js 18.x

上記の設定が完了したら「アップロード」をクリックして、先に作成したnodejs.zipをアップロードしましょう。

内容を確認し、問題なければ「作成」をクリックしましょう。

![レイヤーの作成_-_Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/eb10fafe-b3ce-fc96-4ddb-0a637132b137.png)

### レイヤーの設定

getQiitaUserForRequestのlambda関数のページに移動しましょう。

「関数の概要」の「Layers」をクリックしましょう。

![getQiitaUserForRequest_-_Lambda-1-1024x610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/1a6cca38-47e4-c767-534c-900ece811c3d.png)

「レイヤー」の「レイヤーの追加」をクリックしましょう。

![getQiitaUserForRequest_-_Lambda-2-1024x712.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/6c895caa-01a8-6d1a-3268-20825818e866.png)

遷移先のページで下記の様に設定します。

レイヤーソース：カスタムレイヤー
カスタムレイヤー：getQiitaUserForRequestLayer
バージョン：1

内容を確認して「追加」をクリックします。

![レイヤーを追加_-_Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/53d75d6c-cd33-476e-923e-c6f30aad7a50.png)

## 実行

さてさて！準備は整いました！早速実行してみましょう！

「Test」をクリックしてコードを動かします。

Execution resultタブに結果が出力され、レスポンスがしっかりconsole.logで出力できている事が分かります！
これで追加モジュールを用いてリクエストが送れたことが分かりました！

![getQiitaUserForRequest_-_Lambda-3-1024x299.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/a8314e82-822d-1a19-192e-64161029b42c.png)

## まとめ

lambdaで追加のオブジェクトを使おうとする時、オブジェクトをローカルでインストールし、zip化してレイヤーに登録する必要があることが分かりました！zip化する時のディレクトリ名やディレクトリ構造などはしっかり見られているため本記事とおなじものにする必要がありますのでご注意ください！

## 参考文献

https://qiita.com/miriwo/items/73d1546220f1c091a7d5

https://qiita.com/miriwo/items/c1727868d9225f4e4c4a