You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用serverless-offline-sqs遇NoCredentialsError问题求助

解决serverless-offline-sqs本地测试时的botocore.exceptions.NoCredentialsError错误

你遇到的问题是因为boto3默认会严格校验AWS凭证的存在性,即使连接本地模拟的SQS服务,空字符串的凭证会被判定为无效,从而抛出NoCredentialsError。以下是具体的解决方法:

核心修复思路

serverless-offline-sqs提供的本地SQS实例不需要真实的AWS密钥,但必须给boto3提供非空的dummy凭证值,同时指定本地服务的端点地址,让boto3跳过真实AWS服务的凭证校验,直接连接本地模拟服务。

方法1:直接配置dummy凭证和本地端点

修改你的boto3客户端初始化代码:

import boto3

# 初始化本地SQS客户端
sqs_boto_client = boto3.client(
    'sqs',
    region_name='ap-south-1',
    aws_access_key_id='dummy',  # 非空的占位值,无需真实密钥
    aws_secret_access_key='dummy',
    endpoint_url='http://localhost:9324'  # serverless-offline-sqs默认端口
)

方法2:通过环境变量区分本地/生产环境

为了避免硬编码,在serverless.yml中配置环境变量,区分本地和生产场景:

service: your-service-name

plugins:
  - serverless-offline
  - serverless-offline-sqs

environment:
  IS_LOCAL: ${opt:stage, 'dev'} == 'local'
  SQS_ENDPOINT_URL: ${self:custom.localSqsEndpoint}
  AWS_ACCESS_KEY_ID: ${env:AWS_ACCESS_KEY_ID, 'dummy'}
  AWS_SECRET_ACCESS_KEY: ${env:AWS_SECRET_ACCESS_KEY, 'dummy'}

custom:
  localSqsEndpoint: 'http://localhost:9324'

resources:
  Resources:
    YourQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: your-local-queue-name

然后在代码中根据环境变量动态配置客户端:

import boto3
import os

is_local = os.environ.get('IS_LOCAL', 'false').lower() == 'true'

sqs_config = {
    'region_name': 'ap-south-1',
    'aws_access_key_id': os.environ.get('AWS_ACCESS_KEY_ID', 'dummy'),
    'aws_secret_access_key': os.environ.get('AWS_SECRET_ACCESS_KEY', 'dummy')
}

# 本地环境添加端点配置
if is_local:
    sqs_config['endpoint_url'] = os.environ.get('SQS_ENDPOINT_URL')

sqs_boto_client = boto3.client('sqs', **sqs_config)

为什么之前的配置无效?

你之前设置的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY为空字符串,boto3会将空值判定为"未提供凭证",进而抛出NoCredentialsError。必须提供非空的占位值(如'dummy'),才能让boto3跳过凭证有效性校验,配合本地端点连接到模拟服务。

内容的提问来源于stack exchange,提问作者leafEater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:45:28