Nodejs12のLambdaでawscliを使う

公開日時
更新日時

Lambdaでs3のファイルを操作する場合に、aws-sdk-jsを使うと1度のAPIリクエストで最大1000件までといった制限があるため複数ファイルのコピーや削除を行いたい場合に実装が複雑になってしまう。

awscli s3 syncを使えばコマンド一発でファイルの同期が出来るのでawscliが使いたい。

ということでNode.js 12.xのLambdaでawscliを使う方法を調べた。

awsのサンプルリポジトリにまさにこれというのがあったのでこちらを利用。

  • Deploy from SAR console」からデプロイしたいリージョンを選択して各自のaws環境にデプロイする
  • Nodejs12で新規のLambda関数を作成する
  • レイヤーの追加で、デプロイしたawscliのarnを追加
  • Lambda関数に「Node10 and Node12 AWS Lambda runtime support」に記載されている環境変数を設定する
    • LD_LIBRARY_PATH
    • PYTHONHOME
    • PYTHONPATH
  • Lambda関数のタイムアウトを10秒、メモリを512MBに変更する(これは用途に応じて要調整)

この状態で↓のコードをデプロイして試すと、

const shell = require('child_process').execSync

exports.handler = () => {
    const version = shell('/opt/awscli/aws --version')
    console.log(version)
}

正しく aws --version の実行結果が返ってくる。

aws-cli/1.18.142 Python/2.7.16 Linux/4.14.193-110.317.amzn2.x86_64 exec-env/AWS_Lambda_nodejs12.x botocore/1.18.1

サンプルリポジトリのおかげで手軽にLambdaからawscliが実行できるようになった。


Related #aws

Step Functionsステートマシンから別のStep Functionsを呼び出す

複雑なステートマシンを小さいステートマシンに分割しておけばテストと確認がやりやすくなる

マネージメントコンソール上のエディタでLambdaのコードを書く際にnpmライブラリを追加したい

ローカルでライブラリをインストールしてからインポートする必要があった

Amazon API Gatewayのタイムアウト設定は最大29秒まで

上限緩和もできないので注意

MFA必須のスイッチロールアカウントでaws cliを使う

switch role用のprofileを追加する

AWSのコスト異常検出を設定する

意図しない課金を防ぐためにとりあえず設定しておくと良さそう