容器化Lambda使用Python运行时Boto3无法找到AWS资源问题求助
SAM CLI本地运行Python Lambda容器镜像时boto3无法访问Secrets Manager问题排查方案
问题表现
- 仅在SAM CLI启动本地Lambda API时出现
Secrets Manager can't find the specified secret报错,本地普通Python环境运行代码无异常 - 伴随两条警告日志:
[WARNING] 2021-09-24T08:53:20.615Z Subsegment secretsmanager discarded due to Lambda worker still initializing
[WARNING] 2021-09-24T08:53:20.828Z No subsegment to end.
排查及解决方法
1. 修复缺失的Secrets Manager权限(核心问题)
你当前的SAM模板仅配置了SSM参数存储的访问权限,完全没有配置Secrets Manager的访问权限,会直接导致资源访问被拒绝、提示找不到指定密钥。
需要在函数权限配置中增加Secrets Manager对应操作权限,参考配置如下:
Policies: - PolicyName: 'SecretsManagerAndParameterStoreAccess' PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - 'ssm:GetParameter*' - 'secretsmanager:GetSecretValue' Resource: - !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/dev/parameterStoreBlog*' - !Sub 'arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:你的密钥名称前缀-*'
2. 修复SAM模板的权限字段缩进错误
你当前模板里ManagedPolicyArns、Policies字段的位置写错了,这两个配置属于Properties的子字段,你现在写到了和Properties同级的位置,会导致权限配置完全不生效,需要调整缩进:
MasterDataService: Type: AWS::Serverless::Function Properties: # 其他原有配置(PackageType、Events、FunctionName等)省略 ManagedPolicyArns: - 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' Policies: # 上述调整后的权限配置放在这里
3. 核对本地AWS凭证配置
SAM CLI本地运行Lambda时,默认调用你本地AWS CLI配置的凭证访问云端资源,需要确认:
- 本地
~/.aws/credentials(Windows为C:\Users\用户名\.aws\credentials)中的凭证,所属账号确实存在你要访问的密钥 - 该凭证本身具备访问对应Secrets Manager密钥的权限
- 代码中boto3初始化时指定的区域,和密钥实际所在的AWS区域一致,没有跨区域访问问题
4. 消除X-Ray警告
你看到的两条子segment丢弃警告是因为开启了X-Ray追踪,Lambda初始化阶段调用boto3时X-Ray组件还未完成初始化导致,不影响boto3的实际调用,要消除告警可以:
- 把boto3客户端的初始化逻辑从全局代码移到Lambda handler函数内部,等Lambda运行时初始化完成后再初始化客户端
- 本地测试时可以临时关闭
Tracing: Active配置
内容的提问来源于stack exchange,提问作者rvwsd
相关产品推荐
相关产品推荐

