2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

技術検証:Docker × ECR × Lambda × API Gatewayを組み合わせたサーバーレスアーキテクチャを構築してみた

Last updated at Posted at 2025-01-14

はじめに

ECRにプッシュしたDockerファイルを基にLambdaを実行し、API Gatewayを利用してHTTPリクエストに応じてLambda関数を呼び出す構成を構築しました。

最終的には、URLにアクセスするとブラウザ上で『"Hello from Lambda!"』と表示される仕組みになっています。

この内容がどなたかの技術の支えになれば幸いです!

前回の続きになります

1本目では、ローカル環境でDockerfileを作成し、AWS CLIを使用してDockerイメージをECRにプッシュする手順を解説しました。

👉 Dockerイメージの作成とECRへのプッシュ

2本目では、Lambda関数を使用するために必要なIAMロールの作成や権限の設定について解説しました。

AWS CLIを使用してIAMの権限設定を行う方法を詳しくご紹介しています。

👉 IAMロールと権限設定について

3本目では、ECRにアップロードしたDockerイメージをAWS Lambdaで実行し、サーバーレス環境で「Hello from Lambda!」を実現する手順を紹介しました。

👉 Docker×ECR×Lambdaで「Hello from Lambda!」してみた

まさかここまで技術検証が広がるとは思いませんでしたが、次がラストです!

GitHub Actionsを実装して、このシリーズを締めくくりたいと思っています(笑)

こんなイメージのことをしています

Dockerイメージを基にAWS Lambdaを構築し、そのLambdaをトリガーとしてAPI Gatewayを用いたHTTP APIを作成しました。

Screenshot 2025-01-14 at 15.30.21.png
引用画像:https://qiita.com/Shoma0210/items/928b90e346a0aa1154b0

この構成は、Dockerイメージを基にAWS Lambdaを構築し、API Gatewayをトリガーとして利用したサーバーレスアーキテクチャです。

前提条件

以下の項目が事前に設定・完了している必要があります。

  • AWS CLI が設定済み

    • AWS CLI をインストールし、適切に設定されていること。
  • Docker がインストール済み

    • Docker がインストールされ、正常に動作する環境が整っていること。
  • ECR のリポジトリが作成済み

    • コンテナイメージをアップロードするためのリポジトリが用意されていること。
  • 必要な IAM 権限が設定済み

    • Lambda 関数の実行や ECR へのアクセスに必要な IAM ロールと権限が構成されていること。

さらに、Lambdaを手動で実行し、以下のように成功していることを前提として進めます。

テストの実行と結果

作成したイベントファイルを使用してLambda関数をテストすると、以下のように実行ログが即座に出力されます。

実行.log
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}

以下のスクリーンショットの通り、実行中のLambda関数が成功ステータスを返し、期待通りに動作していることを確認しました。

Screenshot 2025-01-14 at 8.20.55.png

API Gatewayを設定してみた

Lambda関数をAPI Gatewayと統合することで、HTTPリクエストに応じてLambda関数を呼び出せるようにします。

今回は、過去に投稿した以下の記事の手順を参考にしながら進めています:

HTTP APIの構築

HTTP APIの構築ボタンをクリックすると、画面が遷移します。

Screenshot 2025-01-14 at 15.52.52.png

APIの作成

作成画面で、事前に作成したLambda関数を選択し、API名を任意のものに設定して進みます。

Screenshot 2025-01-14 at 15.54.52.png

ルートの作成

「ルートの作成」をクリックし、GETリクエスト用のルートを作成します(例: /static-page)。

Screenshot 2025-01-14 at 15.55.29.png

ステージの設定

APIをデプロイするために、個別設定可能な環境のステージとして「prod(任意)」を作成します。

Screenshot 2025-01-14 at 15.56.53.png

実際にデプロイしてみた

デプロイの実行

画面右上の「デプロイ」を選択し、画面が変わることを確認します。

Screenshot 2025-01-14 at 15.58.14.png

ステージの選択

作成したステージ名をプルダウンで選択し、右下の「デプロイ」をクリックします。

Screenshot 2025-01-14 at 15.59.27.png

作成したAPI Gatewayをprod環境にデプロイした後、API GatewayのエンドポイントURLにブラウザからアクセスしてください。

エンドポイントURLへのアクセス

URLの末尾にはルートとして選択したパスを入力する必要がありますので、ご注意ください。

https://3d9pkvu1q6.execute-api.ap-northeast-1.amazonaws.com/prod/my-container-lambda

結果の確認

ブラウザでエンドポイントURLにアクセスすると、Lambda関数が正しく実行され、エラーなく終了しました。

また、ログからも成功していることを確認しました。

Screenshot 2025-01-14 at 16.02.29.png

ここまで長い道のりでしたが、自分で技術検証の課題を設定し、それを解決できたことで大きな達成感を得られました!

まとめ

最後までお読みいただきありがとうございました。今回は、過去の技術検証を組み合わせた内容でしたが、無事に最後までやり遂げることができ、ほっとしています。

最近は、自分でも少し難しい課題を設定しながら技術検証を進めていますが、その分、着実に力がついていると感じています。

今後は、これに GitHub Actions を組み合わせて、低コストで楽しめるCI/CD環境の構築を目指していきたいです!

この内容がどなたかの技術の支えになれば幸いです。

2
3
0

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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?