はじめに
クラウド環境でコンテナを活用する際、AWSの Elastic Container Registry(ECR) と Lambda を組み合わせることで、サーバーレスかつスケーラブルなアプリケーションを簡単に構築できます。従来のLambdaはZIPファイルでコードをデプロイする方式が一般的でしたが、最近では コンテナイメージを使ってLambdaを実行 できるようになり、より柔軟な開発が可能になりました。
本記事では、 ECRにコンテナイメージをプッシュし、それをLambdaで実行する方法 を初心者向けに解説します。実際の手順を追いながら、ECRの基本操作やLambdaの設定方法を学び、シンプルなコンテナアプリケーションをAWS上で動かせるようになることを目指します。
この記事で実現すること
本記事では、以下の手順を実践しながらECRとLambdaの基本的な使い方を学びます。
- ECRのセットアップ(コンテナリポジトリの作成)
- Dockerコンテナの作成とイメージのビルド
- ECRへのコンテナイメージのプッシュ
- Lambda関数の作成(ECRイメージを利用)
AWS ECRとは?
AWS Elastic Container Registry(ECR) は、AWSが提供する フルマネージド型のコンテナイメージレジストリ です。Docker Hubのようにコンテナイメージを保存・管理でき、AWSの他のサービスとシームレスに連携できます。特に、AWS LambdaやECS(Elastic Container Service)、EKS(Elastic Kubernetes Service)などのコンテナサービスと統合されており、クラウド上でのコンテナ運用を効率化できます。
AWS ECRを使うメリット
ECRを利用することで、以下のようなメリットがあります。
- AWSとの統合が容易
→ LambdaやECS、EKSとスムーズに連携でき、セキュアなデプロイが可能。 - IAM(Identity and Access Management)によるアクセス管理
→ AWSのIAMを活用して、アクセス権を細かく制御できるため、セキュリティを確保しやすい。 - フルマネージドでスケーラブル
→ コンテナイメージの保存・管理をAWSが自動で行うため、インフラの管理負担を軽減できる。 - プライベート・パブリックリポジトリ対応
→ 自分専用のプライベートリポジトリとしても、一般公開用のパブリックリポジトリとしても利用可能。 - VPCエンドポイントを利用した高速・セキュアな通信
→ AWSのネットワーク内で通信できるため、セキュリティ向上と通信速度の向上が期待できる。
AWS Lambdaとは?
AWS Lambda は、AWSが提供する サーバーレスコンピューティングサービス で、サーバーの管理不要でコードを実行できるプラットフォームです。従来のLambdaは ZIP形式でデプロイする方法 が主流でしたが、現在は コンテナイメージを利用して実行 することも可能になり、より柔軟な環境構築が可能になりました。
Lambdaはイベント駆動型のサービスで、 API Gateway、S3、DynamoDB、SNS などのAWSサービスと連携して、特定のイベント発生時に自動で実行されるのが特徴です。
コンテナイメージでLambdaを実行するメリット
Lambdaでコンテナを利用することで、以下のようなメリットがあります。
- 環境の自由度が高い
→ ZIP形式のLambdaでは対応できなかった カスタムランタイムや特定のライブラリ を含めた環境を構築できる。
→ 例えば、機械学習モデルや大きな依存関係を持つアプリケーションを簡単にデプロイ可能。 - 最大10GBのイメージを利用可能
→ ZIP形式のLambdaではデプロイパッケージのサイズに制限があったが、コンテナ版Lambdaなら 最大10GB のイメージを利用できる。 - ローカル開発環境との親和性
→ Lambdaの実行環境を Dockerコンテナでローカル再現 できるため、デバッグや開発がしやすい。
→ 従来のLambdaはAWS環境でのテストが必要だったが、ローカルでテストできるのは大きな利点。 - 既存のコンテナワークフローを活用可能
→ すでにDockerを使って開発している場合、ECSやEKSと同じワークフローでデプロイ可能。
→ CI/CDパイプライン(GitHub Actions, AWS CodePipelineなど) との連携も容易。 - ECRと組み合わせることでセキュアな運用が可能
→ AWSのプライベートコンテナレジストリ(ECR)を利用すれば、 安全にLambdaへデプロイ できる。
AWS ECRのセットアップ
サンプルアプリの作成
アプリケーションをコンテナ化するための Dockerfile
を作成します。
今回はPythonをベースイメージに用います。
Dockerfile
FROM public.ecr.aws/lambda/python:3.8
COPY ./src/lambda_function.py ${LAMBDA_TASK_ROOT}
CMD ["lambda_function.lambda_handler"]
.src/lambda_function.py
def lambda_handler(event, context):
message = "Hello from AWS Lambda with ECR!"
print(message)
return message
Dockerイメージのビルドと動作確認
作成したプロジェクトをローカルでビルドし、動作を確認します。
- Dockerイメージをビルド
docker build -t sample-docker-app .
- コンテナを起動
docker run -p 8080:8080 sample-docker-app
- 動作確認 ブラウザまたは
curl
コマンドでアクセスし、APIのレスポンスを確認します。
curl -X POST "http://localhost:8080/2015-03-31/functions/function/invocations" \
-H "Content-Type: application/json" \
-d '{}'
# {"message": "Hello from AWS Lambda with ECR!"}が帰ってきたら成功!
AWS ECRリポジトリの作成(AWSコンソール)
AWSコンソールを使用して、ECRリポジトリを作成します。
リポジトリの作成手順
- AWS マネジメントコンソール にログイン
- ECR(Elastic Container Registry) サービスを開く
- 「リポジトリを作成」 をクリック
- 以下の設定を行う
- リポジトリ名:
sample-docker-app
- イメージタグのミュータビリティ:Mutable
- 暗号化設定:AES-256(今回はサンプルなので)
- リポジトリ名:
- 「作成」 をクリック
コンテナイメージをECRにプッシュ
リポジトリないの右上にpudhコマンドを表示と出てきます。
クリックするとコマンドを出してくれるのでローカルのターミナルで順番に叩きます。
ただし、buildコマンドを叩く場合、--provenance=false
オプションをつけてbuildコマンドを実行します。
docker build --provenance=false -t sample-docker-app .

AWS Lambdaのセットアップ
AWS Lambdaのデフォルトの実行環境では、ZIP形式でデプロイする方法が一般的ですが、コンテナイメージを使ったデプロイ も可能です。ECRに登録したDockerコンテナをLambdaで利用するために、以下の手順で設定を行います。
Lambda関数の作成(AWSコンソール)
- AWS マネジメントコンソール にログイン
- Lambda サービス を開く
- 「関数の作成」 をクリック
- 「コンテナイメージ」 を選択

- 「関数名」 に
sample-docker-app
を入力 - 「コンテナイメージのURI」 に ECRリポジトリのイメージURI を入力
- 例:
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/sample-docker-app:latest
- 例:
- アーキテクチャを選択:ビルドした環境によって選択してください。
- 「作成」 をクリック
Lambda関数が作成されると、ECRのコンテナイメージをLambdaの実行環境として使用できるようになります。
Lambdaのテスト
Lambdaの関数ページからテストタブを開き、右上のテストボタンを押下すると、実行できます.。


まとめ
本記事では、AWSの ECR(Elastic Container Registry) と Lambda を活用して、サーバーレスなコンテナアプリケーションを構築する方法を解説しました。以下のステップを通じて、ECRにコンテナイメージをプッシュし、Lambdaで実行する流れを理解できたと思います。
この記事で学んだこと
- AWS ECRの概要とメリット
- AWS Lambdaの概要とコンテナイメージを利用する利点
- Dockerを使用したサンプルアプリの作成とコンテナ化
- AWS ECRのリポジトリ作成とコンテナイメージのプッシュ
- ECRのコンテナイメージを利用したLambda関数の作成と設定
次のステップ
AWS LambdaとECRを使ったコンテナデプロイの基礎を学んだので、次は CI/CDを活用した自動デプロイ や、 API Gatewayとの統合 を試してみると、より実践的な環境を構築できます。
また、以下の点を深掘りすると、より効率的な運用が可能になります。
- AWS CodePipelineとECRを連携し、デプロイを自動化
- Lambdaのメモリ・タイムアウト設定を最適化
- CloudWatch Logsを活用したデバッグとモニタリング
- VPC内Lambdaの設定とセキュリティ強化
AWSのサーバーレスアーキテクチャを活用することで、運用の負担を減らしながら、スケーラブルなシステムを構築できます。本記事の内容をベースに、さらに実践的な開発へと進めていきましょう!
コメント