LocalStack-CloudFormation返回错误代码:500

时间:2018-10-16 09:28:40

标签: javascript node.js amazon-web-services

我当前要使用 LocalStack 模拟AWS环境。但是在创建堆栈时,服务返回了一个错误代码:500。

这是我的模板文件:

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Sample'
Resources:
  sample:
      Type: AWS::Lambda::Function
      Properties:
        MemorySize: 256
        Timeout: 10
        Runtime: nodejs8.10
        Handler: /dist/service/src/handler.sample
        Code:
          Zipfile: lambda.zip

这是我要运行的命令:

aws cloudformation create-stack \
  --template-body file://localstack/cloudtemplate.yaml \
  --stack-name sample \
  --endpoint-url=http://localhost:4581 \

这是输出:

Unable to parse response (syntax error: line 1, column 54), invalid XML received:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

似乎本地堆栈的cloudformation端点无法正常工作。我想念什么吗?

1 个答案:

答案 0 :(得分:0)

LocalStack返回的错误非常模糊,因此您需要更深入地研究。首先,您可以张贴LocalStack的启动方式(是通过Docker进行的吗,如果是的话,确切的命令行是什么)?

使用Docker和docker-compose:

version: '3'

services:

  localstack:
    image: localstack/localstack:latest
    ports:
      - "4567-4584:4567-4584"
      - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
    environment:
      - SERVICES=cloudformation
      - HOSTNAME=localstack
      - DEFAULT_REGION=eu-west-2
      - PORT_WEB_UI=${PORT_WEB_UI- }
      - DEBUG=1

这里需要注意的几件事:

  • DEBUG=1将在执行docker-compose的控制台中为您提供确切的错误,通过它可以(或可以不)帮助您诊断实际问题
  • 您需要确保启动Cloudformation(通过将其添加到SERVICES数组中)并打开适当的端口。默认值为4581(我只是在打开LocalStack使用的所有端口上方使用默认设置)
  • :latest被使用。我使用的图像版本较旧,并且Cloudformation出现了问题,因此升级到最新版本后就消失了。不确定在哪一点已解决,但我想没关系。

为确保模板没有问题,请尝试使用有效的模板,例如从这里选一个:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html

使用带有Cloudwatch警报的 SQS队列 YAML示例,以下命令对我有效:

aws cloudformation create-stack --stack-name myteststack --template-body file://cloudf.yml --endpoint-url=http://localhost:4581

如果上述方法仍然有效,但您的模板仍然有问题,那么至少您知道问题所在(也许可以发布更详细的DEBUG输出)。