in Tools/LambdaTestTool/src/Amazon.Lambda.TestTool/Runtime/LambdaDefaultsConfigFileParser.cs [300:369]
private static void ProcessJsonServerlessTemplate(LambdaConfigInfo configInfo, string content)
{
var rootData = JsonDocument.Parse(content);
JsonElement resourcesNode;
if (!rootData.RootElement.TryGetProperty("Resources", out resourcesNode))
return;
foreach (var resourceProperty in resourcesNode.EnumerateObject())
{
var resource = resourceProperty.Value;
JsonElement typeProperty;
if (!resource.TryGetProperty("Type", out typeProperty))
continue;
var type = typeProperty.GetString();
JsonElement propertiesProperty;
if (!resource.TryGetProperty("Properties", out propertiesProperty))
continue;
if (!string.Equals("AWS::Serverless::Function", type, StringComparison.Ordinal) &&
!string.Equals("AWS::Lambda::Function", type, StringComparison.Ordinal))
{
continue;
}
string handler = null;
if (propertiesProperty.TryGetProperty("Handler", out var handlerProperty))
{
handler = handlerProperty.GetString();
}
else if(propertiesProperty.TryGetProperty("ImageConfig", out var imageConfigProperty) &&
imageConfigProperty.TryGetProperty("Command", out var imageCommandProperty))
{
if(imageCommandProperty.GetArrayLength() > 0)
{
// Grab the first element assuming that is the function handler.
var en = imageCommandProperty.EnumerateArray();
en.MoveNext();
handler = en.Current.GetString();
}
}
if (!string.IsNullOrEmpty(handler))
{
var functionInfo = new LambdaFunctionInfo
{
Name = resourceProperty.Name,
Handler = handler
};
if(propertiesProperty.TryGetProperty("Environment", out var environmentProperty) &&
environmentProperty.TryGetProperty("Variables", out var variablesProperty))
{
foreach(var property in variablesProperty.EnumerateObject())
{
if(property.Value.ValueKind == JsonValueKind.String)
{
functionInfo.EnvironmentVariables[property.Name] = property.Value.GetString();
}
}
}
configInfo.FunctionInfos.Add(functionInfo);
}
}
}