こんにちはエンジニアの sakasai です。
少し前から、休みの日にちょっと遠出したら行った場所の道の駅やサービスエリアでご当地の味噌を買ってくることにはまってます。
今は福島の味噌を使ってます。
味噌汁大好き
・
というわけでみんな大好きAWS SAMの記事です。
先日、AWS LambdaでGraviton2が使えるようになりました。
ということで、以下のブログを投稿しました。
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
では、早速sam initを実行します。
とその前に、
sam initを実行すると対話的にリリースパッケージのタイプやランタイム、作成するアプリケーションのテンプレートなどを選択して、完了するとディレクトリ配下に雛形が作成されますが、今回のバージョンアップでその(対話の)中にアーキテクチャを選ぶ箇所があると思ったら、現状ではそこには無いようです。
ただ作成するときに表示される構成にアーキテクチャがプラスされています。
sam initをそのまま実行すると以下の構成で作成されます。(ランタイムにはPython3.9を選択しています)

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

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

template.yaml
今回のバージョンアップでtemplate.yamlにアーキテクチャを設定する箇所が増えました。
上記作成した2つのアプリケーションを比較すると差分は以下のようになっています。(一部抜粋)

アーキテクチャの指定はFunctionのPropertiesで行うか、
Globalでも設定できるようです。

sam build
通常のsam buildはこれまで同様にLambda Functionのアーキテクチャに関わらず実行できます。
また、アーキテクチャに依存するモジュールをビルドする際のuse-containerオプションを使用した場合も対応したコンテナでビルドが行われるようです。


デプロイされたLambda Functionの確認
出来たアプリケーションをsam deployコマンドでデプロイします。
sam deployに関してはこれまでと変わったところはないようです。
デプロイされたLambda Functionを確認してみます。
関数の設定を開きランタイム設定の箇所を確認します。


というわけで設定したアーキテクチャでLambda Functionが作成されていることを確認できました。
おまけ
template.yamlのGlobalでアーキテクチャを設定し、関数を2つ作ったパターンも試してみました。

デプロイした結果、2つともarm64アーキテクチャで作成されていることが確認できました。
・
マネージメントコンソールからだけでなく、AWS SAMを使った場合もarm64アーキテクチャのLambda Functionが作成できることが確認できました。
普段の開発ではAWS SAMを使いことが多いので、今後は活用していきたいと思います。