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

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

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

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

Python 3.x

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2069閲覧

【AWS】コンテナイメージとしてデプロイしたLambda関数の更新の仕方がわからない。

Kotarom_24

総合スコア28

AWS Lambda

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

Python 3.x

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/01/28 15:08

編集2022/01/28 15:13

やりたいこと

AWS使い始めて1か月の初心者です。

Lambdaで、コンテナイメージとしてデプロイした関数を実行する必要があります。

Lambda関数の実行自体は問題なくできるのですが、コンテナイメージを関数作成後に修正したい!となった場合に更新する方法がわからないため質問させていただきました。

今のところそれ以外の更新方法がわからないため、ECRのレポジトリを新規作成することで更新していますが、この方法では時間がかかるため手っ取り早く更新できる方法をご存じの方がいれば教えていただきたいです。

試したこと

  1. 公式ドキュメントを参考に、コマンドでdocker push・Lambda管理画面から新しくデプロイを実行しましたが、コンテナイメージは更新されませんでした。

  2. ECRの管理画面から見れるプッシュコマンドに従ってコマンド実行しましたが更新されませんでした。

補足

  • AWS CLI: 2.4.11
  • Docker: 20.10.11

Dockerfile

1FROM public.ecr.aws/lambda/python:3.8 2 3COPY . ${LAMBDA_TASK_ROOT} 4RUN pip install -r requirements.txt 5CMD ["app.handler"]

もしかしてAWSでコンテナイメージの更新はそもそもできないのでは、、、

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

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

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

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

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

guest

回答1

0

ベストアンサー

Lambda Functionが参照しているECRのイメージURIはタグではなく特定のバージョンのハッシュを使ったURIを使っています。
そのためECRに新しいイメージをPushしても、新しいイメージではなく既存のイメージを参照し続けます。

つまり、2.を実施(というか、これは1.に書いてあるdocker pushのことでは?)後に1.を行えば更新できるはずですが、きちんと更新後のイメージを設定しましたか?
URIの後ろの方はイメージのダイジェストの値になっているので、参照したいバージョンのものと一致しているか確認した上でやってみてください。

投稿2022/01/28 15:32

yu_1985

総合スコア7640

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

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

Kotarom_24

2022/01/28 17:33

イメージの名前を変えてdocker pushしたら上手くいきました! yu_1985さんのおっしゃる通り、1. の公式ドキュメントの通りに行えば問題なかったです。 ありがとうございました!! ①docker build②docker tag イメージ名変える③docker push ②と同じ名前にする これを順番に実行したら新しいイメージが作成され、Lambdaからも選択可能な状態になりました。
yu_1985

2022/01/29 08:03

イメージの名前を変えてpushする必要は特にないはずですが…。必要なのは対象のLambda Fucntionを設定し直して再度デプロイすることだけかと思います。
Kotarom_24

2022/01/29 15:31

そうなんですか⁉ コンテナイメージを新規作成する必要はなく、そのまま同じイメージにpushすればイメージは更新されるという認識で合っていますでしょうか? また、Lambda Function設定の見直しとは具体的に何をすればいいのか参考にするドキュメントなど教えていただけないでしょうか?
yu_1985

2022/01/29 19:02

更新した時にどういうオペレーションをしたのか疑問になってきたのですが…。 既に参照しているドキュメント以上のものは特に必要ないと思っています。 >コンテナイメージを新規作成する必要はなく、そのまま同じイメージにpushすればイメージは更新されるという認識で合っていますでしょうか? ここで言っている「イメージ」とは何でしょうか。 ECRのリポジトリにイメージをpushすればそれが登録される、以上のことはなにもないです。 指定したタグが同じであればもともとそのタグが紐付いていたイメージからはタグが外れ、新しくpushしたイメージに該当のタグが設定されていることが確認できるはずです。 Lambda Fucntion側では更新前のイメージを参照し続けたままなので、pushしたイメージを参照し直すようにして、その設定で再度デプロイする作業をするだけです。
Kotarom_24

2022/01/31 08:22

なるほど、おそらく理解できたと思うので実際に検証してみます。 イメージコンテナの変更内容を反映するのに、docker buildとdocker pushは必須ということですよね。毎回docker pushを完了するのに30分以上かかってしまうため、差分のみ更新する別の方法があるのかと勝手に考えていました。
yu_1985

2022/01/31 09:00

変更を反映するには変更後のイメージをpushするしかないと思っていいです。 なので、結局変更後のイメージを上げ直すことになりますね。 それはそれとしてdocker pushにそんなに時間がかかるのは回線に問題があるかイメージが極端に重すぎるのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問