Выходное значение apikey при формировании облаков - PullRequest
0 голосов
/ 24 октября 2019

У меня есть шаблон облачной информации, который выводит переменные. Одна из выходных переменных -

 ApiGKeyId:
    Description: "Api Key Id"
    Value: !Ref ApplicationApiGatewayApiKey

. Возвращает идентификатор ключа шлюза API, а не фактическое значение. Есть ли способ получить значение?

Ответы [ 2 ]

1 голос
/ 26 октября 2019

атрибут «Значение» не поддерживается в соответствии с нижеследующим потоком ~
https://github.com/awslabs/serverless-application-model/issues/206

Сторонние поддерживаемые доступные атрибуты с первого взгляда здесь: https://theburningmonk.com/cloudformation-ref-and-getatt-cheatsheet/

После некоторых исследований я почувствовал, что нет другого способа получить значение ApiKey, кроме использования Custom Resource, вызывающего лямбда-функцию. Вот мой пример кода фыр.

#######################################################
##### Start of Custom functions #####
#######################################################
ValueFunc:
  Type: AWS::Lambda::Function
  Properties:
    Code:
      ZipFile: >
        var response = require('cfn-response');
        var AWS = require('aws-sdk');

        exports.handler = function(event, context) {
          var apiKeyID = event.ResourceProperties.ApiKeyID;
          var apigateway = new AWS.APIGateway();
          var params = {
            apiKey: apiKeyID,
            includeValue: true
          };

          apigateway.getApiKey(params, function(err, ApiKeyData) {
            if (err) {
              console.log(err, err.stack); // an error occurred
              var responseData = { "mykey" : "error reading ApiKey" };
              response.send(event, context, response.SUCCESS, responseData);
            } else {
              console.log(ApiKeyData.value);      // successful response
              var responseData = { "mykey" : ApiKeyData.value };
              response.send(event, context, response.SUCCESS, responseData);
            }
          });
        };
    Handler: index.handler
    Runtime: nodejs8.10
    Timeout: 30
    Role: !Sub "arn:aws:iam::${AWS::AccountId}:role/${LambdaExecutionRole}"
GetApiKeyValue:
  Type: Custom::LambdaCallout
  Properties:
    ServiceToken: !GetAtt ValueFunc.Arn
    ApiKeyID: !Ref ApiKey
0 голосов
/ 31 октября 2019

Мне пришлось написать сценарий после развертывания, который будет считывать значение API-ключа и вставлять его в таблицу DynamodB DB. Я использовал комбинацию сценария bash и консоли aws.

Получить имя API-интерфейса из вывода облачной информации

awsApiGatewayKeyId = $ (get_cf_output ApiGKeyName)

С именем, которое вы называете get-api-key и передать KeyName

При использовании с include-значениями он возвращает ключ API в значении свойства

awsApiGatewayKey = $ (aws apigateway get-api-keys --name-query $ awsApiGatewayKeyId --include-values ​​--query 'items [0] .value' - выходной текст)

Вставить значения в Dynamodb для API Authorizer.

$ (aws Dynamodb Put-item --table-name $ tokenAuthTable --item '{"ApiKey": {"S": "'" $ awsApiGatewayKey "'"}, "HmacSigningKey": {"S": "'" $ csapiSecretKey "'"}, "Name": {"S": "'" $ stackName "'"}} ')

Для этого мне не нужно было выполнять ручную задачу по записи записи в Dynamodb.

Пожалуйста, обратитесь к этому URL ниже, чтобы получить ключ API. https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-api-key.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...