2015-10-25 21 views
12

Tôi có một hàm AWA Lambda cần kết nối với dịch vụ TCP từ xa. Có cách nào để cấu hình chức năng Lambda với địa chỉ IP của dịch vụ từ xa sau khi hàm lambda đã được triển khai cho AWS không? Hoặc tôi có phải nướng cấu hình vào hàm Lambda được đóng gói trước khi nó được triển khai không?cấu hình thời gian chạy cho hàm AWS Lambda

+0

Có thể có rất nhiều cách để thực hiện điều đó. Ví dụ, bạn có thể có hàm Lambda đọc một cấu hình từ một bảng DynamoDB. Hoặc bạn có thể yêu cầu nó lắng nghe chủ đề SNS và nhận địa chỉ IP từ một tin nhắn được đăng lên chủ đề đó. Hoặc bạn có thể đọc một tập tin cấu hình từ một thùng S3. – garnaat

Trả lời

1

Bạn có thể gọi hàm Lambda qua đăng ký chủ đề SNS và tự cấu hình nó từ tải trọng bên trong sự kiện SNS.

Đây là hướng dẫn chính thức về cách thực hiện điều đó Invoking Lambda via SNS.

4

Tôi đã tìm thấy cách mà tôi sử dụng để hỗ trợ môi trường thử nghiệm và môi trường sản xuất sẽ giúp bạn.

Đối với phiên bản thử nghiệm của hàm, tôi gọi nó là TEST-ConnectToRemoteTcpService và cho phiên bản sản xuất của hàm tôi đang đặt tên hàm PRODUCTION-ConnectToRemoteTcpService. Điều này cho phép tôi kéo ra tên môi trường bằng cách sử dụng một biểu thức chính quy.

Sau đó, tôi lưu trữ config/test.jsonconfig/production.json trong tệp zip mà tôi tải lên làm mã cho hàm. Tệp zip này sẽ được trích xuất vào thư mục process.env.LAMBDA_TASK_ROOT khi hàm chạy. Vì vậy, tôi có thể tải tập tin đó và nhận được cấu hình tôi cần.

Một số người không thích lưu trữ cấu hình trong tệp zip mã, điều này là tốt - bạn chỉ có thể tải tệp từ S3 hoặc sử dụng bất kỳ chiến lược nào bạn muốn.

Mã để đọc các tập tin từ zip:

const readConfiguration =() => { 
    return new Promise((resolve, reject) => { 
    let environment = /^(.*?)-.*/.exec(process.env.AWS_LAMBDA_FUNCTION_NAME)[1].toLowerCase(); 
    console.log(`environment is ${environment}`); 

    fs.readFile(`${process.env.LAMBDA_TASK_ROOT}/config/${environment}.json`, 'utf8', function (err,data) { 
     if (err) { 
     reject(err); 
     } else { 
     var config = JSON.parse(data); 
     console.log(`configuration is ${data}`); 
     resolve(config); 
     } 
    }); 
    }); 
}; 
0

Một vài lựa chọn, tùy thuộc vào việc sử dụng hợp cụ thể

  • Nếu cấu hình của bạn sẽ không thay đổi thì bạn có thể sử dụng đối tượng S3 và truy cập từ Lambda hoặc đặt Lambda của bạn để kích hoạt các thay đổi cấu hình mới. (Mặc dù đây là cách rẻ nhất, bạn bị hạn chế về những gì bạn có thể làm so với các giải pháp thay thế khác)
  • Nếu cấu hình thay đổi liên tục, thì DynamoDB - Khóa/giá trị là một giải pháp thay thế.
  • Nếu DynamoDB tốn kém cho việc đọc/ghi thường xuyên và không đáng giá trị thì bạn có thể có cấu hình bài dịch vụ TCP thành hàng đợi SQS. (hoặc SNS nếu bạn muốn kích hoạt khi dịch vụ đăng cấu hình mới)
4

Hỗ trợ cho biến môi trường là added cho AWS Lambda bắt đầu từ ngày 18 tháng 11 năm 2016. Việc thêm biến vào hàm hiện có có thể được thực hiện thông qua lệnh như được hiển thị bên dưới hoặc từ Bảng điều khiển AWS.

aws lambda update-function-configuration \ 
    --function-name MyFunction \ 
    --environment Variables={REMOTE_SERVICE_IP=100.100.100.100} 

Tài liệu có thể được tìm thấy here.

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