8

次のような AWS Lambda 関数を作成しました。

  • JDBC URL 経由で Redshift にログオンします
  • クエリを実行します

ローカルでは、Node を使用して、JDBC 経由で Redshift インスタンスに正常に接続し、クエリを実行できます。

var conString = "postgresql://USER_NAME:PASSWORD@JDBC_URL”;
var client = new pg.Client(conString);
client.connect(function(err) {   
  if(err) {
            
      console.log('could not connect to redshift', err);
          
  }  
          
// omitted due to above error

ただし、AWS Lambda ( async#waterfallブロッ​​クにラップされている場所) で関数を実行すると、AWS Cloudwatch ログは、AWS Lambda 関数が 60 秒後にタイムアウトしたことを示しています。

私の機能が接続できない理由についてのアイデアはありますか?

4

2 に答える 2

2

Redshift セキュリティ グループをすべてのソースに対して公開するか、または何も公開しないかのどちらかだと思います。Lambda 関数は固定アドレスまたは固定範囲の IP アドレスで実行されていないため、ユーザーに対して完全に透過的です (別名サーバーレス)。

昨日、Amazon が VPC をサポートする新しい Lambda 機能を発表したのを見ました。VPC で Redshift クラスターを実行できれば、これで問題が解決するのではないかと思います。

于 2015-10-10T04:50:51.550 に答える
1

serverless-framework v1.5.0 を使用している場合は、以下を追加する必要があります。

iamRoleStatements: - Effect: Allow Action: - ec2:CreateNetworkInterface Resource: '*' - Effect: Allow Action: - ec2:DeleteNetworkInterface - ec2:DescribeNetworkInterfaces Resource: 'arn:aws:ec2:${self:provider.region}:*:network-interface/*'

また、以下のように、すべての securityGroupIds をインバウンド ルールに追加する必要があります。 スクリーンショット 2017-01-09 23 02 33

詳細: https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

于 2017-01-10T01:22:56.967 に答える