はじめに
前回は、Dockerイメージを基にECRからLambdaを構築し、API GatewayをトリガーとしてLambdaから「Hello from Lambda!」を実装しました。
今回はその追加機能として、「GitHub Actions」を設定し、main
ブランチに変更があった際に、コードをECRに自動デプロイする仕組みを構築します。
結果からお伝えすると、「GitHub Actions」を設定し、main
ブランチに変更があった際のECRへの自動デプロイは実現できました。しかし、その後の「Lambda × API Gateway」の部分で問題が発生しました。
今回は、この問題がなぜ発生したのかに焦点を当てて、自分なりに考察をまとめていきます。
前回の続きになります
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!」してみた
4本目では、ECRにプッシュしたDockerイメージを基にLambdaを実行し、API Gatewayを利用してHTTPリクエストに応じてLambda関数を呼び出す構成を構築しました。
👉 Docker × ECR × Lambda × API Gatewayを組み合わせたサーバーレスアーキテクチャを構築してみた
こんなイメージのことをしようと頑張りました(一部うまくいかなかった)
ローカル環境のDockerイメージをGitHub上のリポジトリのmainブランチにプッシュした際に、GitHub Actionsを使ってECRへ自動デプロイを行いました。
この手順自体は、過去の技術検証でも行っており、特につまずくことなくスムーズに作業できました。
この構成は、Dockerイメージを基にAWS Lambdaを構築し、API Gatewayをトリガーとして利用したサーバーレスアーキテクチャです。
ECRを基にAWS Lambdaを構築し、API GatewayのHTTP APIをトリガーとして、ブラウザ上で『"Hello from Lambda!"』と表示することを目標にしていました。
しかし、ECRとLambdaの間でうまく連携できない部分があることが判明したため、その問題点を整理していきます。
どこがうまくいっていないのか?
今回、ローカル環境でGitHub上のmain
リポジトリにプッシュがあった場合に、GitHub Actionsを使ってECRに自動デプロイすることは成功しました。
しかし、Lambda関数がECRの最新イメージURLを正しく読み込めず、古いイメージを使用し続ける問題が発生しました。
そのため、変更を加えた内容が反映されない状態となっています。
この問題を解決する手段は、現時点では思いつかなかったため、技術検証をここで一旦断念しました。
以降では、実際にGitHub Actionsを実行した際の内容についてお伝えします。
GitHub Actionsを実行してみた
前提条件
GitHubリポジトリおよびGitHub Secretsの設定が完了していることが必要です。
これらの詳細手順については、以下の記事を参考にしてください。
👉 GitHubリポジトリの準備
Dockerfileと関連ファイルの変更をコミット
多くのリポジトリでは、main
がデフォルトブランチとして設定されています。
ここでは、変更したDockerfileや関連ファイルをコミットしてプッシュします。
git add Dockerfile
git commit -m "Update Dockerfile and related configurations"
git push origin main
GitHub Actionsの実行確認
変更をプッシュした後、GitHubの「Actions」タブに移動し、ワークフローが正しく実行されているか確認します。
約39秒後、Dockerイメージが正常にECRへプッシュされていることが確認できました。
AWS管理コンソールでの確認
AWS管理コンソールのECRサービス画面で、想定通りDockerイメージがアップロードされていることを確認しました。
まとめ
最後までお読みいただきありがとうございました。今回は、自分の思っている形を実現することができませんでしたが、自己分析できてまとめることができました
今回できなかった点については、おそらくラムダ関数などを使う必要があると思っていますので、また調べて実装してみようと思います
この内容がどなたかの技術の支えになれば幸いです。
おまけ:GitHub Actionsが成功したときのアイコンがかっこいい
いつも思うのですが、GitHub Actionsが成功した際にブラウザのアイコンに表示されるチェックマーク、とても気に入っています!笑
このチェックマークをもっと見るためにも、技術を磨き続けていきたいと思います!