[AWS] Serverless FrameworkでLambdaをArm64対応する

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つです。

  1. 古いバージョンのランタイムは未サポート
  2. バイナリが含まれる場合は再度デプロイする
  3. コンテナイメージを利用している場合は再度パッケージ化する

Node.jsの場合そもそもv10以下はサポートが切れています。これから作るのであればv14系を採用するのが良さそうですね。またLambdaは基本的にAmazon Linux2上で動作しておりArm64でもx86でもそこは変わりませんが、CPUが変わるとバイナリは再度作り直す必要が出てきます。

参考ページ