serverless-localstack icon indicating copy to clipboard operation
serverless-localstack copied to clipboard

Failed to create custom domain using serverless-domain-manager plugin

Open indrabasak opened this issue 2 years ago • 2 comments

I'm using the serverless-domain-manager plugin to create a custom domain for my API Gateway. The deployment to localstack fails as serverless-domain-manager plugin uses aws-sdk-js-v3. During deployment, the plugin tries to connect to the AWS default endpoint. Is there a way of configuring the correct local stack endpoint? Here's the exception stack I encountered,

Error: V1 - Unable to fetch information about 'test-example.hello.com':
The security token included in the request is invalid.
    at APIGatewayV1Wrapper.<anonymous> (/xxxx/node_modules/serverless-domain-manager/dist/src/aws/api-gateway-v1-wrapper.js:71:27)
    at Generator.throw (<anonymous>)
    at rejected (/xxxx/node_modules/serverless-domain-manager/dist/src/aws/api-gateway-v1-wrapper.js:6:65)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Here's the code logic from the plugin logic,

 const gateway = new APIGatewayClient({
    endpoint: 'http://localhost:4566',
    region: 'us-west-2',
    credentials: {
      accessKeyId: 'test',
      secretAccessKey: 'test'
    }
  });
  const domainInfo = await gateway.send(
    new GetDomainNameCommand({
      domainName: 'test-example.hello.com'
    })
  );

The only thing missing is the endpoint: 'http://localhost:4566' during the instantiation of APIGatewayClient.

indrabasak avatar Jun 21 '23 00:06 indrabasak

Hi @indrabasak,

currently we do not have a patch for the serverless-domain-manager plugin. There is also an open request for localstack support for their project.

As a workaround, you could try using the endpoint_url configuration in the .aws/config file, you can find details in the official AWS docs.

You could use it e.g. by changing the default profile to be the LocalStack endpoint. Depending on your use case this might be a suitable workaround:

[default]
region = us-east-1
endpoint_url=http://127.0.0.1:4566

Note that we experienced issues with resolving the hostname localhost with newer nodeJS versions, as it would resolve to an IPv6 address by default, but the Localstack container may not be listening on IPv6 (that's why in the sample snippet you see 127.0.0.1).

Please let us know if this configuration works for you.

steffyP avatar Oct 13 '23 14:10 steffyP

Hi @indrabasak,

could you please provide an update on this issue, e.g. does the proposed solution work for you?

steffyP avatar Dec 15 '23 10:12 steffyP

Hey @indrabasak,

could you please let us know if the issue was resolved for you? Otherwise we will close the ticket if we don't get any response.

steffyP avatar Sep 09 '24 12:09 steffyP