質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

139閲覧

コンテナイメージからLambda関数を作成できない

neko-punch88

総合スコア1

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2024/10/04 23:17

実現したいこと

LambdaでSeleniumを使うために
Dockerで作成したイメージをもとにLambda関数をデプロイしたく思い、こちらを参考に作業していたのですが、エラーが発生し解決策が見当たらないため、対応法をご教授いただきたいです。
AWS、Dockerともに初学者のため、用語の使い方に誤りがありましたらご指摘いただきたいです。

実行環境

OS Windows 11, version 23H2
Docker version 27.2.0
AWS-CLI aws-cli/2.17.65 Python/3.12.6 Windows/11 exe/AMD64

発生している問題・分からないこと

Seleniumを使う以前にコンテナイメージからLambda関数を作成できないため、
testディレクトリを作成して動作確認をしました。
大まかな流れとしては、
testディレクトリ配下にコードを配置
Dockerイメージを作成、ECRにpush
コンテナイメージからLambda関数を作成
manifestに関するエラーが発生
となります。

以下に具体的に行ったことを示します。
testディレクトリの中身は下記です。
lambda_function.py

Python

1def handler(event, context): 2 return "Hello World."

requirements.txtは空ファイル。

Dockerfile

docker

1FROM public.ecr.aws/lambda/python:3.12 2 3COPY requirements.txt ${LAMBDA_TASK_ROOT} 4 5RUN pip install -r requirements.txt 6 7COPY lambda_function.py ${LAMBDA_TASK_ROOT} 8 9CMD [ "lambda_function.handler" ]
  • イメージの作成

PowerShell

1docker build --platform linux/amd64 -t docker-image:test .
  • イメージの動作確認

Powershell

1docker run --platform linux/amd64 -p 9000:8080 docker-image:test

で起動した状態で

Powershell

1Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

レスポンスは以下。

StatusCode : 200 StatusDescription : OK Content : "Hello World." RawContent : HTTP/1.1 200 OK Content-Length: 14 Content-Type: text/plain; charset=utf-8 Date: Fri, 04 Oct 2024 21:14:21 GMT "Hello World." Forms : {} Headers : {[Content-Length, 14], [Content-Type, text/plain; charset=utf-8], [Date, Fri, 04 Oct 2024 21:14:21 GMT]} Images : {} InputFields : {} Links : {} ParsedHtml : System.__ComObject RawContentLength : 14
  • AWS ECRにリポジトリを作成

PowerShell

1aws ecr create-repository --repository-name hello-world --region ap-northeast-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
  • イメージをAWSリポジトリにタグをつける

PowerShell

1docker tag docker-image:test ${ACCOUNTID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest
  • イメージをAWSリポジトリにpush

PowerShell

1docker push ${ACCOUNTID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest
  • AWSコンソールからLambda関数を作成

Lambda

関数の作成ボタンを押すとエラーとなります。
CLIからの作成でも同様のエラーとなります。

Powershell

1aws lambda create-function ` 2 --function-name my-function ` 3 --package-type Image ` 4 --code ImageUri=${ACCOUNTID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest ` 5 --role arn:aws:iam::${ACCOUNTID}:role/${ROLENAME}

エラーメッセージ

error

1The image manifest or layer media type for the source image ${ACCOUNTID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world@sha256:${DIGEST} is not supported.

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Ubuntu(Linux)環境で同様の操作を行いましたが、同じ結果になりました。

参考にしたサイト
https://tks2.co.jp/2023/12/02/aws-lambda-selenium-python312/
https://qiita.com/morio1101/items/10b7256433822049c7f6
https://qiita.com/sasaco/items/b65ce36c05c50a74ac3e
https://docs.docker.jp/engine/reference/commandline/manifest.html

補足

manifestでエラーとなっているため、以下のコマンドを実行しました。

Powershell

1docker manifest inspect ${ACCOUNTID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest

結果は以下になります。

{ "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", "size": 2002, "digest": "sha256:${DIGEST}", "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.oci.image.manifest.v1+json", "size": 566, "digest": "sha256:${DIGEST}", "platform": { "architecture": "unknown", "os": "unknown" } } ] }

また、気になったのが、ECRにイメージが複数作成されていることです。
ECR
同様のことをしている記事などを見ると、イメージが一つしか作成されていないため、
これが原因なのかと思っていますが、どうして作成されているのか調べてもわかりませんでした。
タグがついていないものを削除しようとすると画像のようなエラーになります。
MANIFEST_LIST

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これが原因なのかと思っていますが、どうして作成されているのか調べてもわかりませんでした。

そのとおりです。Dockerのイメージ作成の際に、--provenance falseのような引数を指定しておきましょう(参考)。

投稿2024/10/05 05:58

maisumakun

総合スコア145930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neko-punch88

2024/10/05 09:44 編集

docker build --provenance false -t docker-image:test . に修正して、Lambda関数の作成に成功しました。 ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問