
はじめに
LocalStack 2026.04 でリリースされた新機能「App Inspector」は LocalStack で発生した AWS サービス間の流れや API 呼び出しをイイ感じに可視化してくれる.さらに AWS にデプロイしたときに発生する IAM 権限の設定ミスも検出できるため実環境へのデプロイ前の検証に使えたりもする👌
詳しくは LocalStack ドキュメントや LocalStack ブログにまとまっている.
ちなみに App Inspector は LocalStack Web Application でも LocalStack Toolkit for VS Code でも使える.
環境
- LocalStack Ultimate プラン
- LocalStack 2026.5.0
App Inspector は LocalStack 2026.04.0 以降で Hobby / Base / Ultimate プランなら使える❗️
サンプル
今回は「LocalStack 実践入門 | AWS サーバレスパターン開発ワークショップ」の Chapter.3 と Chapter.6 をサンプルとして App Inspector を試してみる \( 'ω')/
Chapter.3
Chapter.3 は Amazon S3 バケットにアップロードした画像を AWS Lambda 関数でリサイズして別の Amazon S3 バケットに保存するシンプルなアプリケーションになっている.

から引用
まずは samlocal コマンドでデプロイする.
$ samlocal build $ samlocal deploy
デプロイしたら awslocal コマンドで画像をアップロードする.
$ awslocal s3api put-object \ --bucket chapter03-upload-bucket \ --key Arch_AWS-Lambda_64.png \ --body ./images/Arch_AWS-Lambda_64.png
ここで App Inspector を開くと LocalStack で実行された一連の操作ログが確認できる❗️

さらに1つのイベントを選ぶと,AWS サービス間の流れがイイ感じに可視化されていた👌これは便利〜

Implicitly Denied 警告
App Inspector を見ると Amazon S3 バケットの部分に警告が出ていて,詳細を見ると Implicitly Denied というエラーだった.LocalStack はデフォルトで IAM の考慮がなくても使えるようになっていて,「LocalStack 実践入門」では意図的に IAM を省略しているという背景がある.
IAM を考慮するように AWS SAM の template.yaml を修正すると以下のようになる.
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Globals: Function: Timeout: 10 Resources: UploadBucket: Type: AWS::S3::Bucket Properties: BucketName: chapter03-upload-bucket Function: Type: AWS::Serverless::Function Properties: FunctionName: chapter03-function CodeUri: ./src Handler: app.lambda_handler Runtime: python3.13 Architectures: - x86_64 Policies: - S3ReadPolicy: BucketName: chapter03-upload-bucket - S3WritePolicy: BucketName: chapter03-processing-bucket Events: Upload: Type: S3 Properties: Bucket: !Ref UploadBucket Events: s3:ObjectCreated:* ProcessingBucket: Type: AWS::S3::Bucket Properties: BucketName: chapter03-processing-bucket
もう一度デプロイすると App Inspector の Implicitly Denied エラーが消えていた❗️

Chapter.6
Chapter.6 は Amazon S3 バケットにアップロードした画像を AWS Step Functions を使って2種類の画像処理(gray scale と rotate)をするワークフローになっている.

から引用
まずは samlocal コマンドでデプロイする.
$ samlocal build $ samlocal deploy
デプロイしたら awslocal コマンドで画像をアップロードする.
$ awslocal s3api put-object \ --bucket chapter06-upload-bucket \ --key Arch_AWS-Lambda_64.png \ --body ./images/Arch_AWS-Lambda_64.png
すると Chapter.3 と同じように可視化されていた👌

また今回のワークフローでは直接関係がない AWS Step Functions から Amazon EventBridge への PutEvents も実行されていて,さすが LocalStack のエミュレーションだな〜と思った🎉
- Step Functions Execution Status Change
- status:
RUNNING - status:
SUCCEEDED
- status:

Implicitly Denied 警告
同じように IAM を考慮するように AWS SAM の template.yaml を修正すると以下のようになる.
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Resources: UploadBucket: Type: AWS::S3::Bucket Properties: BucketName: chapter06-upload-bucket Function: Type: AWS::Serverless::Function Properties: FunctionName: chapter06-start-execution-function CodeUri: ./src Handler: start-execution.lambda_handler Runtime: python3.13 Architectures: - x86_64 Policies: - StepFunctionsExecutionPolicy: StateMachineName: chapter06-state-machine Environment: Variables: STATE_MACHINE_ARN: !GetAtt StateMachine.Arn Events: Upload: Type: S3 Properties: Bucket: !Ref UploadBucket Events: s3:ObjectCreated:* GrayScaleFunction: Type: AWS::Serverless::Function Properties: FunctionName: chapter06-gray-scale-function CodeUri: ./src Handler: gray-scale.lambda_handler Runtime: python3.13 Architectures: - x86_64 Policies: - S3ReadPolicy: BucketName: chapter06-upload-bucket - S3WritePolicy: BucketName: chapter06-processing-bucket RotateFunction: Type: AWS::Serverless::Function Properties: FunctionName: chapter06-rotate-function CodeUri: ./src Handler: rotate.lambda_handler Runtime: python3.13 Architectures: - x86_64 Policies: - S3ReadPolicy: BucketName: chapter06-upload-bucket - S3WritePolicy: BucketName: chapter06-processing-bucket StateMachine: Type: AWS::Serverless::StateMachine Properties: Name: chapter06-state-machine DefinitionUri: ./chapter06.asl.json DefinitionSubstitutions: GrayScaleFunctionArn: !GetAtt GrayScaleFunction.Arn RotateFunctionArn: !GetAtt RotateFunction.Arn Policies: - LambdaInvokePolicy: FunctionName: !Ref GrayScaleFunction - LambdaInvokePolicy: FunctionName: !Ref RotateFunction ProcessingBucket: Type: AWS::S3::Bucket Properties: BucketName: chapter06-processing-bucket
もう一度デプロイすると App Inspector の Implicitly Denied エラーが消えていた❗️

まとめ
LocalStack 2026.04 でリリースされた新機能「App Inspector」を試してみた❗️特にサーバレスアプリケーションのように複数のサービスが連携して動くようなアーキテクチャを可視化するときに便利そうだし,IAM 権限の設定ミスを実環境へのデプロイ前に検出できるので,LocalStack で E2E テストを実行するような用途でも使えそうな気がする.もっと使っていくぞー \( 'ω')/