首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >localstack的Lambda函数中DynamoDB的端点URL

localstack的Lambda函数中DynamoDB的端点URL
EN

Stack Overflow用户
提问于 2020-06-04 21:54:17
回答 2查看 3.3K关注 0票数 0

我正在使用localstack进行本地开发。我有一个名为readings的DynamoDB表,并且我想插入来自lambda函数的项。

我已经在python运行时中部署了简单的lambda函数:

代码语言:javascript
复制
import os
import boto3

def lambda_handler(events, context):
    DYNAMODB_ENDPOINT_URL = os.environ.get("DYNAMODB_ENDPOINT_URL")
    dynamodb = boto3.resource("dynamodb", endpoint_url=DYNAMODB_ENDPOINT_URL)
    readings_table = dynamodb.Table(DYNAMODB_READINGS_TABLE_NAME)

    readings_table.put_item(Item={"reading_id": "10", "other": "test"})

但是我得到了错误:[ERROR] EndpointConnectionError: Could not connect to the endpoint URL: "http://localstack:4569/"

我尝试过结合使用localhostlocalstack以及端口:45664569。他们都失败了。

下面是我用来启动本地堆栈的docker-compse服务

代码语言:javascript
复制
    localstack:
        image: localstack/localstack:0.11.2
        ports:
            - 4566:4566
            - 8080:8080
        environment:
            SERVICES: "dynamodb,sqs,lambda,iam"
            DATA_DIR: "/tmp/localstack/data"
            PORT_WEB_UI: "8080"
            LOCALSTACK_HOSTNAME: localstack
            LAMBDA_EXECUTOR: docker
            AWS_ACCESS_KEY_ID: "test"
            AWS_SECRET_ACCESS_KEY: "test"
            AWS_DEFAULT_REGION: "us-east-1"
        volumes:
            - localstack_volume:/tmp/localstack/data
            - /var/run/docker.sock:/var/run/docker.sock
            # When a container is started for the first time, it will execute files with extensions .sh that are found in /docker-entrypoint-initaws.d. 
            # Files will be executed in alphabetical order. You can easily create aws resources on localstack using `awslocal` (or `aws`) cli tool in the initialization scripts.
            # source: https://github.com/localstack/localstack/pull/1018/files#diff-04c6e90faac2675aa89e2176d2eec7d8R185
            - ./localstack-startup-scripts/:/docker-entrypoint-initaws.d/

为了向本地堆栈的DynamoDB发送请求,我必须在lambda中设置正确的端点url是什么?

EN

回答 2

Stack Overflow用户

发布于 2020-09-22 05:10:29

根据the docs的说法,LOCALSTACK_HOSTNAME是一个只读的环境变量:

LOCALSTACK_HOSTNAME: LocalStack服务可用的主机的名称。使用此主机名作为端点(例如,http://${LOCALSTACK_HOSTNAME}:4566),以便从Lambda函数中访问服务(例如,将项从Lambda存储到DynamoDB或S3 )。

票数 1
EN

Stack Overflow用户

发布于 2020-06-06 04:30:18

代码语言:javascript
复制
 try with 
 ports:      
    - "0.0.0.0:4566-4599:4566-4599"  

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62196416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档