Я пытаюсь запустить скрипт, который создает таблицы в DynamoDB.Первая таблица создается просто отлично, но во 2-й таблице возникает проблема с правами доступа, которая, похоже, связана с IAM.
Это инструмент безопасности python, который требует начальной настройки и частично создает две таблицы DynamoDB.,Я могу создать первую таблицу просто отлично, но сталкиваюсь с проблемами со второй таблицей.
Роль пользователя имеет широко открытые разрешения AWS, поэтому я не вижу, как это проблема.
Python3.7.3, если необходима версия.
Traceback (most recent call last):
File "argos_config_setup.py", line 28, in check_account_table
response = client.describe_table(TableName=argos_account_table)
File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException) when calling the DescribeTable operation: Requested resource not found: Table: argos_accounts not found
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "argos_config_setup.py", line 240, in <module>
check_account_table()
File "argos_config_setup.py", line 34, in check_account_table
create_account_table(argos_account_table)
File "argos_config_setup.py", line 103, in create_account_table
for accounts_itr in account_iterator:
File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/paginate.py", line 255, in __iter__
response = self._make_request(current_kwargs)
File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/paginate.py", line 332, in _make_request
return self._method(**current_kwargs)
File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the ListAccounts operation: You don't have permissions to access this resource.
ПОЛИТИКА AWS JSON
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Предполагается создание 2-й таблицы DynamoDB.
Ниже приведенофункция create_account_table
org_client = boto3.client('organizations')
paginator = org_client.get_paginator('list_accounts')
account_iterator = paginator.paginate()
accounts = []
for accounts_itr in account_iterator:
for account in accounts_itr['Accounts']:
accounts.append({'id': account['Id'], 'name': account['Name'], 'email': account['Email'],
'environment': ''})
dynamodb_client = boto3.client('dynamodb')
dynamodb_client.create_table(
AttributeDefinitions=[
{
"AttributeName": "id",
"AttributeType": "S"
}
],
TableName=argos_account_table,
KeySchema=[
{
"AttributeName": "id",
"KeyType": "HASH"
}
],
BillingMode='PAY_PER_REQUEST'
)
dynamodb_resource = boto3.resource('dynamodb')
table = dynamodb_resource.Table(argos_account_table)
with table.batch_writer() as batch:
for account in accounts:
batch.put_item(
Item={
'id': account['id'],
'name': account['name'],
'email': account['email'],
'environment': account['environment'],
}
)