es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

aws-sdk-go-v2: Conectar con localstack

Hola, estoy tratando de conectar mi aplicación Go con el SQS que se ejecuta en localstack. La parte de localstack funciona correctamente.

Hago lo siguiente después de leer esto: this

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-east-1"), config.WithHTTPClient(&http.Client{Transport: &http.Transport{
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}}), config.WithEndpointResolver(
    aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
        return aws.Endpoint{
            PartitionID:       "aws",
            URL:               "http://127.0.0.1:4566",
            SigningRegion:     "us-east-1",
            HostnameImmutable: true,
        }, nil
    }),
))

if err != nil {
    log.Err(err).Msg("ERROR - 1")
    return nil
}
svc := sqs.NewFromConfig(cfg, func(o *sqs.Options) {
    o.HTTPClient = s{http.Client{}},
})
log.Info().Msg(qURL)
gQInput := &sqs.GetQueueUrlInput{
    QueueName: &qURL,
}

urlResult, err := GetQueueURL(context.TODO(), svc, gQInput)
if err != nil {
    log.Err(err).Msg("ERROR - 2")
    return nil
}

Recibo el siguiente error con la llamada GetQueueURL: operation error SQS: GetQueueUrl, exceeded maximum number of attempts, 3, https response error StatusCode: 0

¿Hay alguna opción para desactivar la comprobación de HTTPS?

Aquí está el archivo YAML de localstack en Docker:

version: '3.0'

services:
  localstack:
    image: localstack/localstack:latest
    environment:
      - AWS_DEFAULT_REGION=us-east-1
      - EDGE_PORT=4566
      - SERVICES=sqs
    ports:
      - '4566:4566'
    volumes:
      - '${TMPDIR:-/tmp/localstack}:/tmp/localstack'
      - '/var/run/docker.sock:/var/run/docker.sock'

No veo registros en Docker para la solicitud.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para desactivar la verificación de HTTPS en el SDK de AWS para Go al conectarse a una instancia local de SQS en Localstack, puedes utilizar la opción InsecureSkipVerify: true en el campo TLSClientConfig de la estructura http.Transport que se pasa a la opción config.WithHTTPClient.

    Aquí tienes un fragmento de código actualizado:

    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-east-1"),
        config.WithHTTPClient(&http.Client{
            Transport: &http.Transport{
                TLSClientConfig: &tls.Config{
                    InsecureSkipVerify: true,
                },
            },
        }),
        config.WithEndpointResolver(
            aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
                return aws.Endpoint{
                    PartitionID:       "aws",
                    URL:               "http://127.0.0.1:4566",
                    SigningRegion:     "us-east-1",
                    HostnameImmutable: true,
                }, nil
            }),
        ),
    )
    
    if err != nil {
        log.Err(err).Msg("ERROR - 1")
        return nil
    }
    
    svc := sqs.NewFromConfig(cfg, func(o *sqs.Options) {
        o.HTTPClient = &http.Client{} // remove extra 's'
    })
    
    qURL := "my-queue"
    
    gQInput := &sqs.GetQueueUrlInput{
        QueueName: &qURL,
    }
    
    urlResult, err := GetQueueURL(context.TODO(), svc, gQInput)
    if err != nil {
        log.Err(err).Msg("ERROR - 2")
        return nil
    }
    

    Ten en cuenta que el código original tiene un error tipográfico en la línea o.HTTPClient = s{http.Client{}}, que debería ser o.HTTPClient = &http.Client{}.

Comments are closed.