🎼

sls invoke localでdocker-composeで起動したコンテナに疎通する

2022/05/24に公開

Serverless Frameworkにはsls invoke localコマンドというローカル環境でLambdaをテスト実行させる便利機能がありますが、
docker-compose等で起動した別のサービス群に疎通させたい時のやりやすい方法を覚えたのでメモ✍

手順

以下のような構成であったとして、

対象のコンテナ群を起動時に、デフォルトでは ディレクトリ名_default の形でネットワークが作成されるものと思います

https://docs.docker.jp/compose/networking.html

ネットワーク名とコンテナ名はそれぞれ以下で確認できます

$ docker-compose up -d

$ docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
381dcbe5155a   app_default   bridge    local

$ docker ps
CONTAINER ID   IMAGE   COMMAND                  CREATED          STATUS          PORTS                    NAMES
4104f88879b1   xxxxx   "/app/docker/django/…"   36 minutes ago   Up 36 minutes   0.0.0.0:3000->3000/tcp   app_web_container_1

この時、Serverless Framework側にて sls invoke local を実行する際に --docker および --docker-arg オプションを付けて、
起動するコンテナをdocker-composeで起動したコンテナと同じネットワークに参加させることで、 http://web_container:3000 のような形式で名前解決をすることができるようになります

# 関数内で `http://web_container:3000` に対して疎通できる
$ sls invoke local --docker --docker-arg='--network app_default' -s local -f my_function

https://www.serverless.com/framework/docs/providers/aws/cli-reference/invoke-local#options

https://docs.docker.com/engine/reference/run/#user-defined-network

そんだけ😌

Discussion