Nano Hash - криптовалюты, майнинг, программирование

ApiGateway CloudFormation без лямбда

Я пытаюсь создать шаблон, чтобы при вызове api/divide/inputvalue API отправлял ответ от DynamoDB, который соответствует сопоставлению inputvalue.

Это довольно просто, так как я извлекаю значение непосредственно из базы данных без какой-либо бизнес-логики, поэтому мне не нужна лямбда. Но все примеры, которые я гуглю, или все учебники используют лямбда-выражения, и теперь я не понимаю, как я могу заставить его работать без лямбда-выражений.

Это то, что у меня есть до сих пор. В этом шаблоне прямо сейчас есть ошибка, так как я не предоставил Uri в ApiGateway::Method. На чем я сейчас застрял.

{

  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "Deployment": {
      "Type": "AWS::ApiGateway::Deployment",
      "Properties": {
        "RestApiId": { "Ref": "restApiName" },
        "Description": "First Deployment",
        "StageName": "StagingStage"
      },
      "DependsOn" : ["restApiMethod"]
    },
    "restApiMethod": {
      "Type": "AWS::ApiGateway::Method",
      "Properties": {
        "AuthorizationType": "NONE",
        "HttpMethod": "GET",
        "ResourceId": {"Ref": "apiRestResource"},
        "RestApiId": {"Ref": "restApiName"},
        "Integration": {
          "Type": "AWS",
          "IntegrationHttpMethod": "GET",
          "IntegrationResponses": [{"StatusCode": 200}],
          "Uri": { "Fn::Sub":"arn.aws.apigateway:${AWS::Region}:dynamodb:action/${restApiName.Arn}"}
        },
        "MethodResponses": [{"StatusCode": 200}]
      },
      "DependsOn": ["apiRestResource"]
    },
    "apiRestResource": {
      "Type": "AWS::ApiGateway::Resource",
      "Properties": {
        "RestApiId": {"Ref": "restApiName"},
        "ParentId": {
          "Fn::GetAtt": ["restApiName","RootResourceId"]
        },
        "PathPart": "divide"
      },
      "DependsOn": ["restApiName"]
    },
    "restApiName": {
      "Type": "AWS::ApiGateway::RestApi",
      "Properties": {
        "Name": "CalculationApi"
      }
    }
 }
}

Ответы:


1

Согласно документации, Uri имеет следующую структуру для AWS типов интеграции сервис-прокси:

Если вы укажете AWS для свойства Type, укажите сервис AWS в следующем формате: arn:aws:apigateway:region:subdomain.service|service:path|action/service_api. Например, URI лямбда-функции имеет следующий вид: arn:aws:apigateway:region:lambda:path/path. Путь обычно имеет вид /2015-03-31/functions/LambdaFunctionARN/invocations. Для получения дополнительной информации см. свойство uri для ресурс Integration в справочнике REST API Amazon API Gateway. .

Подробнее см. в справочнике по свойству uri API Gateway. :

Для интеграции с AWS URI должен иметь форму arn:aws:apigateway:{region}:{subdomain.service|service}:{path|action}/{service_api}. Region, subdomain и service используются для определения правильной конечной точки. Для сервисов AWS, использующих параметр строки запроса Action=, service_api должно быть допустимым действием для нужного сервиса. Для сервисных API RESTful AWS path используется для указания того, что оставшаяся подстрока в URI должна рассматриваться как путь к ресурсу, включая начальный /.

Для прокси-сервера службы AWS к службе dynamodb, вызывающей Query. Действие, Uri должно быть примерно таким (используя Краткая форма YAML для Fn::Sub чтобы вставить Ref для текущий регион AWS):

!Sub "arn:aws:apigateway:${AWS::Region}:dynamodb:action/Query"

Что касается вашего более широкого варианта использования API Gateway для доступа к DynamoDB без использования функций Lambda, обратитесь к сообщению в блоге с руководством Эндрю Бэрда, "Использование Amazon API Gateway в качестве прокси-сервера для DynamoDB" и транслировать указанные шаги консоли управления в соответствующие ресурсы шаблона CloudFormation. .

02.02.2017
  • Спасибо. Это было полезно. Я уже смотрел на URL-адрес службы, когда увидел ваш ответ. Я обновил шаблон. Теперь часть, на которой я застрял, - это получить параметр пути в моем случае inputvalue из URL-адреса api/divide/inputvalue и использовать его запрос dynamodb. Я просматривал docs.aws. amazon.com/AWSCloudFormation/latest/UserGuide/ пример, чтобы увидеть, как я могу это сделать, но полученный шаблон выдал мне ошибку, что resource attribute restApiName.Arn недействителен. 03.02.2017
  • Вы должны иметь возможность определить RequestParameters в restApiMethod и ссылаться на него в шаблоне запроса на интеграцию. 13.02.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..