amazon-web-services - 使用 AmazonLambdaClient 时,Localstack 无法在 us-east-1 以外的任何区域内找到 lambda 函数

标签 amazon-web-services .net-core aws-lambda localstack

使用 LocalStack pro 0.14.3,我创建了一个简单的 Lambda 函数,它接受一个字符串输入并返回一个字符串。我使用下面的代码在 localstack 中创建了一个函数。

awslocal lambda create-function `
--function-name "simple-lambda1" `
--zip-file fileb://C:\SimpleLambda\SimpleLambda\SimpleLambda1.zip `
--handler SimpleLambda::SimpleLambda.Function::FunctionHandler `
--runtime dotnetcore3.1 `
--role arn:aws:iam::000000000000:role/lambda-dotnet-ex

这是我的单元测试。

[Test]
        public void Lambda_Function_Call_Succeeds()
        {
            var _lambdaClient = new AmazonLambdaClient(new BasicAWSCredentials("temp", "temp"), new AmazonLambdaConfig()
            {
                ServiceURL = "http://localhost:4566"
            });

            var input = "test";
           
            var lambdaInvokeRequest = new InvokeRequest
            {
                FunctionName = "simple-lambda1",
                InvocationType = InvocationType.RequestResponse,
                Payload = JsonConvert.SerializeObject(input),
            };

            var lambdaInvocationResponse = _lambdaClient.Invoke(lambdaInvokeRequest);

            var js = new JsonSerializer();
            var result = js.Deserialize<string>(lambdaInvocationResponse.Payload);
            Assert.AreEqual("WELCOME TEST", result);
        }

以上工作正常,但是当我在创建函数时将区域指定为 eu-west-1 然后尝试相同的单元测试时,我得到以下正确的异常。

Amazon.Lambda.Model.ResourceNotFoundException: 'Function not found: arn:aws:lambda:us-east-1:000000000000:function:simple-lambda1'

我尝试将区域添加到 lambdaclient。

[Test]
        public void Lambda_Function_Call_Succeeds()
        {
            var _lambdaClient = new AmazonLambdaClient(new BasicAWSCredentials("temp", "temp"), new AmazonLambdaConfig()
            {
                ServiceURL = "http://localhost:4566", RegionEndpoint = RegionEndpoint.EUWest1
            });

            var input = "test";
           
            var lambdaInvokeRequest = new InvokeRequest
            {
                FunctionName = "simple-lambda1",
                InvocationType = InvocationType.RequestResponse,
                Payload = JsonConvert.SerializeObject(input),
            };

            var lambdaInvocationResponse = _lambdaClient.Invoke(lambdaInvokeRequest);

            var js = new JsonSerializer();
            var result = js.Deserialize<string>(lambdaInvocationResponse.Payload);
            Assert.AreEqual("WELCOME TEST", result);
        }

但上面的代码给了我一个 Amazon.Lambda.AmazonLambdaException:“请求中包含的安全 token 无效。” WebException:远程服务器返回错误:(403)禁止访问。有什么明显的地方我做错了吗?

这是我的 docker compose 文件

version: "3.8" 
services: 
   localstack: 
        image: localstack/localstack:latest
        container_name: localstack_test         
        privileged: true 
        ports: 
            - 53:53
            - 4510-4599:4510-4599            
            - 8000:8080
        environment: 
           - LOCALSTACK_API_KEY=XXX
           - SERVICES=s3,sqs,dynamodb,lambda,cloudformation,ssm,iam,cloudwatch,sts,kinesis,events,xray,ecr           
           - DATA_DIR=/tmp/localstack/data     
           - LEGACY_PERSISTENCE=false
           - EDGE_PORT=4566 
           - PORT_WEB_UI=8081 
           - START_WEB=1
           - DEBUG=1 
           - LAMBDA_EXECUTOR=local
           - HOSTNAME_EXTERNAL=localhost
           - LOCALSTACK_HOSTNAME=localhost
           - REQUIRE_PRO=0               
        volumes: 
           - c:/localstack:/tmp/localstack 
           - '/var/run/docker.sock:/var/run/docker.sock'  
        networks: 
            - localstack-ent 
networks: 
    localstack-ent: 
        external: false 
        driver: bridge 

最佳答案

在 docker compose 文件中使用以下内容,为我解决了问题

- USE_SINGLE_REGION=1
- DEFAULT_REGION=eu-west-1

关于amazon-web-services - 使用 AmazonLambdaClient 时,Localstack 无法在 us-east-1 以外的任何区域内找到 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72355481/

相关文章:

amazon-web-services - 你能通过 fargate 中的同一个容器将 desiredcount 缩小到 0 吗

c# - 我可以在 AWS Lambda 上使用 .Net Framework 4.5 部署 RESTful API 吗?

c# - 如何在 DbContext 中并行运行 Xunit 而不会发生冲突 - 主键?

c# - ASP.NET Core 3.1 - WebApplicationFactory - WebApplicationFactoryContentRootAttribute 的正确用法是什么?

node.js - 如何将 headless Chrome 模块与AWS Lambda捆绑在一起?

java - 如何防止 AWS Lambda 从 SQS 队列中删除消息

amazon-web-services - ECS 从 AL1 迁移到 AL2 - ECS 服务未启动

c# - 将 Razor Web App 作为中间件插入 Web Api 元素时,不会加载 css

amazon-web-services - 经过身份验证登录后,AWS Cognito NotAuthorizedException "Invalid Access Token"错误

python - Boto3 S3 列表对象在 AWS lambda 中抛出错误