问题陈述
AWS 'Fargate' 应用程序与 aws 执行器一起工作正常,但在添加 s3 支持时无法启动
详细信息
我有一个在 AWS Fargate 上运行的应用程序,它使用spring-cloud-aws-actuator和spring-cloud-starter-aws包。
该应用程序在“fargate”和本地(使用)中运行时运行良好。management.metrics.export.cloudwatch.enabled=false
我最近添加了从 S3 存储桶读取的支持,在本地测试此代码运行良好,但是当我将其部署到“fargate”时,应用程序无法启动并出现以下错误。
原因: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 上(使用 Spring 配置文件)时,除了我使用DefaultAWSCredentialsProviderChain之外,我执行与上述相同的操作,也许这就是问题所在?但我不确定如何在“Fargate”中运行时从 spring aws 自动装配AmazonS3对象,但在本地运行时则不然。
建议?
我知道以上内容有点含糊,如果您让我知道有什么帮助,我很乐意提供更多详细信息。话虽如此,我正在寻找一种在本地运行我的应用程序(用于测试)的方法,它允许我访问 S3 存储桶并禁用 cloudwatch 执行器代码,但随后允许在“Fargate”环境中运行时使用两者。