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

GitHub Actions执行SAM部署测试时遇InvalidSignatureException错误求助

解决GitHub Actions中pytest调用DynamoDB的InvalidSignatureException错误

问题概述

按照视频步骤搭建AWS SAM部署的Python后端CI/CD流水线,推送main.yml后,GitHub Actions执行pytest时触发签名不匹配错误:

botocore.exceptions.ClientError: An error occurred (InvalidSignatureException) when calling the GetItem operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

排查与修复步骤

1. 验证AWS凭证正确性

  • 检查GitHub仓库Secrets中存储的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY是否与AWS控制台生成的凭证完全一致,避免多余空格、换行符或复制错误。
  • 若Secret Key丢失,重新生成AWS访问密钥并更新GitHub Secrets(Secret Key仅在生成时可见,无法找回)。

2. 配置IAM权限

确保GitHub Actions使用的IAM用户拥有DynamoDB表的必要操作权限,建议创建最小权限的自定义策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["dynamodb:GetItem", "dynamodb:PutItem"],
            "Resource": "arn:aws:dynamodb:us-east-1:你的AWS账户ID:table/resume-website-app-tbl"
        }
    ]
}

将该策略附加到目标IAM用户,避免使用过度宽泛的权限(如AmazonDynamoDBFullAccess)。

3. 确认区域一致性

  • 检查DynamoDB表是否位于us-east-1区域(与main.yml中AWS_DEFAULT_REGION设置一致)。
  • app.py中boto3依赖环境变量获取区域,测试环节已配置AWS_DEFAULT_REGION,无需额外修改,但需确保表的区域与配置完全匹配。

4. 优化代码逻辑(辅助修复)

  • 移除硬编码表名:app.py中直接写死表名,改为从环境变量读取,与测试逻辑对齐:
    import os
    table_name = os.environ.get('TABLENAME', 'resume-website-app-tbl')
    table = dynamodb.Table(table_name)
    
  • 修正返回格式:原app.py返回纯数字字符串,与test_handler.py中对visit_count字段的断言不匹配,需改为返回JSON格式:
    'body': json.dumps({"visit_count": visit_count})
    
    同时添加异常捕获,确保错误时返回符合断言的格式:
    try:
        # 原业务逻辑
    except Exception as e:
        return {
            'statusCode': 500,
            'headers': {
                'Access-Control-Allow-Headers': '*',
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': '*'
            },
            'body': json.dumps({"visit_count": -1})
        }
    

验证修复

完成上述步骤后,重新推送代码触发GitHub Actions流水线,确认pytest测试通过,签名错误消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:40:26