アカウントのec2インスタンスのCPU使用率を取得しようとしています。私のコードは次のようなものです。
def GetRegions():
return array of regions
def getEC2InstanceID(RegionName):
cloudwatch = boto3.client('cloudwatch', region_name=RegionName)
response = cloudwatch.get_metric_statistics(
.
.
.)
returns array of ec2instanceID
def EC2_Average_Utilization(InstanceID, RegionName):
returns avg cpuusage
def main():
regions= GetRegions()
for i in range(len(regions)):
print(regions[i])
instance_id = getEC2InstanceID(regions[i])
print(instance_id) # prints all the instances if there is any
if (type(instance_id)==list):
for j in range(len(instance_id)):
print(instance_id[j])
print ("For InstanceID "+ instance_id[j] + ":")
EC2_Average_Utilization(instance_id[j], regions[i])
このコードは、1つのアカウントですべてのリージョンに対して完全に実行されます。複数のAWSアカウントに対して同じことをしたい場合、手順はどうなりますか?
nb .aws / credentialsのすべてのアカウントで複数のプロファイルを作成して.aws / configを設定するのを見てきましたが、コードでリージョンを生成しているので、それらを指定したくありません。
boto3Session
オブジェクト、「セキュリティトークンサービス(STS)」、およびassume_role
アカウントとリージョンの組み合わせごとの呼び出しを使用する必要があります。効果は名前付きプロファイルと同じです。APIメソッド(EC2、CloudWatchなど)を呼び出すための適切な権限を持つ各アカウントのロールが必要です。また、ターゲットロールには、元のアカウントの資格情報に戻る信頼関係が必要です。
sts = boto3.client('sts')
#this is called with your default credentials. Target roles need to trust this identity
creds = sts.assume_role(RoleArn='...', RoleSessionName='...')
# set up a session w/ the temporary credentials
session = boto3.Session(
aws_access_key_id=creds['Credentials']['AccessKeyId'],
aws_secret_access_key=creds['Credentials']['SecretAccessKey'],
aws_session_token=creds['Credentials']['SessionToken']
region_name='...')
# all subsequent clients/resources should be instantiated from the session object
cloudwatch = session.client('cloudwatch')
お役に立てれば。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html#STS.Client.assume_roleを参照してください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加