AWS Lambda函数无法与SQL Server RDS实例建立连接

时间:2017-08-15 04:26:38

标签: sql-server amazon-web-services amazon-s3 aws-lambda

我已经在.NET核心中编写了以下小型Lambda函数用于测试目的。它在S3存储桶中的PUT上触发,并应在CloudWatch中显示对象名称,并将对象名称插入RDS实例中的表中。

以下是代码:

  public async Task<string> FunctionHandler(S3Event evnt, ILambdaContext context)
        {
            context.Logger.LogLine("context.Logger.LogLine function begin");
            var s3Event = evnt.Records?[0].S3;
            if(s3Event == null)
            {
                context.Logger.LogLine("No S3 Events recorded");
                return null;
            }

            try
            {
                var response = await this.S3Client.GetObjectMetadataAsync(s3Event.Bucket.Name, s3Event.Object.Key);
                context.Logger.LogLine("S3 Key: " + s3Event.Object.Key.ToString());
                var connectionString = Environment.GetEnvironmentVariable("ConnectionString");
                SqlConnection c = new SqlConnection(connectionString);
                c.Open(); 

                SqlCommand cmd = new SqlCommand("INSERT INTO LambdaTestTable (ValueText) VALUES('" + s3Event.Object.Key + "')", c);
                cmd.ExecuteNonQuery();
                c.Close();
                return response.Headers.ContentType;
            }
            catch(Exception e)
            {
                context.Logger.LogLine($"Error getting object {s3Event.Object.Key} from bucket {s3Event.Bucket.Name}. Make sure they exist and your bucket is in the same region as this function.");
                context.Logger.LogLine(e.Message);
                context.Logger.LogLine(e.StackTrace);
                throw;
            }
        }

我在CloudWatch中获得以下输出:

  

START RequestId:15c5eddb-8171-11e7-af34-251688cfddb2版本:$ LATEST   Console.WriteLine函数开始context.Logger.LogLine函数开始   S3键:TaskTemplate.dp发现错误获取对象时出错   来自bucket api-dev-dpstorage-s3的TaskTemplate.dp。确保它们存在   并且您的存储桶与此功能位于同一区域。一个   建立时发生与网络相关或特定于实例的错误   与SQL Server的连接。服务器未找到或未找到   无障碍。验证实例名称是否正确以及SQL   服务器配置为允许远程连接。 (提供者:TCP   提供程序,错误:40 - 无法打开与SQL Server的连接)

我在这里不清楚两个错误。首先,当CloudWatch成功显示我的对象密钥,一旦文件被PUT到存储桶,它就会出现错误,说它无法找到对象?其次,它尝试连接到SQL RDS实例时出现网络/实例错误。我正在使用一个连接字符串,该字符串由另一个应用程序在EC2实例中成功使用。

0 个答案:

没有答案