Как получить идентификатор учетной записи AWS в качестве пользовательской переменной в бессерверной среде? - PullRequest
4 голосов
/ 09 октября 2019

В бессерверной среде я хочу установить область развертывания как

<project_name>-<stage>-<account_id>

Я могу получить этап, используя пользовательскую переменную, например:

custom:
    stage: ${opt:stage, self:provider.stage}

, но как я могу получитьидентификатор учетной записи aws? Я уже пытался использовать псевдопараметры без сервера , как показано ниже, но безуспешно.

custom:
    account_id: #{AWS::AccountId}
plugins:
  - serverless-pseudo-parameters

Кто-то может помочь мне установить идентификатор учетной записи в качестве пользовательской переменной?

Ответы [ 3 ]

3 голосов
/ 09 октября 2019

Согласно документации , для получения идентификатора учетной записи вы можете использовать внешние js-файлы:

// myCustomFile.js
const { STS } = require('aws-sdk');
const sts = new STS();

module.exports.getAccountId = async () => {
  // Checking AWS user details
  const { Account } = await sts.getCallerIdentity().promise();
  return Account;
};

.

# serverless.yml
service: new-service
provider: aws
custom:
  accountId: ${file(../myCustomFile.js):getAccountId}
0 голосов
/ 09 октября 2019

Кажется, ваш синтаксис неправильный. Попробуйте

custom:
    account_id: ${AWS::AccountId}

Потому что, по крайней мере, в приведенном вами примере вы используете #{AWS::AccountId}

Обратите внимание на хэштег в вашем?

0 голосов
/ 09 октября 2019

Вы должны иметь доступ к ним ниже, как в примере ниже https://serverless.com/framework/docs/providers/aws/guide/variables/

Resources:


- 'Fn::Join':
      - ':'
      - - 'arn:aws:logs'
        - Ref: 'AWS::Region'
        - Ref: 'AWS::AccountId'
        - 'log-group:/aws/lambda/*:*:*'
...