【问题标题】:Facing issue while running aws boto3 ec2 inventory script NameError: name 'Instance_name' is not defined运行 aws boto3 ec2 库存脚本时面临的问题 NameError: name 'Instance_name' is not defined
【发布时间】:2020-07-31 14:54:09
【问题描述】:

我正在尝试从 Boto3 脚本获取 Ec2 库存信息,该脚本在 jupyter notebook 上运行良好,但是当我在我的项目 Linux 环境中运行时,我遇到了以下问题。

名称错误:名称“Instance_name”未定义

下面是我的脚本:

import boto3
import csv
import pprint as pprint
aws_mang_con=boto3.session.Session(profile_name='root')
ec2_cli=aws_mang_con.client('ec2')
cnt=1
csv_ob=open("demo3.csv","w",newline='')
csv_w=csv.writer(csv_ob)
csv_w.writerow(["S_NO","Enviroment",'Application','Componenets','Instance_id','IP','Instance_Name','Instance_Size','Status'])
response=ec2_cli.describe_instances()['Reservations']
for each_item in response:
  for instances in each_item['Instances']:
    for tags in instances['Tags']:
      if tags['Key'] in 'Name':
        name=tags['Value']
        print(name)
      elif tags['Key'] in 'Application':
        application=tags['Value']
        print(application)
      elif tags['Key'] in 'Components':
        components=tags['Value']
        print(components)  

    csv_w.writerow([cnt,'dev',application,components,instances['PrivateIpadress'],name,instances['InstanceType'],instances['State']['Name']])
    cnt+=1
csv_ob.close()

      

这里还需要添加什么,因为它在我的本地 jupyter 笔记本上运行良好,但在我的项目 Linux 机器上显示上述错误。任何帮助将不胜感激?

【问题讨论】:

  • 请发布完整的回溯错误。
  • Traceback(最近一次调用最后):文件“ec2.py”,第 19 行,在 csv_w.writerow([cnt,'dev',application,components,instances['InstanceId' ],instances['PrivateIpAddress'],Instance_name,instances['InstanceType'],instances['State']['Name']]) NameError: name 'Instance_name' is not defined
  • 该回溯与您发布的代码不对应。在代码中,你有name,但在回溯中你有Instance_name
  • 是的,我只是在更改名称和测试,所以如果我们写名称或实例名称,它会给出相同的问题
  • 请发布您遇到问题的实际代码以及错误。我怀疑您将 Instance_name 更改为 name 时是否有同样的错误

标签: python amazon-ec2


【解决方案1】:

我认为以下行的缩进不正确。

csv_w.writerow([cnt,'dev',application,components,instances['PrivateIpadress'],name,instances['InstanceType'],instances['State']['Name']])

缩进应该与for tags in instances['Tags']: 的行相同

应该是这样的:

for instances in each_item['Instances']:
  for tags in instances['Tags']:
    # assign the value to variables
    #
  csv_w.writerow([cnt,'dev',application,components,instances['PrivateIpadress'],name,instances['InstanceType'],instances['State']['Name']])
    cnt+=1
csv_ob.close()

【讨论】:

  • 感谢您的回复,但它在 header 和 csv 中都有 9 个参数
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 2022-12-02
  • 2013-04-09
  • 1970-01-01
  • 2021-01-04
  • 2020-11-07
  • 2017-01-09
相关资源
最近更新 更多