我正在使用aws-sdk for JS / nodejs将Angular4中的文件上传到S3存储桶。
如果我在创建S3客户端对象时指定了我的凭据(accesskeyId,accesskey),上传工作正常,没有任何问题。
我正在尝试使用 ECSCredentials ,因为我不想在我的代码中的任何地方公开我的访问密钥。
我的应用程序在 ECS容器实例中运行,并使用 ECS任务执行。
我在IAM中创建了一个ECS任务角色,并通过容器定义中的任务角色将其附加到任务。 (我遵循了这个文档http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)
任务运行后,我可以登录容器(通过ssh)并通过“curl 169.254.170.2 $ AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”检查权限是否正常工作
这样可以100%正常工作并输出我的凭据就像示例一样。
但是,我很难尝试使用aws-sdk。
在我的Angular4组件中,我添加了这样的SDK:
import { ECSCredentials, S3 } from 'aws-sdk';
我像这样创建我的S3对象:
private _s3ClientConfig: S3.ClientConfiguration;
private _s3: S3;
然后像这样创建实例:
this._s3ClientConfig = {
credentials: new ECSCredentials({
httpOptions: { timeout: 5000 },
maxRetries: 10,
retryDelayOptions: { base: 200 }}),
region: this._awsConfig.s3BucketRegion,
sslEnabled: true
};
this._s3 = new S3(this._s3ClientConfig);
当我这样做时,我收到错误:
ECSCredentials is not a constructor
我也尝试省略“凭据”部分,然后我收到错误:
Missing credentials in config
我还尝试将S3客户端选项创建为S3.ClientConfiguration类型或仅仅是普通对象,同样的错误仍然存在。
我在此处遵循了另一个堆栈溢出问题的说明:How to use ECS credentials with AWS JS SDK但是,没有运气,同样的问题和错误。