LoginSignup
0
1

More than 1 year has passed since last update.

Lambda関数からAmazon SQSにデータを送信する時ハマったこと

Posted at

はじめに

Lambda関数からAmazon SQSにデータを送信する時、ハマったことがあったので備忘録として残しておく。

前提条件

  • Lambda関数からAmazon SQSにデータを送信する
  • Lambda関数はVPC内のプライベートサブネットに設置している
  • Lambda関数のIAMロールはAmazon SQSに対してフルアクセス権限を付与している
  • Lambda関数はNode.jsで作成

起こったこと

上記前提条件のもとLambda関数を実行するとタイムアウトしてしまった。
そのときのソースと実行結果はこちら
AWS公式サンプルソースのほぼコピペ
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/sqs-examples-send-receive-messages.html

var AWS = require('aws-sdk');
AWS.config.update({region: 'ap-northeast-1'});

var sqs = new AWS.SQS({apiVersion: '2012-11-05'});

var params = {
  DelaySeconds: 0,
  MessageBody: "TestMessageBody",
  QueueUrl: "https://sqs.ap-northeast-1.amazonaws.com/123456789012/TestSQS"
};

exports.handler = async (event) => {
    try {
      const data = await sqs.sendMessage(params).promise();
      console.log("Success", data.MessageId);
    } catch (e) {
      console.log("Error", e);
    }

    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

image.png

原因

いろいろと調べた結果、プライベートサブネットからAmazon SQSにデータを送信するときは「VPCエンドポイント」を作成して、それを経由してデータ送信しなければいけないという事が分かった。
いつもありがとう、stack overflow。
https://stackoverflow.com/questions/54049143/sending-sqs-message-timeout

対処法

早速VPCエンドポイントを作成して試してみる
image.png
image.png
image.png
image.png

Lambdaのソースも以下のSQSインスタンスを作るところにエンドポイントを追記しました。

var sqs = new AWS.SQS({
    apiVersion: '2012-11-05',
    endpoint: 'https://vpce-088eXXXXXXXXXXXX.sqs.ap-northeast-1.vpce.amazonaws.com'
});

結果

上手く行きました。
image.png

SQSでメッセージも確認できました。
image.png

現場からは以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1