0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SAM+Lambda+コンテナデプロイ+Arm64アーキテクチャでハマった

Posted at

AWS SAMでLambdaを構築するときにハマった話

↓私のやろうとしていたことに当てはまる人です
  • AWS SAMを使ってLambda構築を予定している人
  • Dockerfileを使ってコンテナデプロイを予定している人
  • Lambdaに大容量コード群をアップロードしたい人
  • ARM64アーキテクチャのLambda環境を構築する予定のある人

構成

  • M2 Mac(後述します。こいつが一番悪さをしていました)
  • Docker(筆者は諸事情でLima上に構築しています)
  • Python(Lambda環境)
  • AWS SAM

経緯

  1. pythonパッケージをLambdaに構築する必要が出た
    (筆者はopencv、処理速度向上や料金的にarmアーキテクチャで構築したかった)
  2. layer化するにはサイズ上限250MBをオーバーすることが判明
    モデルファイル、パッケージ含め500MBと大幅オーバー。
  3. ローカルからLambda環境をコンテナ化してアップロードしよう!
     → ここでハマりました

Lambda環境を構築する際、パッケージの用意に困る方が多いと思います。
公開済みのLayerで対応できることが一番よいのですが、
パッケージを多様していたり自前でLayer作成することになると
「Lambda環境にパッケージってどうやって環境構築するんだ・・・?」
となり先駆者の方々を参考にpython環境をzip化しようと苦戦していました。

そんなときに見つけた、AWS SAMでコンテナイメージを作成してアップロードする方法にて
パッケージ他丸ごとあげちゃお〜!!と思ったら解決まで5日かかりましたね・・・

結局どこでハマったか

ハマりポイント①

「Dockerfileでpullするイメージのアーキテクチャが開発環境のM2 Macに合っていなかった」

以下、From ~ でECRイメージを記載する際、M2 Macなのでarm64アーキテクチャを指定する必要があります。
※ここではpython3.9-arm64を選択する必要があった。

Dockerfile
From public.ecr.aws/lambda/python:3.9-arm64

COPY app.py "モデルファイルやらなんやら" requirements.txt ./

RUN yum install -y "入れたいもの"
RUN pip install -r requirements.txt -t .

CMD ["app.lambda_handler"]

詳しく調べられていませんが、試した組み合わせ的にはarmアーキテクチャのPCでコンテナイメージをpullする際はコンテナイメージ自体のアーキテクチャもarmを選択する必要があるようです。
x86_64の場合は指定不要。後述のlambda設定でarmアーキテクチャを指定しましょう。

ハマりポイント②

「template.yamlでアーキテクチャをarm64指定する必要があった」

sam initで生成されたsamプロジェクト内にtemplate.yamlが含まれていますが、Lambda環境をarmアーキテクチャで構築する際はlambda設定も合わせましょう。

template.yaml
      Architectures:
          # - x86_64 コメントアウト
          - arm64

AWS CLIの準備〜初期状態のディレクトリ構造等は以下の記事を参考にしております。

普段はqiitaを漁る側なのですが、Dockerfileでイメージ指定する際にarm選択されている方を見つけられず
M1/M2 Mac環境で構築される方も増えてきそうだなと思い記事投稿しました。

GitHub上でも私と同じ問題で迷宮入り(笑)になっているケースも見かけたので、
本記事を見て解決の助けになれたら嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?