in src/Amazon.Lambda.Tools/Commands/UpdateFunctionConfigCommand.cs [258:472]
private UpdateFunctionConfigurationRequest CreateConfigurationRequestIfDifferent(GetFunctionConfigurationResponse existingConfiguration, string dotnetSharedStoreValue)
{
bool different = false;
var request = new UpdateFunctionConfigurationRequest
{
FunctionName = this.GetStringValueOrDefault(this.FunctionName, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_NAME, true)
};
var description = this.GetStringValueOrDefault(this.Description, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_DESCRIPTION, false);
if (!string.IsNullOrEmpty(description) && !string.Equals(description, existingConfiguration.Description, StringComparison.Ordinal))
{
request.Description = description;
different = true;
}
var role = this.GetStringValueOrDefault(this.Role, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_ROLE, false);
if (!string.IsNullOrEmpty(role))
{
string fullRole;
if (role.StartsWith(LambdaConstants.IAM_ARN_PREFIX))
fullRole = role;
else
fullRole = RoleHelper.ExpandRoleName(this.IAMClient, role);
if (!string.Equals(fullRole, existingConfiguration.Role, StringComparison.Ordinal))
{
request.Role = fullRole;
different = true;
}
}
var memorySize = this.GetIntValueOrDefault(this.MemorySize, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_MEMORY_SIZE, false);
if(memorySize.HasValue && memorySize.Value != existingConfiguration.MemorySize)
{
request.MemorySize = memorySize.Value;
different = true;
}
var timeout = this.GetIntValueOrDefault(this.Timeout, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_TIMEOUT, false);
if (timeout.HasValue && timeout.Value != existingConfiguration.Timeout)
{
request.Timeout = timeout.Value;
different = true;
}
var layerVersionArns = this.GetStringValuesOrDefault(this.LayerVersionArns, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_LAYERS, false);
if(layerVersionArns != null && AreDifferent(layerVersionArns, existingConfiguration.Layers?.Select(x => x.Arn)))
{
request.Layers = layerVersionArns.ToList();
different = true;
}
var subnetIds = this.GetStringValuesOrDefault(this.SubnetIds, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_SUBNETS, false);
if (subnetIds != null)
{
if (request.VpcConfig == null)
{
request.VpcConfig = new VpcConfig();
}
request.VpcConfig.SubnetIds = subnetIds.ToList();
if (existingConfiguration.VpcConfig == null || AreDifferent(subnetIds, existingConfiguration.VpcConfig.SubnetIds))
{
different = true;
}
}
var securityGroupIds = this.GetStringValuesOrDefault(this.SecurityGroupIds, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_SECURITY_GROUPS, false);
if (securityGroupIds != null)
{
if (request.VpcConfig == null)
{
request.VpcConfig = new VpcConfig();
}
request.VpcConfig.SecurityGroupIds = securityGroupIds.ToList();
if (existingConfiguration.VpcConfig == null || AreDifferent(securityGroupIds, existingConfiguration.VpcConfig.SecurityGroupIds))
{
different = true;
}
}
var deadLetterTargetArn = this.GetStringValueOrDefault(this.DeadLetterTargetArn, LambdaDefinedCommandOptions.ARGUMENT_DEADLETTER_TARGET_ARN, false);
if (deadLetterTargetArn != null)
{
if (!string.IsNullOrEmpty(deadLetterTargetArn) && !string.Equals(deadLetterTargetArn, existingConfiguration.DeadLetterConfig?.TargetArn, StringComparison.Ordinal))
{
request.DeadLetterConfig = existingConfiguration.DeadLetterConfig ?? new DeadLetterConfig();
request.DeadLetterConfig.TargetArn = deadLetterTargetArn;
different = true;
}
else if (string.IsNullOrEmpty(deadLetterTargetArn) && !string.IsNullOrEmpty(existingConfiguration.DeadLetterConfig?.TargetArn))
{
request.DeadLetterConfig = null;
request.DeadLetterConfig = existingConfiguration.DeadLetterConfig ?? new DeadLetterConfig();
request.DeadLetterConfig.TargetArn = string.Empty;
different = true;
}
}
var tracingMode = this.GetStringValueOrDefault(this.TracingMode, LambdaDefinedCommandOptions.ARGUMENT_TRACING_MODE, false);
if (tracingMode != null)
{
var eTraceMode = !string.Equals(tracingMode, string.Empty) ? Amazon.Lambda.TracingMode.FindValue(tracingMode) : null;
if (eTraceMode != existingConfiguration.TracingConfig?.Mode)
{
request.TracingConfig = new TracingConfig();
request.TracingConfig.Mode = eTraceMode;
different = true;
}
}
var kmsKeyArn = this.GetStringValueOrDefault(this.KMSKeyArn, LambdaDefinedCommandOptions.ARGUMENT_KMS_KEY_ARN, false);
if (!string.IsNullOrEmpty(kmsKeyArn) && !string.Equals(kmsKeyArn, existingConfiguration.KMSKeyArn, StringComparison.Ordinal))
{
request.KMSKeyArn = kmsKeyArn;
different = true;
}
var environmentVariables = GetEnvironmentVariables(existingConfiguration?.Environment?.Variables);
// If runtime package store layers were set, then set the environment variable to tell the .NET Core runtime
// to look for assemblies in the folder where the layer will be expanded.
if(!string.IsNullOrEmpty(dotnetSharedStoreValue))
{
if(environmentVariables == null)
{
environmentVariables = new Dictionary<string, string>();
}
environmentVariables[LambdaConstants.ENV_DOTNET_SHARED_STORE] = dotnetSharedStoreValue;
}
if (environmentVariables != null && AreDifferent(environmentVariables, existingConfiguration?.Environment?.Variables))
{
request.Environment = new Model.Environment { Variables = environmentVariables };
different = true;
}
if (existingConfiguration.PackageType == Lambda.PackageType.Zip)
{
var handler = this.GetStringValueOrDefault(this.Handler, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_HANDLER, false);
if (!string.IsNullOrEmpty(handler) && !string.Equals(handler, existingConfiguration.Handler, StringComparison.Ordinal))
{
request.Handler = handler;
different = true;
}
var runtime = this.GetStringValueOrDefault(this.Runtime, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_RUNTIME, false);
if (runtime != null && runtime != existingConfiguration.Runtime)
{
request.Runtime = runtime;
different = true;
}
}
else if (existingConfiguration.PackageType == Lambda.PackageType.Image)
{
{
var imageEntryPoints = this.GetStringValuesOrDefault(this.ImageEntryPoint, LambdaDefinedCommandOptions.ARGUMENT_IMAGE_ENTRYPOINT, false);
if (imageEntryPoints != null)
{
if (AreDifferent(imageEntryPoints, existingConfiguration.ImageConfigResponse?.ImageConfig?.EntryPoint))
{
if (request.ImageConfig == null)
{
request.ImageConfig = new ImageConfig();
}
request.ImageConfig.EntryPoint = imageEntryPoints.ToList();
request.ImageConfig.IsEntryPointSet = true;
different = true;
}
}
}
{
var imageCommands = this.GetStringValuesOrDefault(this.ImageCommand, LambdaDefinedCommandOptions.ARGUMENT_IMAGE_COMMAND, false);
if (imageCommands != null)
{
if (AreDifferent(imageCommands, existingConfiguration.ImageConfigResponse?.ImageConfig?.Command))
{
if (request.ImageConfig == null)
{
request.ImageConfig = new ImageConfig();
}
request.ImageConfig.Command = imageCommands.ToList();
request.ImageConfig.IsCommandSet = true;
different = true;
}
}
}
var imageWorkingDirectory = this.GetStringValueOrDefault(this.ImageWorkingDirectory, LambdaDefinedCommandOptions.ARGUMENT_IMAGE_WORKING_DIRECTORY, false);
if (imageWorkingDirectory != null)
{
if (request.ImageConfig == null)
{
request.ImageConfig = new ImageConfig();
}
if(!string.Equals(imageWorkingDirectory, existingConfiguration.ImageConfigResponse?.ImageConfig?.WorkingDirectory, StringComparison.Ordinal))
{
request.ImageConfig.WorkingDirectory = imageWorkingDirectory;
different = true;
}
}
}
if (!different)
return null;
return request;
}