要让Lambda函数能够连接EC2上运行的MySQL数据库,需要通过VPC(虚拟专用网络)来连接它们。这需要在Lambda函数和EC2实例之间创建一个VPC连接,以便他们可以使用相同的网络。
下面是一个示例代码,展示如何使用Node.js创建一个具有VPC连接的Lambda函数:
var AWS = require('aws-sdk');
var mysql = require('mysql');
exports.handler = function(event, context, callback) {
// Set AWS region
AWS.config.update({
region: 'us-west-2'
});
// Get the VPC ID, subnet ID, and security group ID for the Lambda function
var vpcConfig = {
"SubnetIds": [ "subnet-12345678" ],
"SecurityGroupIds": [ "sg-12345678" ]
};
// Create a new VPC-enabled Lambda client
var lambda = new AWS.Lambda({
"vpcConfig": vpcConfig
});
// Create a new MySQL connection
var connection = mysql.createConnection({
host : 'EC2_INSTANCE_IP_ADDRESS',
user : 'MYSQL_USER',
password : 'MYSQL_PASSWORD',
database : 'MYSQL_DB'
});
// Connect to the MySQL database
connection.connect();
// Perform MySQL query
connection.query('SELECT 1 + 1 AS solution', function(err, rows) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
// Close MySQL connection
connection.end();
// Call the Lambda function
lambda.invoke({
FunctionName: 'MY_LAMBDA_FUNCTION_NAME',
Payload: JSON.stringify(event, null, 2),
InvocationType: 'Event'
}, function(error, data) {
if (error) {
callback(error);
} else {
callback(null, 'Successfully invoked Lambda function');
}
});
});
};
在上述代码中,需要将subnet-12345678
和sg-12345678
替换为Lambda函数所在的子网和安全组ID。同时,需要将EC2_INSTANCE_IP_ADDRESS
、MYSQL_USER
、MYSQL_PASSWORD
和MYSQL_DB
分别替换为正确的值。
通过创建一个VPC连接, Lambda函数和MySQL数据库之间可以进行连接并执行查询。