如何在使用python(boto3)的CloudWatch警报操作中使用变量作为参数传递AWS子帐户的帐户ID?

时间:2018-03-28 12:41:16

标签: python amazon-web-services boto3 amazon-cloudwatch

我正在使用python boto3为子帐户(而不是root帐户)创建CloudWatch警报。我已将该子帐户的帐户ID存储在名为 accnum 的变量中。一旦它超过CPU%10,我需要在该子帐户中停止ec2实例。通过boto3文档,我们需要传递AlarmActions中的arn值来启动/停止/终止EC2实例。

对于root帐户,它是这样的:

AlarmActions=[
  'arn:aws:swf:us-east-2:{CUSTOMER_ACCOUNT}:action/actions/AWS_EC2.InstanceId.Stop/1.0'
],

如何为子帐户执行相同操作。我尝试在AlarmActions中传递accnum变量,但它会引发语法错误。

我试过这样:

AlarmActions=[
  'arn:aws:swf:us-east-2:',accnum,':action/actions/AWS_EC2.InstanceId.Stop/1.0'
],

但是抛出了语法错误:

 botocore.exceptions.ClientError: An error occurred (ValidationError) when calling the PutMetricAlarm operation: Invalid arn syntax: arn:aws:swf:us-east-2:

如何将accnum作为变量传递?或者是否有任何其他方法可以通过警报操作来停止ec2实例?或者是否有像{CUSTOMER_ACCOUNT}这样的子帐户的等价帐户用于root帐号?

1 个答案:

答案 0 :(得分:0)

Python String and Integer concatenation

>>> print("arn:aws:swf:us-east-2:{0}:action/actions/AWS_EC2.InstanceId.Stop/1.0".format(acccnum))
arn:aws:swf:us-east-2:12312312312312:action/actions/AWS_EC2.InstanceId.Stop/1.0

>>> print("arn:aws:swf:us-east-2:" + str(acccnum) + ":action/actions/AWS_EC2.InstanceId.Stop/1.0")
arn:aws:swf:us-east-2:12312312312312:action/actions/AWS_EC2.InstanceId.Stop/1.0