Alexaスキルの開発ためにLambdaを使ってまして、LambdaへのデプロイにはApexをつかっています。
LambdaのNode.jsランタイムをアップグレードすべく、1年ぶりぐらいに使おうと思ったら、すっかりと使い方を忘れていたため、Macへの導入手順とつかいかたをまとめておきます。
Apexとは
Apexを使えば、AWSのLambdaファンクションを簡単に構築、デプロイ、管理できるんだ。
的なことが公式のREADMEに書いてあります。
あと同時に、
このソフトウェアは、もはやメンテナンスされてないぜ。あなたの会社がプロジェクトを支援しないのであれば、新しいプロジェクトに選択すべきではないぜ。
的なことも書いてあるので、いまから新規で導入すべきものではないのかもしれません。
僕の場合は乗り掛かった船なので、このまま対岸まで突っ切ろうと思います。
導入方法
すべては公式のREADMEに書いてあることなので、僕がまとめるまでも無いのですが、Macでの作業履歴を一応記載しておきます。
① curlをつかってインストール
curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sudo sh
こちらで、/usr/local/bin 以下に保存されます。
② 最新版にアップデート
apex upgrade
こちらのコマンドで最新版にアップデートできるはずなのですが、なぜか 1.0.0-rc3 にアップデートできません。
なんでだろうと思っていたのですが、しっかりissueになってました。
https://github.com/apex/apex/issues/960github.com
これが No longer maintained たる所以なのかもしれません。しかし 1.0.0-rc2 でも特に問題を感じてないので良しとしましょう。
つかいかた
~/.aws/credentials と ~/.aws/config のdefaultに記載されている情報を使う前提ですすめます。
https://console.aws.amazon.com/iam でユーザーをつくって、
~/.aws/credentialsに、
[default] aws_access_key_id = HOGEHOGE aws_secret_access_key = fugafuga
という形でアクセスキーとシークレットキーを、
~/.aws/configに、
[default] region=piyopiyo
という形でリージョンを記載しておきましょう。
① 初期化
apex init
Project name と Project description を適当に入力しましょう。
この際自動的に、AWSにロールとポリシーが、ローカルにproject.jsonとfunctionsフォルダが作成されます。
functionsフォルダの中身は削除してしまって構いません。
② project.jsonの編集
{ "name": "project_name", "description": "project_description", "memory": 128, "timeout": 5, "role": "project_role", "environment": {}
というような感じで自動生成されている project.json ですが、
{ "name": "project_name", "description": "project_description", "memory": 128, "timeout": 5, "role": "project_role", "environment": {}, "nameTemplate": "{{.Function.Name}}", "handler": "index.handler", "runtime": "nodejs12.x" }
という感じで、 nameTemplate、handler、runtimeを編集しました。
Alexaスキル用の設定です。
ランタイムですが、デフォルトだとnodejs 6.10です。No longer maintained たる所以なのかもしれませんが、これでは困ります。
ランタイムを編集してnodejs 10.xにしてみた報告は上がっていますが、デフォルトのままのほうが良いよみたいなことも書いてあります。
https://github.com/apex/apex/issues/956github.com
僕は思い切って12.xまで上げてみました。
Alexaスキルで確認してみましたが、問題なく動作しているので、よしとしています。
③ 関数のデプロイ
apex deploy
で、関数をデプロイできます。