如何将CloudFoundry获取的AWS S3服务凭证提供给AWS SDK使用
适配方案
你只需要手动映射CloudFoundry返回的凭证字段到AWS SDK要求的字段即可,修正后的完整代码如下:
var cfenv = require("cfenv"); var appEnv = cfenv.getAppEnv(); var my_s3_service = appEnv.getService('my-s3-service'); const s3Creds = my_s3_service.credentials var AWS = require('aws-sdk'); AWS.config.update({ accessKeyId: s3Creds.api_key, secretAccessKey: s3Creds.secret_key, region: s3Creds.location_constraint }); const s3 = new AWS.S3(); s3.getObject({ Bucket: s3Creds.bucket, Key: "my-key.json" }, (err, data) => { // 后续业务逻辑 });
关键调整说明
- 字段映射:CloudFoundry返回的S3凭证字段名和AWS SDK默认要求的字段名存在差异,手动做对应即可:
api_key对应AWS SDK要求的accessKeyIdsecret_key对应AWS SDK要求的secretAccessKeylocation_constraint对应AWS SDK要求的region
- 修复了原代码中
getObject方法的Bucket参数错误:原代码传入了整个凭证对象,实际需要传入凭证中的bucket字段值 - 如果你使用的是第三方S3兼容存储服务而非AWS官方S3,可在
AWS.config.update中额外添加endpoint: s3Creds.endpoint和s3ForcePathStyle: true配置项保证兼容性
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

