使用Node SDK调用ListFunctionsCommand返回空数组问题排查
AWS SSO跨区域场景下Node SDK调用Lambda ListFunctions返回空数组的问题
使用AWS SSO时,SSO区域(eu-west-2)与Lambda函数所在区域(us-east-1)不同,通过CLI可以正常列出目标区域的Lambda函数,但Node SDK执行相同操作时返回空数组。
配置文件
我的AWS配置文件(~/.aws/config)内容如下:
[profile my-profile] sso_start_url = https://something.awsapps.com/start sso_region = eu-west-2 sso_account_id = ************ sso_role_name = MyRoleName region = us-east-1 output = json
CLI测试结果
执行以下命令可正常登录并获取us-east-1区域的所有Lambda函数:
aws sso login --profile my-profile aws lambda list-functions --profile my-profile
Node SDK初始代码问题
使用Node SDK调用时,返回200响应但Functions数组为空:
import creds from "@aws-sdk/credential-providers"; import lambda from "@aws-sdk/client-lambda"; // ... const credentials = await creds.fromSSO({ profile: 'my-profile' })(); const client = new lambda.LambdaClient({ credentials }); const fnsResult = await client.send(new lambda.ListFunctionsCommand({ }));
补充验证
- Node SDK可以正常列出全局区域资源(如CloudFront分发)
- 当SSO区域与目标区域相同时,Node SDK能正常列出Lambda函数,进一步验证问题由区域配置导致
- 查阅过类似问题,均与边缘函数的
MasterRegion属性相关,与当前场景无关
使用的包版本:
@aws-sdk/client-lambda: ^3.621.0@aws-sdk/credential-providers: ^3.621.0
解决方案(编辑补充)
创建LambdaClient时显式指定目标区域后,可正常获取函数:
const client = new lambda.LambdaClient({ credentials, region: 'us-east-1' }); const fnsResult = await client.send(new lambda.ListFunctionsCommand({ }));
此方式有效,但说明配置文件中profile的region属性未被Node SDK读取,目前尚未找到直接从命名profile读取region的方法。
内容的提问来源于stack exchange,提问作者devklick
相关产品推荐
相关产品推荐

