みかづきブログ・カスタム

基本的にはちょちょいのほいです。

ApexをつかってLambdaファンクションをデプロイする 🖥

apex

github.com

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になってました。

github.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にしてみた報告は上がっていますが、デフォルトのままのほうが良いよみたいなことも書いてあります。

github.com

僕は思い切って12.xまで上げてみました。
Alexaスキルで確認してみましたが、問題なく動作しています。