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

Lambdaでaws cli configureを設定できるようにする

AWS_CONFIG_FILE=/tmp/.aws/configを設定した

CloudWatchアラームを一時的に無効化する

AWS CLIで設定する必要がある

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

AWS SAMで作ったLambdaアプリをCircleCIでデプロイする

circleci/aws-serverlessのOrbを使った