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

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

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

CDK aws-lambda-nodejsのビルド時間を短縮する

Parcel v2.0.0-beta.1を使ってローカルでバンドルする

CloudWatch Eventsで日本時刻(JST)の月初に実行したい

Lオプションの存在を知った

AWS SAMで環境変数を扱う

template.yamlではParametersの定義のみをしておいて、deploy時に値を設定するようにすればできた