如何在Angular4中将ECS任务角色凭证与AWS开发工具包一起使用

Jan*_*pan 5 amazon-ecs aws-sdk angular

我正在使用aws-sdk for JS / nodejs将Angular4中的文件上传到S3存储桶。

上传工作正常,没有任何问题,如果我指定我的凭据(accesskeyId,ACCESSKEY)创建S3客户对象时。

问题

我正在尝试使用ECSCredentials,因为我不想在代码的任何地方公开我的访问密钥

我的应用程序正在ECS容器实例中运行,并通过ECS Task执行。

我在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';
Run Code Online (Sandbox Code Playgroud)

我像这样创建我的S3对象:

private _s3ClientConfig: S3.ClientConfiguration;
private _s3: S3;
Run Code Online (Sandbox Code Playgroud)

然后像这样创建实例:

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);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到了错误:

ECSCredentials is not a constructor
Run Code Online (Sandbox Code Playgroud)

我也试过省略“凭证”部分,但是,我得到了错误:

 Missing credentials in config
Run Code Online (Sandbox Code Playgroud)

我也尝试过将S3客户端选项创建为S3.ClientConfiguration类型或只是普通对象,仍然存在相同的错误。

我在这里遵循了另一个堆栈溢出问题的说明:如何将ECS凭证与AWS JS SDK结合使用,但是没有运气,同样存在问题和错误。