🌐

AWS Lambda、Python、Dockerを活用する実践的なチュートリアル

2023/05/06に公開1

はじめに: AWS Lambda, Python, Dockerを使用した開発の効果

近年、クラウドコンピューティングが益々普及し、アプリケーション開発においても効率的かつ柔軟な方法が求められています。その中で、AWS Lambda、Python、およびDockerは、開発者にとって非常に有用な技術として注目されています。

AWS Lambdaは、サーバーレスコンピューティングサービスであり、コードの実行とスケーリングを自動的に行います。これにより、開発者はインフラ管理の負担を軽減し、コードの開発に集中できます。

Pythonは、読みやすく、書きやすいプログラミング言語であり、多くのライブラリやフレームワークが利用できます。これにより、開発者は迅速にプロトタイプを作成し、プロダクションコードを効率的に開発することができます。

Dockerは、コンテナ化技術であり、アプリケーションとその依存関係を統一された形式でパッケージ化します。これにより、環境の一貫性が向上し、開発、テスト、本番環境での問題が減少します。

この記事では、これらの技術を手軽に試すための方法として、AWS Lambda、Python、およびDockerを使って簡単なLambda関数を作成し、デプロイする手順を紹介します。これを試すことで、効率的で柔軟なアプリケーション開発の感覚を掴み、開発者の仕事での生産性向上に繋げられるでしょう。

目次

  1. 必要なツールのインストール
  2. Pythonコードの作成
  3. Dockerfileの作成
  4. Dockerイメージのビルド
  5. ローカルでのテスト
  6. DockerイメージをAWS Lambdaにデプロイ
  7. Lambda関数のテスト
  8. まとめ

必要なツールのインストール

AWS CLI

AWS CLIは、コマンドラインからAWSサービスを操作するためのツールです。公式ドキュメントを参考にして、AWS CLIをインストールし、aws configureコマンドで認証情報を設定してください。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

Docker

Dockerは、アプリケーションをコンテナ化するためのツールです。公式ドキュメントを参考にして、Dockerをインストールしてください。
https://docs.docker.com/get-docker/

Pythonコードの作成

lambda_function.pyという名前のファイルを作成し、以下のPythonコードを記述します。

def lambda_handler(event, context):
    message = "Hello from Lambda and Docker!"
    print(message)
    return message

このコードは、Lambda関数が実行されると"Hello from Lambda and Docker!"というメッセージを出力するだけの簡単な関数です。

Dockerfileの作成

Lambda関数のDockerイメージを作成するために、Dockerfileという名前のファイルを作成し、以下の内容を記述します。

FROM public.ecr.aws/lambda/python:3.8

COPY lambda_function.py ${LAMBDA_TASK_ROOT}

CMD ["lambda_function.lambda_handler"]

このDockerfileは、公式のAWS Lambda Python 3.8ベースイメージを使用し、lambda_function.pyをコピーし、lambda_function.lambda_handler関数を実行するように設定されています。

Dockerイメージのビルド

作成したDockerfileを使用して、Dockerイメージをビルドします。ターミナルで、Dockerfileがあるディレクトリに移動し、以下のコマンドを実行してイメージをビルドします。

docker build -t my-lambda-image .

このコマンドは、カレントディレクトリ(.)にあるDockerfileを使用して、my-lambda-imageという名前のDockerイメージを作成します。

ローカルでのテスト

Dockerイメージが正しく作成されたことを確認するために、ローカル環境でテストしてみましょう。以下のコマンドを実行して、Lambda関数をエミュレートした環境でDockerイメージを実行します。

docker run -p 9000:8080 my-lambda-image:latest

別のターミナルを開いて、以下のコマンドを実行して、ローカルで実行中のLambda関数にリクエストを送信します。

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

正しく実行されると、"Hello from Lambda and Docker!"というメッセージが表示されます。

DockerイメージをAWS Lambdaにデプロイ

Amazon ECRリポジトリの作成

まず、Dockerイメージを保存するためのAmazon Elastic Container Registry(ECR)リポジトリを作成します。AWS Management ConsoleでECRに移動し、新しいリポジトリを作成します。

DockerイメージをAmazon ECRにプッシュ

次に、ビルドしたDockerイメージをECRにプッシュします。ターミナルで、以下のコマンドを実行して、ECRにログインします。

aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com

{region}と{account_id}を適切な値に置き換えてください。

次に、ECRリポジトリにイメージをプッシュします。

docker tag my-lambda-image:latest {account_id}.dkr.ecr.{region}.amazonaws.com/{repository_name}:latest
docker push {account_id}.dkr.ecr.{region}.amazonaws.com/{repository_name}:latest

{account_id}、{region}、および{repository_name}を適切な値に置き換えてください。

Lambda関数の作成

AWS Management Consoleで、Lambdaコンソールに移動し、新しいLambda関数を作成します。関数の作成方法を選択し、「コンテナイメージ」を選択します。コンテナイメージURIに先ほどプッシュしたECRリポジトリのURIを入力します。そして、関数名を入力し、適切な実行ロールを選択または作成して、関数を作成します。

Lambda関数のテスト

Lambdaコンソールから、作成したLambda関数を選択し、「テスト」タブを開きます。新しいテストイベントを作成し、任意のイベントデータを入力して(今回の例では影響はありませんが)、「テスト」ボタンをクリックします。テストが成功すると、「実行結果」に"Hello from Lambda and Docker!"というメッセージが表示されます。

まとめ

この記事では、AWS Lambda、Python、およびDockerを使用して簡単なLambda関数を作成し、デプロイする方法を学びました。これにより、Lambda関数をDockerコンテナで実行し、環境に依存しない開発とデプロイが可能になります。これは、本番環境でのトラブルシューティングや、新しいプラットフォームへの移行を容易にします。これらの技術を活用して従来の業務改善を行い、より効率的で柔軟なアプリケーション開発を行いましょう。

Discussion