步骤功能AWS SAM CLI本地连接被拒绝错误

时间:2019-05-28 12:49:12

标签: amazon-web-services aws-step-functions aws-sam-cli

遵循AWS文档中的步骤

https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html

使用aws-stepfuncitonsons-local docker容器

我在最后一步遇到连接被拒绝的错误

2019-05-28 12:37:05.004: arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test : 
{
    "Type":"ExecutionFailed",
    "PreviousEventId":5,
    "ExecutionFailedEventDetails":
    {
        "Error":"Lambda.SdkClientException",
        "Cause":"Unable to execute HTTP request: Connect to 127.0.0.1:3001 [/127.0.0.1] failed: Connection refused (Connection refused)"
    }
}

任何有关如何解决该问题的帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

只需将LAMBDA_ENDPOINT更新为http://host.docker.internal:3001

答案 1 :(得分:0)

docker容器无法与主机网络上的服务对话。要使其正常工作,您需要添加“-网络主机”。

示例:

JsonConvert.SerializeObject(f)

更多详细信息herehere

答案 2 :(得分:0)

我花了几天时间,所以这对我有用:

  1. 在我的 Mac 上:LAMBDA_ENDPOINT=http://host.docker.internal:5000/(moto_server 为 5000,否则使用 3001)有效。

并使用 docker run -p 8083:8083 --env-file aws-stepfunctions-local-credentials.txt amazon/aws-stepfunctions-local

  1. 在 ubuntu-latest(github 操作)上,这种组合是有效的:

LAMBDA_ENDPOINT=http://127.0.0.1:5000/

docker run -p 8083:8083 --env-file aws-stepfunctions-local-credentials.txt amazon/aws-stepfunctions-local --network host

=> 注意额外的--网络主机

  1. 在同一个代码库中处理这两种情况(在 python 中):
            _, output = subprocess.getstatusoutput('uname -s')

            if output == 'Darwin': # on a Mac
                sam_step_function_local_cmd = subprocess.Popen(
                    [
                     'docker', 'run',
                     '-p=8083:8083',
                     '--env-file=aws-stepfunctions-local-credentials-mac.txt',
                     'amazon/aws-stepfunctions-local:1.7.3'
                     ],
                    stdout=subprocess.PIPE,
                    stderr=subprocess.STDOUT
                )
            else: # on linux
                sam_step_function_local_cmd = subprocess.Popen(
                    [
                     'docker', 'run',
                     '-p=8083:8083',
                     '--env-file=aws-stepfunctions-local-credentials-linux.txt',
                     '--network=host',
                     'amazon/aws-stepfunctions-local:1.7.3'
                    ],
                    stdout=subprocess.PIPE,
                    stderr=subprocess.STDOUT
                )

            try:
                mock_ssm(
                    func
                )(*args, **kwargs)
            finally:
                sam_step_function_local_cmd.terminate()

aws-stepfunctions-local-credentials-linux.txt:

AWS_DEFAULT_REGION=eu-west-1
LAMBDA_ENDPOINT=http://127.0.0.1:5000/

aws-stepfunctions-local-credentials-mac.txt:

AWS_DEFAULT_REGION=eu-west-1
LAMBDA_ENDPOINT=http://host.docker.internal:5000/