Я перечисляю экземпляры EC2 в нескольких различных AWS учетных записях. Количество регионов, которые мне нужны для l oop, зависит от типа учетной записи AWS.
Сценарий работает, если я использую эту функцию:
def set_regions(aws_account):
ec2_client = boto3.client('ec2', region_name='us-east-1')
regions = []
gov_regions = ['us-gov-east-1', 'us-gov-west-1']
alz_regions = ['us-east-1', 'us-west-2']
managed_aws_accounts = ['company-lab', 'company-bill', 'company-stage', 'company-dlab', 'company-nonprod', 'company-prod', 'company-security-csm', 'company-logging-csm', 'company-lighthouse', 'company-ab-nonprod', 'company-ab-prod', 'company-govcloud-ab-admin-nonprod', 'company-govcloud-ab-nonprod', 'company-govcloud-ab-admin-prod', 'company-govcloud-ab-prod', 'company-govcloud-ab-mc-admin-nonprod', 'company-govcloud-ab-mc-nonprod', 'company-govcloud-ab-mc-admin-prod', 'company-govcloud-ab-mc-prod', 'company-govcloud-ab-core-qa-admin', 'company-govcloud-ab-core-qa', 'company-govcloud-ab-core-stage-admin', 'company-govcloud-ab-core-stage', 'company-govcloud-ab-mc-qa-admin', 'company-govcloud-ab-mc-qa', 'company-govcloud-ab-mc-stage-admin', 'company-govcloud-ab-mc-stage', 'company-govcloud-admin-ab-dsg-logmon-nonprod', 'company-govcloud-ab-dsg-logmon-nonprod', 'company-govcloud-admin-ab-dsg-logmon-prod', 'company-govcloud-ab-dsg-logmon-prod', 'company-govcloud-admin-ab-dsg-logmon-nonprod2', 'company-govcloud-ab-dsg-logmon-nonprod2', 'company-govcloud-admin-ab-dsg-logmon-prod2', 'company-govcloud-ab-dsg-logmon-prod2', 'company-ab-sandbox', 'company-govcloud-ab-hipaa-admin-np', 'company-govcloud-ab-hipaa-np', 'company-govcloud-ab-hipaa-admin-pd', 'company-govcloud-ab-hipaa-pd', 'company-ksr-a', 'company-ksr-b', 'company-dsg-logging-admin', 'company-dsg-logging-gov', 'company-dsg-security-admin', 'company-dsg-security-gov', 'company-dsg-security-lab', 'company-adv-gov-test-admin', 'company-adv-gov-test' ]
if aws_account in managed_aws_accounts:
if 'gov' in aws_account and not 'admin' in aws_account:
regions = gov_regions
else:
regions = [reg['RegionName'] for reg in ec2_client.describe_regions()['Regions']]
else:
regions = alz_regions
return regions
Но если я удаляю только функции alz_regions и managed_aws_accounts из этой функции:
def set_regions(aws_account):
ec2_client = boto3.client('ec2', region_name='us-east-1')
regions = []
gov_regions = ['us-gov-east-1', 'us-gov-west-1']
if 'gov' in aws_account and not 'admin' in aws_account:
regions = gov_regions
else:
regions = [reg['RegionName'] for reg in ec2_client.describe_regions()['Regions']]
return regions
Сценарий больше не может найти свои AWS учетные данные:
Exception has occurred: NoCredentialsError
Unable to locate credentials
File "C:\Users\tdun0002\OneDrive - Company Technologies\Desktop\important_folders\Company\git\cloud_scripts\aws_scripts\python\aws_reporting_tools\aws_ec2_list_instances.py", line 137, in set_regions
regions = [reg['RegionName'] for reg in ec2_client.describe_regions()['Regions']]
File "C:\Users\tdun0002\OneDrive - Company Technologies\Desktop\important_folders\Company\git\cloud_scripts\aws_scripts\python\aws_reporting_tools\aws_ec2_list_instances.py", line 701, in main
regions = set_regions(aws_account)
File "C:\Users\tdun0002\OneDrive - Company Technologies\Desktop\important_folders\Company\git\cloud_scripts\aws_scripts\python\aws_reporting_tools\aws_ec2_list_instances.py", line 843, in <module>
main()
Почему незначительное изменение, подобное этому, вызывает эту ошибку?