はじめに
Lambda を使って新しいサービスを使ってみたり、既存のサービスをちょっと試したいときに Lambda コンソールで実装をすることがあると思います。
しかし、Lambda コンソールで提供されている AWS SDK 実行環境は最新とは限らないため、そのままでは新しいサービスを使えないときがあります。ここでは、そのようなときに Lambda レイヤーをつかって Lambda コンソールの AWS SDK を最新にする方法を紹介します。
事前準備
作業の途中で Docker を利用するので作業環境には Docker をインストールしておいてください。
Lambda 関数を用意する
現在と更新後の AWS SDK のバージョンを確認するために Lambda 関数を用意しておきます。
- Lambda コンソールを開き、"関数の作成" をクリックします。
- [関数名] に
my-new-sdk-function
、[ランタイム] にNode.js 12.x
と入力し、他はデフォルト設定で "関数の作成" をクリックします。 - できあがった my-new-sdk-function のコードを AWS SDK のバージョンを出力するようにします。関数コードペインでコードを以下のように変更します。変更後は "Deploy" をクリックしておきましょう。
+ const AWS = require('aws-sdk')
exports.handler = async (event) => {
- // TODO implement
- const response = {
- statusCode: 200,
- body: JSON.stringify('Hello from Lambda!'),
- };
- return response;
+ return AWS.VERSION;
};
現在の AWS SDK のバージョンを確認する
イベントを用意して、用意した Lambda 関数を呼び出します。
- Lambda コンソールの右上にある "テスト" をクリックします。
- "イベント名" に
MyNewSdkEvent
と名付け、他はデフォルトのまま "作成" をクリックします。 - もう一度 "テスト" をクリックすると先ほど作成した Lambda 関数が実行されます。実行結果が関数コードペインに表示されます。執筆時点では 2.712.0 でした。
最新の AWS SDK バージョンをパッケージ化する
パッケージは Lambda 環境と互換性のあるオペレーティングシステムで作成することが勧められています。my-new-sdk-function を作成したときに選んだランタイム Node.js 12.x のオペレーティングシステム は "Amazon Linux 2" なので Amazon Linux 2 上でパッケージを作ります。
1.まず作業環境で作業ディレクトリを用意します。
mkdir -p my-new-sdk-layer
2.作業ディレクトリに移動します。
cd aws-new-sdk-layer
3.Docker で Amazon Linux 2 を起動します。
docker run \
-it \
--rm \
--name console \
--volume `pwd`:/tmp/my-new-sdk-layer \
--workdir /tmp/my-new-sdk-layer/nodejs \
amazonlinux bash
4.以降の処理で使用するツールをインストールしておきます。
yum install -y tar gzip zip
5.ノードバージョンマネージャー (nvm) をインストールします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
6.コマンドラインで次のように入力して nvm を有効にします。
. ~/.nvm/nvm.sh
7.nvm を使用して Node.js のバージョン 12 をインストールします。Node.js をインストールすると、Node Package Manager (npm) もインストールされます。
nvm install 12
8.AWS SDK の最新バージョンをインストールします。
npm install aws-sdk
9.レイヤーにアップロードする .zip ファイルを作成します。
zip -r ../package.zip ../
10.exit
して Amazon Linux 2 から抜けます。作業ディレクトリに package.zip があると思います。
レイヤーを作成して関数に追加する
- Lambda コンソールのレイヤーページを開き、"レイヤーの作成" をクリックします。
- レイヤー設定で以下の値を入力し、"作成" をクリックします。
- "名前" には
myNewSdkLayer
を入力します。 - [.zip ファイルをアップロード] を選択して、さきほど作成した zip ファイルをアップロードします。
- "互換性のあるランタイム - オプション" では
Node.js 12.x
を選択します。
- レイヤーが作成されたら、Lambda コンソールの関数ページから、my-new-sdk-function を選択します。
- デザイナーペインで、"Layers" を選択します。
- レイヤーペインで、"レイヤーの追加" をクリックし、レイヤーを追加画面で以下の値を設定し、"追加" をクリックします。
- "レイヤーを選択" で
カスタムレイヤー
を選択します。 - "カスタムレイヤー" には先ほど作成した
myNewSdkLayer
を選択します。 - "バージョン" には
1
を選択します。
更新後の AWS SDK のバージョンを確認する
まえに用意した "MyNewSdkEvent" を再度、実行します。Lambda コンソールの右上にある "テスト" をクリックしてください。関数コードペインから実行結果を確認すると更新されたことが確認できると思います。今回は 2.773.0 になりました。
以上になります。