AWS Lambdaが2021年9月29日からArm64に対応しました。 デフォルトではx86…要はIntelのCPUが使われていますが、Arm64を選択するだけで20%のコストダウン、最大19%のパフォーマンスの向上が期待できるとか!乗るしかない!このビッグウェーブに!
設定方法
Serverless Frameworkを利用している場合は、YAMLに1行追加するだけです。
# 全体に適用する provider: architecture: arm64 # デフォルトはx86_64 # 個別の関数にだけ適用する functions: hello: architecture: arm64 # デフォルトはx86_64
このファイルをデプロイすると
$ sls deploy
Lambdaの関数を確認すると「アーキテクチャ」の項目でarm64が選択されているのが確認できます。ServerlessFrameworkを使わない場合はここで「編集」ボタンをクリックし直接変更できます。
注意点
Serverless frameworkの制約
バージョン v2.61.0 から「architecture」に対応しています。
2.61.0 (2021-10-04) Features AWS Lambda: Support 64-bit ARM architecture (#10049) (fe655d4) (Mariusz Nowak) https://github.com/serverless/serverless/releases/tag/v2.61.0
もし古いバージョンを利用している場合は最新版にアップデートしてください。なおグローバルに入れた物よりも、node_modulesに入っている物が優先されます。これに気が付かず数時間奪われましたw
$ npm install -g serverless
ちなみに古いバージョン(v2.60以下)で実行すると以下のようなメッセージが表示されます。
Serverless: Configuration warning at 'provider': unrecognized property 'architecture'
ランタイムの制約
AWS Lambda側の注意点は3つです。
- 古いバージョンのランタイムは未サポート
- バイナリが含まれる場合は再度デプロイする
- コンテナイメージを利用している場合は再度パッケージ化する
Node.jsの場合そもそもv10以下はサポートが切れています。これから作るのであればv14系を採用するのが良さそうですね。またLambdaは基本的にAmazon Linux2上で動作しておりArm64でもx86でもそこは変わりませんが、CPUが変わるとバイナリは再度作り直す必要が出てきます。