node.jsでlambdaのアプリを作っているのですが、コードやパッケージが増えてくるとインライン編集出来なくなったり、zipでアップロードする必要が出てきます。ちょっとした変更でもわざわざawsのサイトに行ってアップロードするのは面倒ですし、複数のlambdaアプリを作っていたら間違えて別の関数にアップロードしてしまった、といった事故も起きるかもしれません。そこで、コンソールからコマンドでアップロードできるようにする方法を書きます。
※動作確認環境: macOS 10.14.6
aws CLIの設定
まずawsのCLIをインストールします。バージョンが出ればOKです。
$ brew install python3
$ pip3 install aws
$ aws --version
次にawsのユーザー情報を設定する必要がありますが、アクセスキーが必要になります。IAMでAdministratorAccessポリシーを持ったユーザーを作成しておきます。
https://blog-asnpce.com/technology/313
アクセスキー、シークレットアクセスキー、リージョンをaws configure
で設定します。
$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: // 設定せずそのままEnter
これでコンソールからawsのcliを使用するときに自分のアカウントを操作することができるようになりました。
package.jsonの編集
package.jsonを編集し、lambdaアプリのディレクトリでnpm run deploy
を実行するとアップロード出来るようにします。
package.jsonのscripts内にdeployというプロパティ名でコマンドをセットします。セットするコマンドは以下です。このコマンドを実行することにより、package.jsonが入っているディレクトリをzipに圧縮してからCLIでアップロード出来ます。
{}内はご自身のlambdaアプリに合わせてください。zipのファイル名はなんでもいいです。
zip -r {zipファイルの名前}.zip ./ -x \"*.zip\" && aws lambda update-function-code --function-name {lambda関数の名前} --zip-file fileb://{zipファイルの名前}.zip
{"name":"prodfunc","version":"1.0.0","engines":{"node":">=12.0.0"},"description":"","main":"index.js","scripts":{//ここに追加"deploy":"zip -r prodfunc.zip ./ -x \"*.zip\"&& aws lambda update-function-code --function-name prodfunc --zip-file fileb://prodfunc.zip"},"author":"","license":"ISC","dependencies":{//略}}
コンソールで以下を実行し、エラーが出なければ成功です。
$ npm run deploy
参考
https://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html