AWS ECR×Lambdaでサーバーレス環境構築

AWS

はじめに

クラウド環境でコンテナを活用する際、AWSの Elastic Container Registry(ECR)Lambda を組み合わせることで、サーバーレスかつスケーラブルなアプリケーションを簡単に構築できます。従来のLambdaはZIPファイルでコードをデプロイする方式が一般的でしたが、最近では コンテナイメージを使ってLambdaを実行 できるようになり、より柔軟な開発が可能になりました。

本記事では、 ECRにコンテナイメージをプッシュし、それをLambdaで実行する方法 を初心者向けに解説します。実際の手順を追いながら、ECRの基本操作やLambdaの設定方法を学び、シンプルなコンテナアプリケーションをAWS上で動かせるようになることを目指します。

この記事で実現すること

本記事では、以下の手順を実践しながらECRとLambdaの基本的な使い方を学びます。

  1. ECRのセットアップ(コンテナリポジトリの作成)
  2. Dockerコンテナの作成とイメージのビルド
  3. ECRへのコンテナイメージのプッシュ
  4. 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イメージのビルドと動作確認

作成したプロジェクトをローカルでビルドし、動作を確認します。

  1. Dockerイメージをビルド
    docker build -t sample-docker-app .
  2. コンテナを起動
    docker run -p 8080:8080 sample-docker-app
  3. 動作確認 ブラウザまたは 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リポジトリを作成します。

リポジトリの作成手順

  1. AWS マネジメントコンソール にログイン
  2. ECR(Elastic Container Registry) サービスを開く
  3. 「リポジトリを作成」 をクリック
  4. 以下の設定を行う
    • リポジトリ名: sample-docker-app
    • イメージタグのミュータビリティ:Mutable
    • 暗号化設定:AES-256(今回はサンプルなので)
  5. 「作成」 をクリック

コンテナイメージを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のサーバーレスアーキテクチャを活用することで、運用の負担を減らしながら、スケーラブルなシステムを構築できます。本記事の内容をベースに、さらに実践的な開発へと進めていきましょう!

コメント

タイトルとURLをコピーしました