Вам придется прыгнуть через несколько обручей, чтобы попасть туда.
Ограничения слияния файлов
Безсерверная структура позволяет импортировать файлы в любом месте конфигурации, но только объединяет resources
и functions
разделов.
Ваш пример:
provider:
iamRoleStatements:
- ${file(__environments.yml):dev.iamRoleStatements, ''}
- ${file(custom.yml):provider.iamRoleStatements, ''}
В результате получается массив таких массивов:
{
"provider": {
"iamRoleStatements": [
[
{
"Effect": "Allow",
"Action": "execute-api:Invoke",
"Resource": "*"
}
],
[
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
]
}
}
Вы можете иметь возможность отправить очень небольшой запрос на удаление, чтобы исправить это.
Управляемые политики IAM с использованием ссылок
Возможно, можно определить каждую из ваших ролей IAM в качестве пользовательских ресурсов и использовать iamManagedPolicies
config провайдера для указания на каждый из этих ресурсов. Примерно так:
provider:
name: aws
iamManagedPolicies:
- Ref: DevIamRole
- Ref: CustomIamRole
resources:
- ${file(__environments.yml):resources, ''}
- ${file(custom.yml):resources, ''}
Конечно, вам нужно изменить структуру этих двух файлов, чтобы они были AWS::IAM::Role
ресурсами.
Пользовательская роль IAM
Каркас также дает вам возможность получить полный контроль, что полностью задокументировано .
Надеюсь, это поможет.