[アップデート] AWS Toolkit for Visual Studio Code に LocalStack が統合されたので使ってみた
いわさです。
LocalStack はクラウドエミュレータ環境をローカルに用意できる製品です。
LocalStack for AWS や LocalStack for Snowflake などがあります。特に、よく AWS でサーバーレスアプリケーションを開発する際にはエミュレータ環境として LocalStack を使っていた方も多いのではないでしょうか。
先日のアップデートで AWS Toolkit for Visual Studio Code に LocalStack が統合されたというアナウンスがありました。
なにやら便利になっていそうですが、このアナウンスだけだと具体的に何がどう変わったのかよくわからない。
ということで実際に使ってみて変更点を確認してみたので紹介します。
簡単にまとめると今回のアップデートで以下ができるようになったみたいです。
- LocalStack Toolkit というここ 1 ヶ月くらいでリリースされた LocalStack 用の Visual Studio Code 拡張を AWS Toolkit for Visual Studio からセットアップできる
- セットアップ後は LocalStack 環境の起動/停止ができる
- AWS プロファイルとして自動セットアップされるのですぐに切り替えて使える
ドキュメントによると Lambda 関数のリモートデバッグには LocalStack の無料版だと対応していないようで今回試すことはできなかったのですが、デプロイまでは確認できました。
セットアップの簡略化
1年前近く前になるのですが、AWS Toolkit for Visual Studio Code に Application Builder という機能が追加されています。
AWS SAM CLI を GUI で操作できるような形で AWS Toolkit に組み込んだような機能です。
この中の「ウォークスルー」という、SAM CLI をはじめとしたローカルでのサーバーレス開発に必要なツール一式を迷わずにセットアップできる機能があります。
まず今回のアップデートではここのオプション機能で LocalStack もセットアップできるようになりました。
「「Install LocalStack」のボタンからインストールを開始することができます。
仕組みとしては別の Visual Studio Code 拡張である「Local Stack Toolkit」がインストールされます。
Local Stack Toolkit のみでは LocalStack 本体がインストールされないので、ステータスバー上は「LocalStack: not installed」となっていると思います。
ここから LocalStack のセットアップウィザードを起動できます。
このセットアップウィザードでは LocalStack アカウントの連携が必要になります。
セットアッププロセスから公式サイトが開かれるので、私はそこで無料アカウントにサインアップしました。
後述しますが、このステップで~/.aws/credentials
や~/.aws/config
に LocalStack 用の設定も自動で追加され、後述のエンドポイント切り替えで使うことができます。
起動の簡略化
続いて、セットアップが完了したら LocalStack を起動します。
LocalStack は通常は Docker Compose を構成して起動すると思いますが、LocalStack Toolkit によってス Visual Studio Code のステータスバーからポチポチですぐに起動ができます。
「Start LocalStack」を選択します。
次のようにステータスが「LocalStack: running」になれば起動できています。
ローカルで起動されているコンテナを確認してみると LocalStack が起動されていますね。
http://localhost:4566/_localstack/health
にアクセスしてみると次のようにローカルサービスのステータスを確認することができました。
% curl http://localhost:4566/_localstack/health | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3193 100 3193 0 0 313k 0 --:--:-- --:--:-- --:--:-- 346k
{
"features": {
"persistence": "disabled"
},
"services": {
"account": "available",
"acm-pca": "available",
"amplify": "available",
"apigateway": "available",
"apigatewaymanagementapi": "available",
:
"secretsmanager": "available",
"sns": "available",
"stepfunctions": "available",
"support": "available",
"swf": "available",
"transcribe": "available"
},
"edition": "pro",
"version": "4.8.1.dev5"
}
LocalStack CLI などの操作なしでここまで来れました。
エンドポイント切り替えの簡略化
準備ができたので最後に LocalStack を使用してみます。
先程のセットアップで追加されたカスタムプロファイルに切り替えます。
あとは適当な SAM アプリケーションをデプロイしてみます。
pyenv shCreating the required resources...
Successfully created!
Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-fa1b4c8e
A different default S3 bucket can be set in samconfig.toml
Or by specifying --s3-bucket explicitly.
Uploading to c2fb3f0641b98c174bc70dcb53779342 578203 / 578203 (100.00%)
Deploying with following values
===============================
Stack name : hoge0915lambda
Region : ap-northeast-1
Confirm changeset : False
Disable rollback : False
Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-fa1b4c8e
Capabilities : ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
Parameter overrides : {}
Signing Profiles : {}
Initiating deployment
=====================
Uploading to 3a1fa2f54fedcd2cd4f9fb7c6004382d.template 1267 / 1267 (100.00%)
Waiting for changeset to be created..
CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
-------------------------------------------------------------------------------------------------
+ Add HelloWorldFunction AWS::Lambda::Function N/A
+ Add HelloWorldFunctionHell AWS::Lambda::Permissio N/A
oWorldPermissionProd n
+ Add HelloWorldFunctionRole AWS::IAM::Role N/A
+ Add ServerlessRestApi AWS::ApiGateway::RestA N/A
pi
+ Add ServerlessRestApiDeplo AWS::ApiGateway::Deplo N/A
yment47fc2d5f9d yment
+ Add ServerlessRestApiProdS AWS::ApiGateway::Stage N/A
tage
-------------------------------------------------------------------------------------------------
Changeset created successfully. arn:aws:cloudformation:ap-northeast-1:000000000000:changeSet/samcli-deploy1757881397/fcf8e57f
2025-09-15 05:23:17 - Waiting for stack create/update to complete
CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus ResourceType LogicalResourceId ResourceStatusReason
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS AWS::CloudFormation::S hoge0915lambda -
tack
CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole -
CREATE_COMPLETE AWS::IAM::Role HelloWorldFunctionRole -
CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction -
CREATE_COMPLETE AWS::Lambda::Function HelloWorldFunction -
CREATE_IN_PROGRESS AWS::ApiGateway::RestA ServerlessRestApi -
pi
CREATE_COMPLETE AWS::ApiGateway::RestA ServerlessRestApi -
pi
CREATE_IN_PROGRESS AWS::Lambda::Permissio HelloWorldFunctionHell -
n oWorldPermissionProd
CREATE_COMPLETE AWS::Lambda::Permissio HelloWorldFunctionHell -
n oWorldPermissionProd
CREATE_IN_PROGRESS AWS::ApiGateway::Deplo ServerlessRestApiDeplo -
yment yment47fc2d5f9d
CREATE_COMPLETE AWS::ApiGateway::Deplo ServerlessRestApiDeplo -
yment yment47fc2d5f9d
CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdS -
tage
CREATE_COMPLETE AWS::ApiGateway::Stage ServerlessRestApiProdS -
tage
CREATE_COMPLETE AWS::CloudFormation::S hoge0915lambda -
tack
-------------------------------------------------------------------------------------------------
CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs
-------------------------------------------------------------------------------------------------
Key HelloWorldApi
Description -
Value https://dnz5qeqldv.execute-api.amazonaws.com:4566/Prod/hello/
Key HelloWorldFunction
Description -
Value arn:aws:lambda:ap-northeast-1:000000000000:function:hoge0915lambda-
HelloWorldFunction-cfe7560d
Key HelloWorldFunctionIamRole
Description -
Value arn:aws:iam::000000000000:role/hoge0915lambda-
HelloWorldFunctionRole-079c5480
-------------------------------------------------------------------------------------------------
Successfully created/updated stack - hoge0915lambda in ap-northeast-1
アカウント000000000000
のスタック作成に成功していそうです。LocalStack を使う場合はアカウントID がダミーの000000000000
になります。
AWS Toolkit for Visual Studio Code 上からデプロイしたのでエンドポイントの指定などなしでうまいこと動作してますね。
またカスタムプロファイルを指定してデプロイされた Lambada 関数を AWS CLI から確認してみます。
こちらは AWS Toolkit 上からではないのでプロファイルを指定だけします。
% aws lambda list-functions --region ap-northeast-1 --profile localstack
{
"Functions": [
{
"FunctionName": "hoge0915lambda-HelloWorldFunction-cfe7560d",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:000000000000:function:hoge0915lambda-HelloWorldFunction-cfe7560d",
"Runtime": "python3.12",
"Role": "arn:aws:iam::000000000000:role/hoge0915lambda-HelloWorldFunctionRole-079c5480",
"Handler": "app.lambda_handler",
"CodeSize": 578203,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2025-09-14T20:23:17.200299+0000",
"CodeSha256": "BotKOXP4m61iq16kGn8rGo5QMR8JAllKWQ68wzQxFUk=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "fe8feed4-26f3-41b3-89db-ddf12da3e82b",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"LoggingConfig": {
"LogFormat": "Text",
"LogGroup": "/aws/lambda/hoge0915lambda-HelloWorldFunction-cfe7560d"
}
}
]
}
確認できましたね。
さいごに
本日は AWS Toolkit for Visual Studio Code に LocalStack が統合されたので使ってみました。
LocalStack は導入がちょっと面倒だなぁと思っていたのですが、これはかなり良いのではないでしょうか。
難しい手順なしですぐに LocalStack を使った開発を始めることができました。