2015-02-01 17 views
7

Tôi tạo ra một chức năng AWS Lambda rằng:conecting AWS Lambda để dịch chuyển đỏ - Times ra sau 60 giây

  • log vào chuyển đỏ qua JDBC URL
  • chạy một truy vấn

tại địa phương, sử dụng Node , Tôi có thể kết nối thành công với cá thể Redshift thông qua JDBC và thực thi truy vấn.

var conString = "postgresql://USER_NAME:[email protected]_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 

Tuy nhiên, khi tôi thực hiện các chức năng trên AWS Lambda (nơi nó được bọc trong một khối async#waterfall), AWS Cloudwatch bản ghi nói với tôi rằng các chức năng AWS Lambda timed out sau 60 giây.

Bất kỳ ý tưởng nào về lý do chức năng của tôi không thể kết nối?

Trả lời

3

Tôi thấy đó là bạn mở nhóm bảo mật Redshift của bạn công khai với tất cả các nguồn hoặc không có nguồn nào. Bởi vì một hàm Lambda không chạy trên một địa chỉ cố định hoặc thậm chí là một dải địa chỉ IP cố định, hoàn toàn trong suốt đối với người dùng (máy chủ AKA).

Tôi vừa thấy Amazon đã công bố tính năng Lambda mới để hỗ trợ VPC ngày hôm qua. Tôi đoán nếu chúng ta có thể chạy một cụm Redshift trong một VPC, điều này có thể giải quyết vấn đề.

1

Nếu bạn đang sử dụng serverless-framework v1.5.0, bạn nên thêm:

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

Cũng nên thêm tất cả securityGroupIds để Rules Inbounds, như dưới đây: screenshot 2017-01-09 23 02 33

Thông tin thêm: https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

1

Quay lại một bước, tôi khuyên bạn nên sử dụng Kinesis [1] firehose để kết nối lambda và redshift. Đây là cách tiếp cận tốt hơn như được đề xuất trong tài liệu [2].

Kinesis có thể sử dụng s3 làm bộ nhớ trung gian để đẩy dữ liệu sang chuyển đổi màu đỏ bằng lệnh sao chép, tự động.

"Một lệnh COPY là cách hiệu quả nhất để tải một bảng. Bạn có thể cũng thêm dữ liệu vào bảng của bạn sử dụng các lệnh INSERT, mặc dù nó là nhiều kém hiệu quả hơn so với sử dụng COPY"

Chú thích: [1] http://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html

[2] http://docs.aws.amazon.com/redshift/latest/dg/t_Loading_data.html.

Các vấn đề liên quan