2
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 用 docker イメージ の動作チェックと ECR にプッシュする

Last updated at Posted at 2024-10-30

以下の内容で、ドッカーイメージを構築し、ローカルで動作確認後、ECRのリポジトリにイメージをプッシュする。

変更履歴

2024/10/31: シンプルな処理内容に修正
2024/11/03: ログイン認証する行を追記

こんな感じの内容

作成するイメージ名: simple_lambda_function
コンテナ名: simple_container
タグ名: 今日の日付+イメージ名
Lamda関数名: simple_function
テストに用いるデータ: json形式

前準備:
・ECRにsimple_lambda_functionのリポジトリを作成する。

テストデータ:

{"input": "Are you Okay"}

Windows上のWSLで実行可能なシェルスクリプトの用意

#/bin/bash

# あなたのAWSアカウントID
export AWS_ACCOUNT_ID='012345678910'

# リポジトリ名
export REPOGITORY_NAME='simple_lambda_function'
# コンテナ名
export CONTAINER_NAME='simple_container'
# リージョン
export REGION='ap-northeast-1'
# ドッカーデスクトップのホスト側のポート
export HOST_OS_LOCAL_PORT_NUMBER=10000
# ドッカー内のポート
export DOCKER_CONTAINER_PORT_NUMBER='8080'

set -e
echo "#################### START #####################"
aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com


# docker イメージビルド
echo "#################### Image Build & Container run. #####################"
docker build --provenance=false -t $REPOGITORY_NAME . || exit
docker container run --rm -d --name $CONTAINER_NAME -p $HOST_OS_LOCAL_PORT_NUMBER:$DOCKER_CONTAINER_PORT_NUMBER $REPOGITORY_NAME || exit

if docker ps | grep $CONTAINER_NAME; then
    echo "#################### invoke test ######################"
    curl -d '{"input": "are you ok?"}' http://localhost:$HOST_OS_LOCAL_PORT_NUMBER/2015-03-31/functions/function/invocations || exit

    # テストコンテナの停止
    echo ""
    echo "#################### docker stop ######################"
    docker stop $CONTAINER_NAME 2>&1
else
    echo is not running $CONTAINER_NAME
    exit
fi

# タグ付け
echo "#################### docker tag ######################"
docker tag $REPOGITORY_NAME:latest $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$REPOGITORY_NAME:latest 2>&1

# リポジトリにプッシュ
echo "#################### docker push ######################"
docker push $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$REPOGITORY_NAME:latest 2>&1


実行結果:

@DESKTOP-LAPTOPS:/mnt/c/repos/simple_lambda_function$ bash docker2ECR.sh
#################### START #####################
[+] Building 1.0s (7/7) FINISHED                                                                                                                                                            docker:default
 => [internal] load build definition from dockerfile 
 ...
 
#################### docker build Okay!!!####################
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#################### docker run Okay!!!####################
6c20cfd9c4bb   simple_lambda_function   "/lambda-entrypoint.…"   Less than a second ago   Up Less than a second     0.0.0.0:10000->8080/tcp   simple_container
#################### invoke test ######################
{"statusCode": 200, "body": "recieved_message: Are you Okay?"}
#################### docker stop ######################
simple_container
#################### docker tag ######################
#################### docker push ######################
The push refers to repository [■■■■■■■■■■■■■■.dkr.ecr.ap-northeast-1.amazonaws.com/■■■■■■■■■■■■■■■]
bf922ea61555: Layer already exists
c863ffdfd2d1: Layer already exists
5d7c9b87d3ce: Layer already exists
c5a7082ff81e: Layer already exists
ac6e3c517a18: Layer already exists
35e8cd243a50: Layer already exists
33be6fae4e71: Layer already exists
latest: digest: sha256:■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ size: 1683

以下の記事を参考にしました.
参考:

2
0
4

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