我们如何确定我们是 运行 EC2 还是 Fargate?

How can we determine if we are running in EC2 or Fargate?

我在 AWS EC2 和 Fargate 上都有 Java 服务 运行 任务。有没有办法通过使用 AWS 库或其他方式以编程方式确定我们是 运行 在 EC2 还是 Fargate 中?

看起来你可以使用 AWSECSClient class 中的 describeTasks 方法来完成。启动类型将为 EC2 或 Fargate。

您可以将其与 metadata endpoint 结合使用来检查您自己的 taskArn,然后将 ARN 与来自 describeTasks 的响应进行匹配以确定启动类型。

您始终可以测试哪个元数据端点有效。 ECS 任务元数据端点与 ec2 端点。

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint.html

对比

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/util/EC2MetadataUtils.html

环境变量为AWS_EXECUTION_ENV。 EC2 的值为 AWS_ECS_EC2,Fargate 的值为 AWS_ECS_FARGATE。这适用于 Fargate 平台 >= 1.3.0