0

Upon a symfony app I try to use localstack for local sqs:

services:
    php:
        container_name: php
        build:
            context: ./php
            args:
                TIMEZONE: ${TIMEZONE}
        volumes:
            - ../:/var/www/symfony:cached
            - symfony_app_var:/var/www/symfony/var
            - symfony_app_vendor:/var/www/symfony/vendor
        networks:
            - symfony_app
        extra_hosts:
            - "host.docker.internal:host-gateway"    php:
        container_name: php
        build:
            context: ./php
            args:
                TIMEZONE: ${TIMEZONE}
        volumes:
            - ../:/var/www/symfony:cached
            - symfony_app_var:/var/www/symfony/var
            - symfony_app_vendor:/var/www/symfony/vendor
        networks:
            - symfony_app
        extra_hosts:
            - "host.docker.internal:host-gateway"
  localstack:
    container_name: localstack
    image: localstack/localstack
    ports:
      - "4566:4566"        # main edge port for all services
      - "4510-4559:4510-4559"  # optional: service-specific ports
    environment:
      - SERVICES=sqs       # only start SQS (you can add more: s3,sns,etc.)
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
      - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-}  # optional, for Pro
    volumes:
      - "./localstack:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
    networks:
      - symfony_app

Then I install all nessesary packages:

composer require symfony/amazon-sqs-messenger 

Symfony was configured like:

framework:
    messenger:
        transports:
            async: '%env(MESSENGER_TRANSPORT_DSN)%'
            failed: 'doctrine://default?table_name=failed_messages'
            sqs_channel_manager:
              dsn: 'sqs://localstack:4566'
              serializer: App\Infrastructure\Messenger\SqsJsonSerializer
              options:
                  access_key: '%env(AWS_ACCESS_KEY_ID)%'
                  secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
                  region: '%env(AWS_REGION)%'
                  queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'
                  sslmode: false

And then I listen to my queue:

php -d memory_limit=-1 bin/console messenger:consume async sqs_channel_manager -vv

But I get the following error:

18:32:12 INFO      [messenger] Try #1 after 1056ms: SSL: no alternative certificate subject name matches target host name 'localstack' for "https://localstack:4566/". ["count" => 1,"delay" => 1056]

Why??? Is there a way to disable ssl?

1 Answer 1

1

In order to disable ssl upon localstack and symfony you need to configure:

Symfony

messages.yaml

framework:
    messenger:
        transports:
            async: '%env(MESSENGER_TRANSPORT_DSN)%'
            failed: 'doctrine://default?table_name=failed_messages'
            sqs_channel_manager:
              dsn: 'sqs://localstack:4566'
              serializer: App\Infrastructure\Messenger\SqsJsonSerializer
              options:
                  access_key: '%env(AWS_ACCESS_KEY_ID)%'
                  secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
                  region: '%env(AWS_REGION)%'
                  queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'
                  endpoint: 'http://localstack:4566'
                  sslmode: disable # <<<<< Set disable here

An alternative approach is via providing upon messages.yaml:

framework:
    messenger:
        transports:
            async: '%env(MESSENGER_TRANSPORT_DSN)%'
            failed: 'doctrine://default?table_name=failed_messages'
            sqs_channel_manager:
              dsn: 'sqs://localstack:4566'
              serializer: App\Infrastructure\Messenger\SqsJsonSerializer
              options:
                  access_key: '%env(AWS_ACCESS_KEY_ID)%'
                  secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
                  region: '%env(AWS_REGION)%'
                  queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'
                  endpoint: 'http://localstack:4566'

But set it upon .env as:

MESSENGER_TRANSPORT_DSN='sqs://localstack:4566?sslmode=disable'

Pay attention upon sslmode=disable when providing the DSN, this disable ssl.

Localstack:

services:

# rest of services go here ommited fopr simplicitty

  localstack:
    container_name: localstack
    image: localstack/localstack
    ports:
      - "4566:4566"
      - "4510-4559:4510-4559"
    environment:
      - SERVICES=sqs
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
      - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-}  # optional, for Pro
      - USE_SSL=false << Disable ssl here
    volumes:
      - "./localstack:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
    networks:
      - symfony_app

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.