【问题标题】:Count the number of EC2 instances cross-account统计跨账户的EC2实例数
【发布时间】:2021-11-27 06:55:59
【问题描述】:

我需要创建一个 python lambda 函数来检查一组条件。 其中之一是计算来自另一个 aws 帐户的具有特定名称的正在运行的 ec2 实例的数量。

我搜索了 stackoverflow 并找到了类似的东西,但这应该只计算来自同一帐户/区域的实例。

def ec2(event, context):
ec2_resource = boto3.resource('ec2')
instances = [instance.state['Name'] for instance in ec2_resource.instances.all()]
ec2_running_instances = instances.count('running')
print(ec2_running_instances)

【问题讨论】:

标签: python-3.x amazon-web-services amazon-ec2 aws-lambda boto3


【解决方案1】:

您不能直接从您的帐户执行此操作。您必须代入在第二个账户中创建的 IAM 角色,并具有描述实例的权限。请查看:Delegate access across AWS accounts using IAM roles

角色存在后,您必须使用 boto3 的 assume_role 代入该角色,获取临时 aws 凭据,然后使用该凭据创建新的 boto3 session

【讨论】:

  • 感谢您的意见。仅在我的帐户中创建用户和访问密钥而不是始终生成临时凭据会更容易更好吗?对不起,如果这是一个愚蠢的问题,但我没有 AWS 经验
  • @HoneyBadger 这也可以,但角色是更好的做法。如果我的回答有帮助,我们将不胜感激。
  • 您好,Marcin,我还有一个问题。我想使用 boto3 多于一种资源类型从我的 python lambda 函数访问。我需要访问 EC2 来描述实例,访问 SQS 来检查队列属性,并将数据发送到 SNS 主题。我是否需要为每个 aws 资源获取临时凭证?或者凭证是否可用于整个 boto3 会话?
  • 我参考这部分代码# Use the temporary credentials that AssumeRole returns to make a connection to Amazon EC2 ec2_resource = boto3.resource('ec2', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], )
  • @HoneyBadger 我建议为此提出新问题。如果我的回答有帮助,我们将不胜感激。
猜你喜欢
  • 2017-10-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多