0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Lambda関数で「AWS-SDK」をローカル環境でのみ読み込み、本番デプロイでは除外する方法

Last updated at Posted at 2021-04-05

結論

こうすればいい

cd ~
# グローバルパッケージのインストール先確認
npm root -g
# グローバルインストール
npm install -g aws-sdk
# グローバルパッケージが本当にインストールされたかを確認する
npm list -g --depth=0
# ローカルパッケージとして読み込みたいプロジェクトディレクトリに移動する
cd ~/environment/myLambdaProjectName
# グローバルパッケージとローカルパッケージのシンボリックリンクを作成する
npm link aws-sdk
# ローカルパッケージとして読み込まれているかを確認する
npm list --depth=0

あとはこれをZIPファイルにまとめてデプロイするなり、なんなりと

何がしたいか

私が開発したあるプロジェクトは、DynamoDBからレコードを取り出して、
RdsDBにINSERTするという行為をLambda関数で実現するというものでした。

本番環境のLambdaは最初からAWS-SDKパッケージが用意されているので、
ローカルパッケージとしてZIPファイルに含める必要はありません。ファイルサイズが増えるだけです。

しかし、ローカル環境(Cloud9)にAWS-SDKパッケージがないので、
今までは npm install aws-sdk して毎回AWS-SDKをローカルインストールして、
本番デプロイ前に手動でaws-sdkディレクトリを削除するという何ともアレな運用をしていました。

何か、ローカル環境だけAWS-SDKを読み込ませて、
本番デプロイ時は手動削除しないで良い方法を探したら、上の方法を見つけた次第です。

他に良い方法をご存じの方がいましたら、教えてください。

追記

Cloud9環境で、ローカルからLambdaにデプロイする場合は、次の手順で行います

cd ~/environment/myLambdaProjectName
zip --symlinks -r hoge.zip .

左サイドバー > AWS > AWS: Explorer > Asia Pacific (Tokyo) > Lambda > {myFunctionName}

アップロードしたいLambda関数名を右クリック、Upload Lambda > ZIP Archiveを選択、
先ほどZIP圧縮したファイルを選択して、OKボタンを押すと、デプロイできます

うまくいけば、画面右上にちっさく Successfully uploaded Lambda function {myFunctionName} が表示されます

本当にAWS-SDKが除外されてアップロードされているかは、以下の手順で確認できます

  1. Lambdaコンソール画面に移動

  1. Lambda > 関数 > {myFunctionName} に移動

  2. 画面右上、アクション > 関数のエクスポート > デプロイパッケージのダウンロード

  3. ダウンロードしたZIPファイルを開き、node_modulesディレクトリ内にaws-sdkディレクトリがないことを確認する

Upload Lambda > Directory を使うことでもデプロイはできますが、
そちらはシンボリックリンクを辿って、
実ファイルを含んだ状態でアップロードしてしまうので、
ファイルサイズを抑えることができません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?