柴犬 API からデータを取得して画像 URL から画像を取得する Lambda (Node.js v16.x + index.js)をつくるメモ

柴犬 API からデータを取得して画像 URL から画像を取得する Lambda (Node.js v16.x + index.js)をつくるメモです。

バージョン情報とか条件

  • Windows 10 環境で作業
  • 手元の環境 Node.js v16.18.1
  • Lambda のランタイムバージョン Node.js 16.x
  • HTTP リクエストは単純な OK のみで、内部で柴犬 API からデータを取得して画像 URL から画像を取得

柴犬 API

shibe.online – the shiba inu api

使う柴犬 APIはこちらです。

https://shibe.online/api/shibes でアクセスすると、

[
  "https://cdn.shibe.online/shibes/9c8278e20288fcb33eaa70c2b45f01d1e379bcc9.jpg"
]

といった形で、配列に 1 つ柴犬が入った形で画像 URL が入ってきます。

Lambda をつくる

image

Lambda の関数の作成です。

  • 関数名
    • 今回は blog-sample-shiba-inu-api-get-node-v16 にしました
  • ランタイム
    • Node.js 16.x
  • アーキテクチャ
    • x86_64

image

関数の作成ボタンをクリックします。

image

できあがりました。

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

index.js でファイルが作成されています。これを調整していきます。

関数のエクスポートをして axios を使えるようにする

axios を使うために、関数のエクスポートをしたものに手元で axios を加えてインポートして使えるようにします。

image

関数の概要画面で アクション > 関数のエクスポート をクリックします。

image

デプロイパッケージのダウンロードをクリックします。

image

デスクトップに ZIP ファイルをダウンロードしたので解凍します。ダウンロードできたら閉じるをクリックします。

image

index.js ファイルだけあるフォルダが展開されました。

[]
npm init -y
[/]

そのフォルダで npm プロジェクトフォルダとして初期化します。

[]
npm i axios
[/]

axios をインストールします。

image

このように準備ができました。このファイル群を選択して ZIP 圧縮します。

image

index.zip として保存できました。

関数のインポート

image

関数の概要ページでアップロード元というボタンをクリックして .zip ファイルをクリックします。

image

アップロードをクリックして先ほどの index.zip を選択して、保存ボタンをクリックします。

image

このようにコードソースのファイルリストに node_modules や package.json が追加されます。

プログラムの反映

コードソースの index.js をすべて選択して、以下のプログラムを貼り付けます。完全上書きということです。

const AWS = require('aws-sdk');
const axios = require('axios');

exports.handler = async (event) => {
  // 柴犬 API へのアクセス
  const configShibaAPI = {
    url:'https://shibe.online/api/shibes',
    method:'get'
  }
  //// 柴犬 API にアクセス ////
  const responseShibaAPI = await axios.request(configShibaAPI);
  
  // 画像の URL リストの 0 番目から実際の URL を取得
  const urlSAhibaImage = responseShibaAPI.data[0];
  
  console.log('Shiba API Access OK!');
  console.log(urlSAhibaImage);
  
  //// 画像を取得 ////
  const configGetImage = {
    url:urlSAhibaImage,
    responseType:'arraybuffer'
  }
  const responseGetImage = await axios.request(configGetImage);
  
  const data = responseGetImage.data;
  
  console.log('Shiba API GetImage OK!');
  
  // 結果
  return {
    statusCode: 200,
    body: JSON.stringify({
      result: 'OK'
    }),
  };
};

反映できたら、

image

Deploy ボタンをクリックしてデプロイします。

テストしてみる

image

Test ボタンをクリックします。

image

イベント名を Test と仮に設定して保存ボタンをクリックします。

Test ボタンをクリックしてテストしてみます。

image

待っていると、このように Shiba API Access OK! や Shiba API GetImage OK! が出てきて無事動作しました。