如何使用 boto3 从连接到 ECS 任务的网络接口获取公共 IP

     2023-03-04     135

关键词:

【中文标题】如何使用 boto3 从连接到 ECS 任务的网络接口获取公共 IP【英文标题】:How to get public ip from a network interface attached to an ECS task with boto3 【发布时间】:2018-12-18 23:09:48 【问题描述】:

我需要一些帮助。

我正在尝试使用 boto3 从网络接口获取公共 IP,但由于某种原因,我收到以下错误:

ec2 = boto3.resource('ec2')
nia = ec2.NetworkInterfaceAssociation('eni-r2d2')
nia.id  # I can obtain the id without any issue
# 'eni-r2d2'
nia.public_ip
# /usr/local/lib/python3.6/site-packages/boto3/resources/factory.py in property_loader(self)
#     343                             self.__class__.__name__))
#     344
# --> 345             return self.meta.data.get(name)
#     346
#     347         property_loader.__name__ = str(snake_cased)
# 
# AttributeError: 'NoneType' object has no attribute 'get'

注意:网络接口属于ECS任务,启动类型为FARGATE,网络模式为awsvpc强>。 有人可以帮帮我吗?

谢谢!

【问题讨论】:

你确定 eni-r2d2 存在吗? nia.id 可以只返回你给它的东西。它不必进行网络调用,也不必证明它是有效的。 @Sam 是的,当然,资源存在,但由于某种原因,响应仍然是空白的。我可以使用另一种方法解决它,如果您有兴趣查看下面的解决方案。感谢您的回复! 【参考方案1】:

我认为您不能仅使用 boto3 来做到这一点(编辑:OP 证明并非如此!),因此除非您有使用它的要求,否则请使用元数据服务。

AWS 文档会告诉您从容器内调用元数据服务并解析公共 IP 的 json 响应。 Documentation here。注意当 ecs-agent 版本

这样的事情应该在 Fargate 的容器中工作:

import requests

try:
    response = requests.get('http://169.254.170.2/v2/metadata').json()  
    for container in response.get('Containers', []):
        if 'Networks' in container:
            for network in container.get('Networks', []):
                if 'IPv4Addresses' in network:
                    for ipv4address in network.get('IPv4Addresses', []):
                        print ipv4address # or do something else
except requests.exceptions.RequestException:
    # parse the smoldering remains of the response object

【讨论】:

【参考方案2】:

我可以解决它!代码如下:

import boto3

session = boto3.Session(
  aws_access_key_id='...',
  aws_secret_access_key='...',
  region_name='...',
)
ec2 = session.client('ec2')
response = ec2.describe_network_interfaces(
    NetworkInterfaceIds=['eni-r2d2'],
)
interface = response['NetworkInterfaces'][0]
interface['Association']['PublicIp']
# '1.2.3.4'

【讨论】:

如何在 boto3 中设置 executionRoleArn 的值?

】如何在boto3中设置executionRoleArn的值?【英文标题】:HowtosetvalueforexecutionRoleArninboto3?【发布时间】:2020-09-2520:01:46【问题描述】:我是AWS的新手,我不知道如何使用Pythonboto3使用来自ECR的图像在Fargate中成功运行任务。这是我的... 查看详情

如何使用 boto3 在集群中启动 EC2 实例

】如何使用boto3在集群中启动EC2实例【英文标题】:HowtostartEC2instanceinclusterwithboto3【发布时间】:2019-02-2523:39:43【问题描述】:我想在我的集群中的一个实例上启动一个任务定义(不是在默认实例中)。所以像:创建集群使用dock... 查看详情

如何允许ECS任务访问RDS

】如何允许ECS任务访问RDS【英文标题】:howtoallowECStaskaccesstoRDS【发布时间】:2017-01-1722:55:34【问题描述】:我有一个从Lambda函数执行的ECS任务。此任务将在运行MySQL的RDS实例上执行一些基本的SQL操作(例如SELECT、INSERT、UPDATE)。... 查看详情

通过 http 从连接到服务器的 NAS 下载文件

...NAS作为网络驱动器连接到服务器(假设它位于Y://)。我使用xampp来为我在php中构建的应用程序提供服务。该应用程序旨在为用户提供从NAS下载文件的服务,直接通过http而不是ftp。那么我可 查看详情

无法从连接到 Azure *** 的本地计算机(在家庭网络上)访问专用 AKS 群集

】无法从连接到Azure***的本地计算机(在家庭网络上)访问专用AKS群集【英文标题】:CannotaccessPrivateAKSclusterfromLocalMachine(onhomenetwork)connectedtoAzure***【发布时间】:2021-07-2401:09:38【问题描述】:我在Azure上的VNET中部署了一个私有AKS... 查看详情

使用 boto3 ECS 获得“服务创建不是幂等的”。为啥?

】使用boto3ECS获得“服务创建不是幂等的”。为啥?【英文标题】:Getting"Creationofservicewasnotidempotent"withboto3ECS.Why?使用boto3ECS获得“服务创建不是幂等的”。为什么?【发布时间】:2016-01-1917:28:26【问题描述】:我正在像... 查看详情

如何从连接到 Xcode 的设备中理解 ios 崩溃报告?

】如何从连接到Xcode的设备中理解ios崩溃报告?【英文标题】:HowtomakesenseofiosCrashReportfromadeviceconnectedtoXcode?【发布时间】:2019-03-2802:12:57【问题描述】:我有一个生产应用程序通过了审核,但在生产中崩溃了。我已将设备连接到... 查看详情

boto3 ecs客户端分页问题

...【发布时间】:2018-10-2203:47:52【问题描述】:我正在尝试使用pythonboto3列出awsECS集群中的所有服务,它最多只能列出100个服务。所以尝试使用分页API。importboto3session=boto3.Session(profile_name=\'dev\')client=session.client 查看详情

需要用于 ECS 帮助的 Python Boto3

...面的代码只打印一个集群,而我想打印所有集群。我可以使用for循环吗?下面只打印一个集群:importboto3client=boto3.client(\'ecs\')response=c 查看详情

tcp从连接到释放过程全解

參考书籍:《计算机网络第5版》TCP是面向连接的协议,採用C/S模型建立连接,由client主动发起连接请求,server端允许请求的模式建立连接,通常称为三次握手建立TCP连接。准备条件:B的server端先创建传输控制块TCB。准备接受clie... 查看详情

如何在 Python 中使用 JDBC 驱动程序和 Boto3 API 连接到现有的 Redshift 数据库

】如何在Python中使用JDBC驱动程序和Boto3API连接到现有的Redshift数据库【英文标题】:howtomakeaconnectiontoanexistingRedshiftdatabaseusingJDBCdriverandBoto3APIinPython【发布时间】:2019-08-3121:52:55【问题描述】:我不知道如何使用Boto3API在Python中编... 查看详情

ECS Fargate 计划任务无法连接到 ECR

】ECSFargate计划任务无法连接到ECR【英文标题】:ECSFargateScheduledtaskcannotconnecttoECR【发布时间】:2020-04-2502:05:15【问题描述】:我收到以下错误,我在Internet上的其他任何地方都找不到(尽管有很多类似的错误!)。CannotPullContainer... 查看详情

使用 Live555 从连接到 H264 编码器的 IP 摄像机流式传输实时视频

】使用Live555从连接到H264编码器的IP摄像机流式传输实时视频【英文标题】:UsingLive555toStreamLiveVideofromanIPcameraconnectedtoanH264encoder【发布时间】:2015-02-0110:55:29【问题描述】:我正在使用基于德州仪器OMAP-L138的定制板,该板基本上... 查看详情

AWS ECS Docker 容器 Boto3 IAM 权限

...【发布时间】:2016-12-2601:36:29【问题描述】:我正在尝试使用AWSECS在docker容器内运行boto3python脚本。我的脚本需要访问SQS(获取和删除消息)和Lambda(搜索和运行权限)。为了让docker容器在我的本地机器上运行,我可以使用以下d... 查看详情

如何使用 SDK 为 ecs 服务的弹性伸缩策略设置最小和最大任务?

】如何使用SDK为ecs服务的弹性伸缩策略设置最小和最大任务?【英文标题】:HowdoIsetminandmaxtasksforautoscalingpolicyforecsservicesusingtheSDK?【发布时间】:2020-02-0707:15:08【问题描述】:我想利用AWS开发工具包为我的ECS服务的AutoScaling策略... 查看详情

无法使用 awsvpc 网络类型与 ECS Fargate 上同一任务中的另一个容器通信

】无法使用awsvpc网络类型与ECSFargate上同一任务中的另一个容器通信【英文标题】:CannottalktoanothercontainerinsidesametaskonECSFargateusingawsvpcnetworkingtype【发布时间】:2021-03-3004:34:42【问题描述】:我在同一个ECS任务中运行标准SPA前端应... 查看详情

如何从 AWS Lambda 函数运行 ECS 任务?

】如何从AWSLambda函数运行ECS任务?【英文标题】:HowtorunanECStaskfromAWSLambdafunction?【发布时间】:2021-11-1501:53:49【问题描述】:我创建了一个ECS任务定义,并使用AWS控制台和AWSCLI成功运行。这些任务的多个实例将在一个集群中运行... 查看详情

如何链接在 AWS ECS 任务中运行的 2 个容器

】如何链接在AWSECS任务中运行的2个容器【英文标题】:HowdoIlink2containersrunninginaAWSECStask【发布时间】:2019-10-2509:35:31【问题描述】:我是ECS新手,我正在尝试使用Fargate在ECS任务中部署几个容器。我有1个使用Angular2并在nginx上运行... 查看详情