从 EC2 运行时,sp​​ring-cloud-aws 无法将文件放入 S3

Posted

技术标签:

【中文标题】从 EC2 运行时,sp​​ring-cloud-aws 无法将文件放入 S3【英文标题】:spring-cloud-aws not able to put files to S3 when run from EC2 【发布时间】:2015-12-29 06:41:28 【问题描述】:

我正在尝试使用 AmazonS3Client 通过我的 Spring Boot 应用程序将一些文件放入 S3 存储桶中。在 AWS 中,我创建了一个 IAM 用户 (test_user1) 并向该用户授予了 S3 完全访问权限。同样在 S3 中,我向该用户授予了“s3:*”操作。在我的配置文件中为 cloud.aws.credentials.accessKey 和 cloud.aws.credentials.secretKey 指定了相同的用户凭据。

当我从本地计算机运行应用程序时,它运行良好。我可以将多个文件放入 S3 存储桶并查看文件。

但是,当从 AWS EC2 实例运行同一个应用程序时,我在应用程序启动时收到以下错误:

原因:org.springframework.beans.BeanInstantiationException:无法实例化 org.springframework.cloud.aws.core.env.stack.config.StackResourceRegistryFactoryBean]:工厂方法“stackResourceRegistryFactoryBean”抛出异常;嵌套异常是 com.amazonaws.AmazonServiceException:用户:arn:aws:iam::560600000009:user/test_user1 无权执行:cloudformation:DescribeStackResources(服务:AmazonCloudFormation;状态代码:403;错误代码:拒绝访问;

从运行在 EC2 实例中的代码访问 S3 时,我还需要设置什么吗?我没有使用 Amazon Cloud Formation。

这是我的项目的样子:

build.gradle:

compile 'org.springframework.cloud:spring-cloud-aws-autoconfigure:1.0.3.RELEASE'
compile 'org.springframework.cloud:spring-cloud-aws-context:1.0.3.RELEASE'

application.yml:

bucket: test-bucket-1
cloud.aws.credentials.accessKey: AxxxxxxxxxxxxxxA
cloud.aws.credentials.secretKey: jxxxxxxxxxxxxxxR
cloud.aws.credentials.instanceProfile:  true

AmazonS3Client 在我的服务类中自动装配。

@Autowired
public FileService(AmazonS3Client s3Client) ..

【问题讨论】:

【参考方案1】:

Spring Cloud AWS 尝试自动配置 CloudFormation(当应用在 EC2 中运行时)。

我解决了这个错误,在 application.properties 中禁用 autoconf

cloud.aws.stack.auto=false

阅读本文了解更多信息http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html#_automatic_cloudformation_configuration。

【讨论】:

以上是关于从 EC2 运行时,sp​​ring-cloud-aws 无法将文件放入 S3的主要内容,如果未能解决你的问题,请参考以下文章

节点 cron 未在 EC2 上运行

无法通过 ssh 进入从快照创建的 ec2 实例

如何从 EC2 运行 Redshift 复制命令

从 Amazon AWS EC2 服务器上的 Node.js 连接到 Redis 服务器时出错

如何将 EC2 用户从 ubuntu 更改为 mongodb?

AWS - 从EC2连接到SQS