При создании ресурсов с помощью файла serverless.yml возникает проблема с созданием имени пула идентификаторов. Потому что имя нашего сервиса содержит —, и мы добавляем его ко всем ресурсам, созданным в AWS. Однако имя пула удостоверений может содержать только цифры, буквы, символы подчеркивания и пробелы.
// serverless.yml
service: hello-world
provider:
name: aws
stage: dev
custom:
stage: ${opt:stage, self:provider.stage}
prefix: ${self:service}
identity_pool_name: ${self:custom.prefix}-identity-pool
resources:
Resources:
CongitoIdentityPool:
Type: AWS::Cognito::IdentityPool
Properties:
IdentityPoolName: ${self:custom.identity_pool_name}
...
Проблема в том, что мы не хотим переименовывать службу только для того, чтобы соответствовать требованиям к именованию пула удостоверений. Но хорошая новость заключается в том, что в файле yml есть функция Javascript, которая может выполнить эту работу! Он вернет запрограммированное значение обратно в файл конфигурации yml.
// serverless.yml (updated)
service: assets-manangement
provider:
name: aws
stage: dev
custom:
stage: ${opt:stage, self:provider.stage}
prefix: ${self:service}
resources:
Resources:
CongitoIdentityPool:
Type: AWS::Cognito::IdentityPool
Properties:
IdentityPoolName: ${file(./config.js):identityPoolName}
...
В config.js у вас есть доступ к serverless объекту
Бинго! Теперь пул идентификаторов создан с допустимым именем hello_world_dev_identity_pool.