LocalStackとAWS CDKでLambdaローカル開発環境を構築する
AWS Lambda を使った開発をする際、ローカルな開発環境が欲しいですよね。開発用の AWS アカウントを本番・検証環境と別に用意する場合、デプロイに時間がかかるし、アカウント管理の手間がひとつ増えるし、コストも発生します。可能なら開発を手元のパソコンで完結させたいところです。ローカルで AWS のサービスを動かす方法として LocalStack があります。
LocalStack には、AWS Cloud Development Kit (AWS CDK) を使ってデプロイができます。以下、LocalStack を動かして CDK でデプロイする手順をご説明します。
LocalStack のインストール
LocalStack は pip でイントールしました。なお、docker をあらかじめインストールしておきましょう。
pip install localstack awscli-local
localstack start
localstack status
localstack status services
aws cli と同じコマンドをawslocal
で叩くと、LocalStack を操作できます。aws
コマンドのパラメータに--endpoint-url=http://localhost:4566
を付与しても同じ操作になるので、中身は単純なエイリアスっぽいです。
awslocal s3 mb s3://test
awslocal s3 ls
aws-cdk-local で CDK を動かしてデプロイする
aws-cdk-local が LocalStack の公式ツールとして存在します。
yarn global add aws-cdk@1.144 aws-cdk-local
mkdir sample-app
cd sample-app
cdklocal init sample-app --language=typescript
cdklocal bootstrap
cdklocal deploy
デプロイが終わったら、SQS のキューが作られているかを確認してみます。
awslocal sqs list-queues
LocalStack の使い所は Lambda
LocalStack には有料版があります。一部の AWS 機能は無料版だと使えませんが、一般的な serverless 開発は無料版の範囲で可能だと思います。特に hotswap が数秒〜十数秒で終わるので、Lambda の開発はサクサク進むはずです。
cdklocal deploy --hotswap
ただ、aws-cdk v2 は Localstack の有料プランにしないと bootstrap が失敗します。ちょっと気持ち悪いので、とりあえず aws-cdk v1 で行くことにしています。
the cdklocal bootstrap command fails due to Localstack not providing the ECR service in the free version. But you can ignore de error and still deploy a stack after the proccess is finished.
LocalStack は枯れていないので注意
よくわからないエラーが発生し、ググってもよくわからなくて試行錯誤したのですが、docker image を新しくしたら動きました。まだまだ枯れていない印象です。動かなくて困ったときは、最新バージョンや Github issue を確認したり、docker イメージを最新にすることで解決する場合があるかもしれません。
docker pull localstack/localstack
私が作業中に飲んでいるコーヒーや欲しいマンガなどを集めました。開発・執筆の励みになりますのでクリックして頂ければ幸いです。
<Amazon欲しいものリスト>