Bal*_*ran 12 boto3 aws-lambda localstack
我正在使用 Localstack 来测试我在本地的更改。我的 lambda 函数应该执行 putObject 并在 s3 存储桶中创建对象。直接在 AWS 环境中进行测试时,该功能运行良好。但在 Localstack 中,它不起作用。我收到以下错误。
\n\n\n\n\n无法连接到端点 URL:\n " http://localhost:4572/doyouknowme/pokemon.jpeg "\n \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0raise EndpointConnectionError(endpoint_url=request.url ,错误=e)ponset_exceptionlhost:4572/doyouknowme/pokemon.jpeg"
\n
AWS 凭证:
\n\n[default]\naws_access_key_id = AKI****************\naws_secret_access_key = gL************************\nregion = us-east-1\nRun Code Online (Sandbox Code Playgroud)\n\nLambda函数代码:
\n\nimport json\nimport urllib.parse\nimport boto3\nimport base64\n\nprint(\'Loading function\')\n# session = boto3.Session(profile_name=\'personal\')\n# s3 = session.client(\'s3\', endpoint_url=\'http://localhost:4574\')\n\ns3 = boto3.client(\'s3\', endpoint_url=\'http://localhost:4572\', region_name=\'us-east-1\')\n\n\ndef lambda_handler(event, context):\n # raise Exception(\'Something went wrong\')\n print("Received event: " + json.dumps(event, indent=2))\n\n\n try:\n image_data = base64.b64decode(event[\'image_data\'])\n response = s3.put_object(\n Body=image_data,\n Bucket=\'doyouknowme\',\n Key=\'pokemon.jpeg\',\n ContentType=\'image/jpeg\'\n )\n\n print(response)\n return response\n\n except Exception as e:\n print(e)\n # print(\n # \'Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as \'\n # \'this function.\'.format(\n # key, bucket))\n raise e\nRun Code Online (Sandbox Code Playgroud)\n\n我不确定为什么 s3 密钥被附加到 lambda 访问的端点 URL 上。\n感谢您帮助解决此问题。
\nJor*_*ote 32
对于遇到此问题的任何人:当boto3另一个 Docker 尝试localstack使用http://localhost:4566.
http://host.docker.internal:4566我通过将其放入endpoint-urlboto3 会话客户端中解决了我的问题。
或者,如果您使用 docker-compose,请将两个 docker 容器放在同一网络上,通过调用 boto3 的容器名称作为端点来进行调用。(IE http://boto3-container:4566)
希望这对某人有帮助!
| 归档时间: |
|
| 查看次数: |
16690 次 |
| 最近记录: |