Запустите сервис AWS по регионам - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь использовать SNS, расположенный в Сан-Паулу (sa-east-1), из лямбда-функции (Node.js 8.10) в Огайо (us-east-2).Я впервые пытаюсь использовать сервис AWS, расположенный в другом регионе.Пока что это то, что я делаю:

//init aws resources
const AWS = require('aws-sdk');
const sns = new AWS.SNS({apiVersion: '2010-03-31', region: 'sa-east-1'});

//promisefy AWS.SNS.createPlatformEndpoint method
snsCreatePlatformEndpoint = params => new Promise(
  (resolve, reject)=>{
    sns.createPlatformEndpoint(params, function(error, data){
      if (error) { reject(error); }
      else { resolve(data); }
    });
  }
);

exports.handler = (awsEvent, context, callback) => {
  //parse stuff in here
  ...

  HandleToken(token, callback);
};

async function HandleToken(token, callback){
  try{
    let params = {
      PlatformApplicationArn: process.env.PlatAppArn, 
      Token: token,
    };
    console.log('params:', params); // this prints as expected
    let {EndpointArn} = await snsCreatePlatformEndpoint(params);
    console.log('It should pass through here'); // it is not printed
    //returns a success response
    ...
  } catch (error) {
    //returns an error response
    ...
  }
}

Я установил очень большое время ожидания для своей лямбда-функции: 5 минут.

Я также протестировал тот же код для лямбда-функции, расположенной в Сан-Паулу (sa-east-1), и она работает.

Я получил следующую ошибку на моем клиенте:«Запрос не выполнен с кодом состояния 504» «Тайм-аут запроса конечной точки»

Вопрос: Как правильно использовать SNS в другом регионе AWS?

1 Ответ

2 голосов
/ 14 мая 2019

Вам не нужно выполнять какие-либо специальные настройки, кроме установки региона.

Например, я использую следующий шаблон для отправки уведомлений из us-east-1 в Токио (ap-northeast-1):

// this lambda runs in us-east-1

let AWS = require("aws-sdk");
AWS.config.update({ region: "ap-northeast-1" }); // asia-pacific region

exports.handler = async (event, context) => {
    var params = {
      Message: 'my payload',
      TopicArn: 'arn:aws:sns:ap-northeast-1:xxxxxx:tokyoSNS'
    };

    let SNS = new AWS.SNS({apiVersion: '2010-03-31'});
    var data = await SNS.publish(params).promise();

    // check if successful then return    
}

Конечные точки и т. Д. Не были настроены.Вы обязаны запустить свою лямбду в VPC?Это единственное осложнение, о котором я могу думать в данный момент.

...