You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS .NET SDK获取指定Elastic Beanstalk应用创建的EC2实例列表

当然可以!用AWS SDK for .NET来获取指定Elastic Beanstalk(EB)应用关联的EC2实例,主要有两种实用思路,我给你详细拆解一下:

方法1:通过Elastic Beanstalk SDK逐步获取

EC2实例是隶属于EB环境的,一个EB应用可以包含多个环境。所以第一步要先拿到目标应用下的所有环境,再逐个获取每个环境关联的EC2实例。

实现步骤

  1. 初始化Elastic Beanstalk客户端(建议用AWS默认凭证链,比如本地配置的凭证或者服务器上的IAM角色)
  2. 调用DescribeEnvironments接口,传入目标应用名称,获取该应用下的所有环境列表
  3. 对每个环境,调用DescribeEnvironmentResources接口,提取其中的EC2实例信息

代码示例

using Amazon;
using Amazon.ElasticBeanstalk;
using Amazon.ElasticBeanstalk.Model;

// 替换成你的AWS区域,比如RegionEndpoint.CNNorth1
var ebClient = new AmazonElasticBeanstalkClient(RegionEndpoint.USWest2);
// 替换成你要查询的EB应用名称
string targetAppName = "YourTargetApplication";

try
{
    // 获取目标应用下的所有环境
    var envResponse = await ebClient.DescribeEnvironmentsAsync(new DescribeEnvironmentsRequest
    {
        ApplicationName = targetAppName
    });

    foreach (var environment in envResponse.Environments)
    {
        Console.WriteLine($"=== 环境: {environment.EnvironmentName} ===");
        Console.WriteLine("关联的EC2实例:");

        // 获取该环境的资源详情
        var resourcesResponse = await ebClient.DescribeEnvironmentResourcesAsync(new DescribeEnvironmentResourcesRequest
        {
            EnvironmentName = environment.EnvironmentName
        });

        foreach (var instance in resourcesResponse.EnvironmentResources.Instances)
        {
            Console.WriteLine($"- 实例ID: {instance.Id}, 状态: {instance.Status}");
        }
        Console.WriteLine("\n");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"出错啦:{ex.Message}");
}

方法2:通过EC2 SDK按标签直接筛选

EB会自动给创建的EC2实例打上专属标签,其中elasticbeanstalk:application-name标签的值就是对应的EB应用名称。我们可以直接利用这个标签,通过EC2 SDK过滤出目标应用的所有实例。

实现步骤

  1. 初始化EC2客户端
  2. 调用DescribeInstances接口,添加标签过滤器,指定elasticbeanstalk:application-name等于目标应用名称

代码示例

using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;

// 替换成你的AWS区域
var ec2Client = new AmazonEC2Client(RegionEndpoint.USWest2);
// 替换成你要查询的EB应用名称
string targetAppName = "YourTargetApplication";

try
{
    var request = new DescribeInstancesRequest
    {
        Filters = new List<Filter>
        {
            new Filter
            {
                Name = "tag:elasticbeanstalk:application-name",
                Values = new List<string> { targetAppName }
            }
        }
    };

    var response = await ec2Client.DescribeInstancesAsync(request);

    foreach (var reservation in response.Reservations)
    {
        foreach (var instance in reservation.Instances)
        {
            Console.WriteLine($"实例ID: {instance.InstanceId}");
            Console.WriteLine($"状态: {instance.State.Name}");
            Console.WriteLine($"私有IP: {instance.PrivateIpAddress}");
            Console.WriteLine($"实例类型: {instance.InstanceType}");
            Console.WriteLine("---");
        }
    }
}
catch (Exception ex)
{
    Console.WriteLine($"出错啦:{ex.Message}");
}

几个注意点

  • 权限配置:确保你的IAM凭证拥有对应的权限,比如方法1需要elasticbeanstalk:DescribeEnvironments和elasticbeanstalk:DescribeEnvironmentResources权限;方法2需要ec2:DescribeInstances权限
  • 区域匹配:代码中的区域要和你的EB应用所在区域一致,不然会查不到资源
  • 多环境过滤:如果只需要某个特定环境的实例,可以在方法1中添加环境名称过滤,或者在方法2中额外添加elasticbeanstalk:environment-name标签过滤

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:22:37