🛠️

LocalStackをバージョンアップした際に、サポートされているはずのコマンドが正常に動作しなかった時に確認すること

2023/05/03に公開

これは何のための記事?

LocalStackのバージョンを1.3.1から2.0.0へとバージョンアップした際に、以前まで動いていたコマンドが動かなくなるパターンに遭遇しました。
Documentationやissueを見ても記載が見当たらなかったので、同じハマり方をしている方の助けになれば嬉しい💕ぐらいの温度感の記事です。

環境

本記事での環境に利用した環境は以下の通りです。

  • mac book pro 16(2019)
  • mac OS Monterey 12.5.1
  • Docker Desktop 4.16.2
  • SAM CLI, version 1.79.0

どういったエラーが発生したのか

環境の構築にはdocker-composeを利用したので、まずは設定は記載します。

version: "3.8"

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME:-localstack_main}"
    image: localstack/localstack:2.0.0
    working_dir: /app
    ports:
      - "127.0.0.1:4566:4566" # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559" # external services port range
    environment:
      - DEBUG=${DEBUG:-0}
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR:-docker-reuse}
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

書き換えた箇所は、以下のimageに関する行だけです。

- image: localstack/localstack:1.3.1
+ image: localstack/localstack:2.0.0

本題となるコマンドは、以下のs3バケットを作成するコマンドです。

$ aws s3api create-bucket --bucket my-bucket \
--endpoint-url=http://localhost:4566 \
--profile localstack

この際、発生したエラーは以下の通りです。
CreateBucketは実装されていない、もしくはPro版の機能だと怒られてしまいます。
もちろん、s3に関する殆どの機能は、LocalStack Communityで提供されています。

An error occurred (InternalFailure) when calling the CreateBucket operation: API for service 's3' not yet implemented or pro feature - please check https://docs.localstack.cloud/references/coverage/ for further information

解消方法

非常に簡単です。
以下のように、docker-compose.yamlに設定しているworking_dirを削除するだけです。

- working_dir: /app

あとは、同様にコマンドを叩けば、無事にs3バケットが作成されます。

$ aws s3api create-bucket --bucket my-bucket \
> --endpoint-url=http://localhost:4566 \
> --profile localstack
{
    "Location": "/my-bucket"
}

まとめ

今回は、LocalStackのバージョンアップに関するエラーの解消方法を紹介しました。
LocalStackは頻繁にアップデートが行われおり、少しバージョンが上がるだけで以前のスクリプトが動かなくなったりします。
working_dirなどは設定されている方も結構な人数おられると思うので、少しでも助けになれば幸いです。

Discussion