AWS

AWS SAMでarm64アーキテクチャのLambda Functionを作成する

こんにちはエンジニアの sakasai です。

少し前から、休みの日にちょっと遠出したら行った場所の道の駅やサービスエリアでご当地の味噌を買ってくることにはまってます。

今は福島の味噌を使ってます。

味噌汁大好き

 

というわけでみんな大好きAWS SAMの記事です。

 

先日、AWS LambdaでGraviton2が使えるようになりました。

https://aws.amazon.com/jp/blogs/news/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/

ということで、以下のブログを投稿しました。

AWS SAMも早速対応したバージョンがリリースされたので、今回はAWS SAMを使ってarm64アーキテクチャのLambda Functionを作ってみようと思います。

 

環境は以下になります。

macOS Big Sur バージョン11.6

% sam --version
SAM CLI, version 1.33.0

 

今回はAWS SAMでアーキテクチャの設定をしたLambda Functionを作成することが目的なので、sam initを使ってテンプレートからHello World Exampleをそのまま使おうと思います。

 

sam init

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-init.html

では、早速sam initを実行します。

とその前に、

sam initを実行すると対話的にリリースパッケージのタイプやランタイム、作成するアプリケーションのテンプレートなどを選択して、完了するとディレクトリ配下に雛形が作成されますが、今回のバージョンアップでその(対話の)中にアーキテクチャを選ぶ箇所があると思ったら、現状ではそこには無いようです。

ただ作成するときに表示される構成にアーキテクチャがプラスされています。

sam initをそのまま実行すると以下の構成で作成されます。(ランタイムにはPython3.9を選択しています)

sam initでアーキテクチャにarm64を選択するにはコマンドのオプションで指定する必要があります。

sam init --help

a(architecture)オプションをつけてarm64を指定して実行した場合の構成は以下のようになります。

 

template.yaml

今回のバージョンアップでtemplate.yamlにアーキテクチャを設定する箇所が増えました。

上記作成した2つのアプリケーションを比較すると差分は以下のようになっています。(一部抜粋)

アーキテクチャの指定はFunctionのPropertiesで行うか、

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html

Globalでも設定できるようです。

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy-globals.html

 

sam build

通常のsam buildはこれまで同様にLambda Functionのアーキテクチャに関わらず実行できます。

また、アーキテクチャに依存するモジュールをビルドする際のuse-containerオプションを使用した場合も対応したコンテナでビルドが行われるようです。

x86_64
arm64

 

デプロイされたLambda Functionの確認

出来たアプリケーションをsam deployコマンドでデプロイします。

sam deployに関してはこれまでと変わったところはないようです。

デプロイされたLambda Functionを確認してみます。

関数の設定を開きランタイム設定の箇所を確認します。

x86_64
arm64

というわけで設定したアーキテクチャでLambda Functionが作成されていることを確認できました。

 

おまけ

template.yamlのGlobalでアーキテクチャを設定し、関数を2つ作ったパターンも試してみました。

デプロイした結果、2つともarm64アーキテクチャで作成されていることが確認できました。

 

マネージメントコンソールからだけでなく、AWS SAMを使った場合もarm64アーキテクチャのLambda Functionが作成できることが確認できました。

普段の開発ではAWS SAMを使いことが多いので、今後は活用していきたいと思います。


Recruit

ディーメイクでは各ポジションで一緒に働く仲間を募集中! エンジニア、デザイナー、ディレクターなど、多彩な職種があります。
一緒に成長していきましょう!

最新記事

おすすめ記事リンク

-AWS
-,