実現したいこと
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関数を作成
関数の作成ボタンを押すとエラーとなります。
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にイメージが複数作成されていることです。
同様のことをしている記事などを見ると、イメージが一つしか作成されていないため、
これが原因なのかと思っていますが、どうして作成されているのか調べてもわかりませんでした。
タグがついていないものを削除しようとすると画像のようなエラーになります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/10/05 09:44 編集