翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
コンテナイメージを使用して Lambda 関数をデプロイする
作成者: Ram Kandaswamy (AWS)
概要
AWS Lambda は、デプロイモデルとしてコンテナイメージをサポートします。このパターンは、コンテナイメージを使用して Lambda 関数をデプロイする方法を示しています。
Lambda はサーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーをプロビジョニングしたり管理したりしなくても、実質どのようなタイプのアプリケーションやバックエンドサービスでも実行できます。Lambda 関数のコンテナイメージサポートにより、アプリケーションアーティファクト用に最大 10 GB のストレージを確保できるというメリットと、使い慣れたコンテナイメージ開発ツールを使用できるというメリットがあります。
このパターンの例では、基礎となるプログラミング言語として Python を使用していますが、Java、Node.js、Go などの他の言語も使用できます。ソースとして、GitHubGitLab ベースのシステムを検討するか、Amazon Simple Storage Service (Amazon S3) を使用します。
前提条件と制限
前提条件
Amazon Elastic Container Registry (Amazon ECR) がアクティブ化される
アプリケーションコード
ランタイムインターフェイスクライアントと最新バージョンの Python を含む Docker イメージ
Git に関する実用的な知識
機能制限
サポートされる最大モデルサイズは 10 GB です。
Lambda ベースのコンテナデプロイの最大実行時間は 15 分です。
アーキテクチャ
ターゲットアーキテクチャ

Git リポジトリを作成し、アプリケーションコードをリポジトリにコミットします。
AWS CodeBuild プロジェクトはコミットの変更によってトリガーされます。
CodeBuild プロジェクトは Docker イメージを作成し、ビルドされたイメージを Amazon ECR に公開します。
Lambda 関数は、Amazon ECR の イメージを使用して作成します。
自動化とスケール
このパターンは AWS CloudFormation、、 AWS Cloud Development Kit (AWS CDK)または SDK の API オペレーションを使用して自動化できます。Lambda はリクエスト数に基づいて自動的にスケーリングでき、同時実行パラメータを使用して調整できます。詳細については、Lambda のドキュメントを参照してください。
ツール
AWS サービス
AWS CloudFormation AWS CloudFormationhelpsを使用すると、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント と 全体のライフサイクルを通じてリソースを管理できます AWS リージョン。このパターンでは AWS CloudFormation Application Composer を使用します。これにより、 AWS CloudFormation テンプレートを視覚的に表示および編集できます。
AWS CodeBuild は、ソースコードのコンパイル、ユニットテストの実行、デプロイ可能なアーティファクトの生成に役立つフルマネージド型のビルドサービスです。
Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
その他のツール
ベストプラクティス
不要なファイルが読み込まれないように、関数はできるだけ効率的かつ小さくしてください。
静的レイヤーは Docker ファイルリストの上位に配置し、頻繁に変更されるレイヤーは下位に配置するようにしてください。これによりキャッシュが向上し、パフォーマンスが向上します。
イメージ所有者は、イメージの更新とパッチの適用を担当します。その更新頻度を運用プロセスに追加してください。詳細については、AWS Lambda のドキュメントを参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
Git リポジトリを作成します。 | アプリケーションのソースコード、Dockerfile、 | 開発者 |
CodeBuild プロジェクトを作成する。 | CodeBuild プロジェクトを使用してカスタム Lambda イメージを作成するには、次の手順を実行します。
| 開発者 |
Dockerfile を編集する。 | Dockerfile は、アプリケーションを開発している最上位のディレクトリに配置する必要があります。Python コードは イメージを作成するときは、Lambda がサポートする公式イメージ 詳細については、「追加情報」セクションを参照してください。 | 開発者 |
Amazon ECR でリポジトリを作成します。 | Amazon ECR にコンテナリポジトリを作成します。次のコマンド例では、作成されたリポジトリの名前は です
リポジトリは | AWS 管理者、デベロッパー |
Amazon ECR にイメージをプッシュします。 | CodeBuild を使用してイメージビルドプロセスを実行できます。CodeBuild には Amazon ECR とやりとりしたり S3 を操作したりするためのアクセス権限が必要です。プロセスの一環として、Docker イメージがビルドされ、Amazon ECR レジストリにプッシュされます。テンプレートとコードの詳細については、「追加情報」セクションを参照してください。 | 開発者 |
イメージがリポジトリにあることを確認する。 | イメージがリポジトリにあることを確認するには、Amazon ECR コンソールで [リポジトリ] を選択します。Amazon ECR 設定で脆弱性スキャン機能が有効になっている場合は、イメージがタグ付きで一覧表示され、脆弱性スキャンレポートの結果も表示されます。 詳細については、AWS ドキュメントを参照してください。 | 開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
Lambda 関数を作成します。 | Lambda コンソールで [関数の作成] を選択し、[コンテナイメージ] を選択します。Amazon ECR リポジトリにあるイメージの関数名と URI を入力し、[関数の作成] を選択します。詳細については、AWS Lambda のドキュメントを参照してください。 | アプリ開発者 |
Lambda 関数をテストします。 | 関数を呼び出してテストするには、[テスト] を選択します。詳細については、AWS Lambda のドキュメントを参照してください。 | アプリ開発者 |
トラブルシューティング
問題 | ソリューション |
---|---|
ビルドが成功しない。 |
|
関連リソース
追加情報
Docker ファイルの編集
次のコードは、Dockerfile で編集するコマンドを示しています。
FROM public.ecr.aws/lambda/python:3.xx # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} COPY requirements.txt ${LAMBDA_TASK_ROOT} # install dependencies RUN pip3 install --user -r requirements.txt # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "app.lambda_handler" ]
FROM
コマンドで、Lambda でサポートされている Python バージョンに適切な値を使用します (例: 3.12
)。これは、パブリック Amazon ECR イメージリポジトリで使用できるベースイメージになります。
COPY app.py ${LAMBDA_TASK_ROOT}
コマンドは、Lambda 関数が使用するタスクルートディレクトリにコードをコピーします。このコマンドは環境変数を使用するので、実際のパスを心配しなくて済みます。実行する関数は引数として CMD [ "app.lambda_handler" ]
コマンドに渡されます。
COPY requirements.txt
コマンドはコードに必要な依存関係をキャプチャします。
RUN pip install --user -r requirements.txt
コマンドは、依存関係をローカルユーザーディレクトリにインストールします。
イメージを構築するには、次のコマンドを実行します。
docker build -t <image name> .
Amazon ECR にイメージを追加
次のコードでは、アカウント番号に aws_account_id
を置き換え、別のリージョンを使用している場合は us-east-1
を置き換えてください。buildspec
ファイルは CodeBuild ビルド番号を使用して、イメージバージョンをタグ値として一意に識別します。要件に合わせて変更できます。
buildspec のカスタムコード
phases: install: runtime-versions: python: 3.xx pre_build: commands: - python3 --version - pip3 install --upgrade pip - pip3 install --upgrade awscli - sudo docker info build: commands: - echo Build started on `date` - echo Building the Docker image... - ls - cd app - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER . - docker container ls post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER