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 で行くことにしています。

bug: cdklocal deploy throws CREATE_FAILED with basic example · Issue #5382 · localstack/localstack · GitHub

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欲しいものリスト

私が作業中に飲んでいるコーヒーや欲しいマンガなどを集めました。開発・執筆の励みになりますのでクリックして頂ければ幸いです。

<Amazon欲しいものリスト>