1
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のlambdaにデプロイされたイメージをローカルで編集する方法

Posted at

概要

最近途中から参画した案件でawsのlambdaを使うことがあったのですが、今まで経験がなかったため備忘録としてまとめます。
ざっくりした内容としては表題の通り、lambda関数にイメージがデプロイされていた場合、どのような手順で内容を編集し、更新するのかについてとなります。

前提

  • Dockerの環境構築済み
  • AWS CLIの環境構築済み
  • 既存のlambda関数、イメージが存在する
  • 既存リソースの更新であり、新規作成ではない

手順

ECR, docker のログイン

AWSにおいてイメージはECR(Elastic Container Registry)で管理されます。そのため、外部からイメージを取得するには、ログインしておく必要があります。

aws ecr get-login-password --region YOUR_REGION | docker login --username AWS --password-stdin YOUR_ACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com

以下の項目については、各自該当するものに修正してください。

  • YOUR_REGION:東京であれば"ap-northeast-1"となります。
  • YOUR_ACCOUNT_ID:AWSマネジメントコンソールの右上にある「ユーザー@●●●●」をクリックすると、アカウントIDが表示されます。

イメージの取得とコンテナの起動

ログイン完了後、編集予定のイメージをローカルに落とし、コンテナを起動します。

docker pull IMAGE_URI #イメージの取得
docker run -it --entrypoint /bin/sh IMAGE_URI #コンテナの起動
  • IMAGE_URI:該当のlambda関数をクリックしたのち、下記画像の黒塗り部分に記載されています。
    lambda_image.png

※イメージは既存のエントリーポイントを持ちますが、上記コマンドではコンテナ内のエントリーポイントを指定しているだけであるため、イメージ側が更新されるわけではない。

コードの編集

CUIでの編集となるため、linuxコマンドを使用することになります。
コマンドやファイルの編集方法は以下を参照してみてください。基本的な操作になるため、もっと深く知りたい方は調べてみてください。

イメージの更新

コードの編集が終わったらECRのイメージを更新する必要があります。

docker commit CONTAINER_ID IMAGE_NAME
docker push IMAGE_NAME
  • CONTAINER_ID:これはローカルで編集していたコンテナのIDになります。確認方法としてはdocker ps -aなどを実行し、出力結果のCONTAINER IDを持ってきてください。
  • IMAGE_NAME:例えばIMAGE_URIがxxx/xxx:latestとなっていた場合、xxx/xxx部分だけを使用してください。

lambda関数の更新

イメージの更新が終わったら、更新後のイメージをlambdaで利用するように設定します。
まずは、コードのみを更新し、その後設定を更新します。(一般的にコード更新->設定更新の順)

aws lambda update-function-code --function-name LAMBDA_FUNCTION_NAME --image-uri IMAGE_URI
  • LAMBDA_FUNCTION_NAME:更新したいlambda関数名
  • IMAGE_URI:タグを指定していない場合、"IMAGE_NAME:latest"とする

次に、設定の更新になります。ここでの設定とは例えば以下のようなものが挙げられます。

  • メモリ割り当て
  • タイムアウト
  • 環境変数
  • IAMロール
  • VPC設定
  • ランタイム
    以下のコードではメモリとタイムアウトだけ更新しています。
aws lambda update-function-configuration --function-name LAMBDA_FUNCTION_NAME --timeout 900 --memory-size 512
  • LAMBDA_FUNCTION_NAME:上と同様

lambda関数の更新に利用するそれぞれのコードは実行に時間がかかります。
コードの更新中に設定の更新を行うとエラーになる点には注意してください。
各更新が終わったのかは以下のコードで確かめることができます。

aws lambda get-function-configuration --function-name LAMBDA_FUNCTION_NAME

last_update_statusという項目がSuccessfulとなっていれば実行が完了しています。

1
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
1
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?