Googlescript и AWS SDK

Я хочу взаимодействовать с Amazon Web Services DynamoDB в таблице Google с помощью кода в GoogleScript. Однако я не могу понять, как интегрировать AWS SDK. Я надеюсь избежать написания библиотеки для обработки интеграции через AWS HTTP API, поскольку для SDK доступны SDK JavaScript и Java. Помощь?

(Я провел довольно обширный поиск в Google и Stack Overflow. Это это самое близкое к ответу, что я нашел, но это Google App Engine, а не скрипт Google Apps.)

Спасибо!


person heights1976    schedule 31.12.2015    source источник
comment
Вы видели часть на той странице, на которую вы указали ссылку, где они сказали, что GAS не имеет встроенной поддержки XHR, которая является неотъемлемой частью правильного функционирования SDK? Похоже, это не сработает. У AWS есть SDK для JavaScript в браузере и для JavaScript в среде NodeJS. Я не думаю, что любой из них будет работать в среде Google Script. Также не уверен, почему вы указываете, что существует Java SDK, который совершенно не имеет отношения к работе с JavaScript, если вы не ошибочно думаете, что Java и JavaScript каким-то образом связаны.   -  person Mark B    schedule 31.12.2015
comment
Спасибо за ответ. Я новичок в GoogleScript и не был уверен, будет ли уместно существование Java SDK, поэтому я включил его. Этот конкретный респондент утверждает, что GAS не поддерживает XHR, но команда Google Apps Script представила свою песочницу IFRAME, что заставляет меня думать, что есть способ делать вызовы XHR здесь и здесь. Возможно, я совершенно не понимаю фреймворк.   -  person heights1976    schedule 01.01.2016


Ответы (4)


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

Например:

function myFunction() {
  AWS.init("MY_ACCESS_KEY", "MY_SECRET_KEY");
  var instanceXML = AWS.request('ec2', 'us-east-1', 'DescribeInstances', {"Version":"2015-10-01"});
  ...
}

Я поместил его в репо с некоторой документацией для использования. Вот ссылка: https://github.com/smithy545/aws-apps-scripts

person smithy545    schedule 17.06.2016
comment
Привет. Можете ли вы подтвердить, что ваш код aws.js не охватывает случай, когда параметры вызова сами являются объектами. мне кажется, что вызов encodeURIComponent (JSON.stringify ()) необходим, чтобы иметь возможность передавать объекты json в запросах GET .... - person user2123288; 28.06.2016
comment
@ user2123288 ну, обычно, когда вы используете почтовый запрос и передаете параметры как полезную нагрузку строки json - person smithy545; 28.06.2016
comment
Обратите внимание, что для некоторых служб может потребоваться изменить заголовки. Например, чтобы заставить Comprehend работать, потребовалось изменить X-Amz-Target на другой формат действия, например Comprehend_20171127.DetectSentiment, а Content-type должен быть application / x-amz-json-1.1. (В противном случае возникают ошибки, такие как Невозможно определить имя службы / операции для авторизации.) - person Tomty; 23.01.2019

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

В приведенных ниже инструкциях описывается настройка API Gateway, Lambda и DynamoDb. После настройки вы можете напрямую использовать URLFetch в GAS для своего шлюза API.

http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html

Код в ссылке AWS завершен и не требует дополнительной настройки для работы напрямую с использованием URL Fetch. Однако вы можете включить безопасность на API Gateway.

Со стороны ГАЗА -

var headers = {
  "x-api-key" : AWS_KEY
};    

var event = {};
event.operation = "create";
event.tableName = AWS_DB_NAME;
event.payload.Item = yourDataObjwithKey;

var options = {
  "method":"POST",
  "headers":headers,
  "payload":JSON.stringify(event)
};    

var url = AWS_GW;
var response = UrlFetchApp.fetch(url, options);
person pdholakia    schedule 10.10.2017

Недавно я добавил свою собственную производную от AWS через скрипт Google Apps здесь: https://github.com/neilobremski/gas/blob/main/GasAWS.js

Код JavaScript здесь немного более современный и, в частности, использует служебные программы. доступный в Google Apps Script для материала SHA-256, а не заброшенный (но отличный!) Crypto -JS.

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

person Neil C. Obremski    schedule 09.07.2021

Я собираюсь реализовать это, и похоже, что лучший способ - использовать функцию Lambda для запроса DynamoDB через API-шлюз.

Это действительно не так сложно, если вы знаете NodeJS.

person turtlepower    schedule 15.06.2016
comment
Хотя я ценю ответ, я не уверен, насколько ценно указать на то, что что-то не так сложно сделать, если вы уже знаете, как это сделать. Я почти уверен, что цель этого сайта - рассказать, как что-то делать. - person heights1976; 16.06.2016
comment
Если вы дадите мне знать, какое взаимодействие между ними вы хотите, я могу опубликовать пример кода в NodeJS и рассказать, как это работает. Короче говоря, вам понадобится сценарий NodeJS, который взаимодействует с DynamoDB, а затем загрузите его в Lambda. Наконец, шлюз API, который вызывает функцию Lambda. - person turtlepower; 16.06.2016
comment
да, вопрос заключается в настройке доступа к API-шлюзу в среде Apps Script, а не в том, лучше ли проходить через severless-Lambda или напрямую в базу данных ..... если только таким образом невозможно упростить должным образом защищенные запросы , т.е. - это другой API - person Mike M; 26.09.2019