Я хочу создать ARN в моем файле динамически, но мне нужно получить текущий текущий аккаунт. Как я могу получить к нему доступ в виде переменной?
Например:
example: arn:aws:states:${region}:${accountId}:stateMachine:${self:service}-${self:custom.stage}-example
Каков правильный способ ссылки на текущие region
и accountId
?
Изменить: (решение)
Я не очень доволен этим решением из-за уродства и многословия решения Fn::Join
, но то, что я закончил, делает файл arns.yml
, который имеет все это только в одном месте, а затем ссылается затем по переменной в другом месте.
# arns.yml
example:
Fn::Join:
- ":"
- - arn
- aws
- states
- Ref: AWS::Region
- Ref: AWS::AccountId
- stateMachine
- ${self:service}-${self:custom.stage}-example
Тогда:
# serverless.yml
custom:
stage: "${opt:stage, self:provider.stage}"
functions:
foo:
handler: handler.foo
environment:
example_arn: ${file(arns.yml):example}
Изменить 2: (лучшее решение)
Это может показаться хромым, но решение, с которым я столкнулся, состоит в том, чтобы просто скопировать его в мои пользовательские переменные. У меня на самом деле есть две учетные записи, и я использую настраиваемый шаг сборки для копирования двух файлов с настройками учетной записи:
account.stag.yml
account.prod.yml
Каждый файл может выглядеть так:
# account.stag.yml
account: 123456789
region: ${opt:region, "us-east-1"}
domain: mycompany.qa
Когда я создаю, я указываю учетную запись, и я использую gulp для выполнения всего моего здания:
gulp build --account stag
Затем, переименовывая мои собственные настройки учетной записи в
build/account.yml
И я могу ссылаться на него в моем serverless.yml так:
# build/serverless.yml
custom: ${file(account.yml)}
functions:
foo:
handler: handler.foo
environment:
example_arn: arn:aws:states:${self:custom.region}:${self:custom.account}:${self:service}-${opt:stage}-example