[AWS]Lambda Web Adapterでコンテナアプリケーションを動かしてみた

こんにちわ!namipay(@kata_dev)です。最近はもっぱらGoogle Cloudをメインでやっており、AWSはほぼ触っていないのでリハビリがてらにLambda Web Adapterを触ってみました。AWSでアプリケーションを動かす方法は様々ありますが、最近ではECS(Elastic Container Service)やEKS(Elastic Kubernetes Service)などのコンテナベースのサービスを利用することが一般的になっているかと思います。
実はLambda Web Adapterというツールを使うことでAWS Lambdaでもコンテナアプリケーションを動かすことができます。実際にLambda Web Adapterを使用してコンテナアプリケーションを動かしてみたので、簡単に記載してみます。

Lambda Web Adapterとは?

Lambda Web Adapterは、コンテナ化したWebアプリケーションをAWS Lambda上で実行できるようにするための公式が提供しているアダプターです。
これを利用することで、従来のコンテナアプリケーションをLambdaで簡単に動かすことができます。ECSやEKSでコンテナアプリケーションを動かす場合はサーバを常時稼働させる必要がありますが、Lambdaは従量課金なのでリクエストが発生しない場合はコストも発生しません。そのため、開発環境・社内向けサービス・個人開発やスタートアップなどのサービスをホスティングすれば一定のコスト効率が見込めるかと思います。

Lambda Web Adapterの使い方

Lambda Web Adapterに使い方は非常に簡単で既存のDockerfileに対して、以下の1行を追加するだけでLambdaにデプロイして動かせるようになります。
  • COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter

Lambdaにデプロイしてみる

実際にLambda Web Adapterでコンテナアプリケーションを動かして観ましょう。今回は内容を簡単にするため、honoの初期テンプレートの内容をコンテナ化してLambdaにデプロイしてみます。honoの公式ドキュメントにDockerfileのサンプルがあるのでこちらを参考にしても良いです。
  • honoのプロジェクトを作成
コマンドを実行してhonoプロジェクトを作成します。初期テンプレートで生成されるコードでは、/にGETリクエストするとHello Hono!とレスポンスするだけのシンプルなAPIが作られます。
  • package.json・tsconfig.jsonの修正
my-appディレクトリ内にコードや設定ファイルが配置されるのでtsconfig.jsonpackage.jsonの中身を以下に修正します。
  • Dockerfileの作成
コンテナイメージのビルドで使用するDocerfileを作成します。builderとrunnerに分けてマルチステージビルドしています。
ここまでできれば、コード周りの下準備はokなのでインフラ周りのリソースを作っていきます。コマンド実行時の認証周りは適宜指定してください。
  • ECRを作成する
  • ECRの認証を取得
  • イメージのBuildとPush
  • LambdaのIAMロール作成
  • Lambda用のCloudWatch Logsを作成
  • Lambda関数の作成
  • リソースベースのポリシーステートメントを作成
  • Lambda URLの作成
  • cURLでアクセスしてみる
Hello Hono!とJSONレスポンスが返ってくればうまく動いています!めちゃ簡単ですね!いぇい!

まとめ

Lambda Web Adapterを使用することで、既存のコンテナアプリケーションを簡単にLambdaで動かすことができます。Lambdaで利用することでインフラコストや運用コストを下げることが一定可能だと思います。今後AWSでコンテナを動かす場合はアーキテクチャの一つとして検討してみるのも有りだと思います!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール