问题陈述
AWS'Fargate'应用程序可与aws执行器正常工作,但在添加s3支持时无法启动
详细信息
我有一个在AWS Fargate上运行的应用程序,它正在使用 spring-cloud-aws-actuator 和 spring-cloud-starter-aws 程序包。
该应用程序在“ fargate”和本地(使用management.metrics.export.cloudwatch.enabled=false
)中运行时,运行 fine 。我最近添加了从S3存储桶中读取数据的支持,可以在本地测试此代码运行良好,但是当我将其部署为“替代”时,应用程序将无法启动,并出现以下错误。
原因:org.springframework.beans.factory.BeanCreationException:
创建在类路径资源[org / springframework / cloud / aws / autoconfigure / metrics / CloudWatchExportAutoConfiguration.class]中定义的名称为'amazonCloudWatchAsync'的bean时出错: 调用init方法失败;嵌套的异常是java.lang.IllegalStateException:
没有可用的EC2元数据,因为该应用程序未在EC2环境中运行。仅当应用程序在EC2实例上运行时,才可以进行区域检测
由于此方法以前可行,所以我添加了S3代码,我只能推测问题与新代码有关,但是我真的不知道从哪里开始对此问题进行解决。
我做什么
在该程序中,我添加了代码以检查我是在本地运行还是在AWS中运行。如果我在本地运行,则使用 ProfileCredentialsProvider 创建一个 AmazonS3 对象,例如
// running locally, create our own credentials
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider("myprofile"))
.withRegion(Regions.US_EAST_1)
.build();
当我检测到我正在使用AWS上的AWS(使用Spring配置文件)时,除了我使用 DefaultAWSCredentialsProviderChain 以外,其他操作与上述相同,也许是问题所在?但是我不确定如何在“ Fargate”中运行而不是在本地时从spring aws自动连接 AmazonS3 对象。
建议?
我知道以上内容含糊不清,如果您让我知道有什么帮助,很高兴提供更多详细信息。话虽这么说,我正在寻找一种在本地运行我的应用程序(用于测试)的方法,该方法允许我访问S3存储桶并禁用cloudwatch致动器代码,但允许在“ Fargate”环境中运行时同时使用这两种代码。
答案 0 :(得分:0)
在同事的帮助下,我们找到了解决方法,我不确定它是否100%正确,但是它对我有用,并且是我决定要做的事情。在我的applictaion.properties中,添加了以下几行
cloud.aws.region.static=us-east-1
cloud.aws.stack.auto=false
设置静态区域似乎不正确,但是显然Spring CloudWatch代码没有检测到它正在ECS Fargate环境中运行,因此这是我们唯一能看到的。