예제 #1
0
        internal UpdateFunctionConfigurationResponse UpdateFunctionConfiguration(UpdateFunctionConfigurationRequest request)
        {
            var marshaller   = new UpdateFunctionConfigurationRequestMarshaller();
            var unmarshaller = UpdateFunctionConfigurationResponseUnmarshaller.Instance;

            return(Invoke <UpdateFunctionConfigurationRequest, UpdateFunctionConfigurationResponse>(request, marshaller, unmarshaller));
        }
        protected async Task UpdateHandlerAsync(IAmazonLambda lambdaClient, string handler, Dictionary <string, string> environmentVariables = null)
        {
            var updateFunctionConfigurationRequest = new UpdateFunctionConfigurationRequest
            {
                FunctionName = FunctionName,
                Handler      = handler,
                Environment  = new Model.Environment
                {
                    IsVariablesSet = true,
                    Variables      = environmentVariables ?? new Dictionary <string, string>()
                }
            };
            await lambdaClient.UpdateFunctionConfigurationAsync(updateFunctionConfigurationRequest);

            // Wait for eventual consistency of function change.
            var getConfigurationRequest = new GetFunctionConfigurationRequest {
                FunctionName = FunctionName
            };
            GetFunctionConfigurationResponse getConfigurationResponse = null;

            do
            {
                await Task.Delay(1000);

                getConfigurationResponse = await lambdaClient.GetFunctionConfigurationAsync(getConfigurationRequest);
            } while (getConfigurationResponse.State == State.Pending);
            await Task.Delay(1000);
        }
예제 #3
0
        public void UpdateFunctionDescription(string lambdaFunctionName, string description)
        {
            var request = new UpdateFunctionConfigurationRequest();

            request.FunctionName = lambdaFunctionName;
            request.Description  = description;
            var response = client.UpdateFunctionConfiguration(request);
        }
예제 #4
0
 private static async Task UpdateHandlerAsync(AmazonLambdaClient lambdaClient, string handler)
 {
     var updateFunctionConfigurationRequest = new UpdateFunctionConfigurationRequest
     {
         FunctionName = FunctionName,
         Handler      = handler
     };
     await lambdaClient.UpdateFunctionConfigurationAsync(updateFunctionConfigurationRequest);
 }
        public async Task Resize(string functionName, int targetMemory)
        {
            var request = new UpdateFunctionConfigurationRequest();

            request.FunctionName = functionName;
            request.MemorySize   = targetMemory;

            Console.WriteLine("Resizing Lambda to " + targetMemory + "MB");
            await _client.UpdateFunctionConfigurationAsync(request);
        }
예제 #6
0
 private async Task UpdateHandlerAsync(string handler)
 {
     var request = new UpdateFunctionConfigurationRequest
     {
         FunctionName = _functionName,
         ImageConfig  = new ImageConfig()
         {
             Command = { handler },
         }
     };
     await _lambdaClient.UpdateFunctionConfigurationAsync(request);
 }
예제 #7
0
        /// <summary>
        /// UpdateFunctionConfiguration接口的同步版本,该接口根据传入参数更新函数配置。
        /// </summary>
        /// <param name="req">参考<see cref="UpdateFunctionConfigurationRequest"/></param>
        /// <returns>参考<see cref="UpdateFunctionConfigurationResponse"/>实例</returns>
        public UpdateFunctionConfigurationResponse UpdateFunctionConfigurationSync(UpdateFunctionConfigurationRequest req)
        {
            JsonResponseModel <UpdateFunctionConfigurationResponse> rsp = null;

            try
            {
                var strResp = this.InternalRequestSync(req, "UpdateFunctionConfiguration");
                rsp = JsonConvert.DeserializeObject <JsonResponseModel <UpdateFunctionConfigurationResponse> >(strResp);
            }
            catch (JsonSerializationException e)
            {
                throw new TencentCloudSDKException(e.Message);
            }
            return(rsp.Response);
        }
예제 #8
0
        private async Task UpdateHandlerAsync(string handler)
        {
            var updateFunctionConfigurationRequest = new UpdateFunctionConfigurationRequest
            {
                FunctionName = _functionName,
                ImageConfig  = new ImageConfig()
                {
                    Command = { handler },
                }
            };
            await _lambdaClient.UpdateFunctionConfigurationAsync(updateFunctionConfigurationRequest);

            await WaitUntilHelper.WaitUntil(async() =>
            {
                var getFunctionRequest = new GetFunctionRequest()
                {
                    FunctionName = _functionName
                };
                var getFunctionResponse = await _lambdaClient.GetFunctionAsync(getFunctionRequest);
                return(getFunctionResponse.Configuration.LastUpdateStatus != LastUpdateStatus.Successful);
            }, TimeSpan.Zero, TimeSpan.FromMinutes(5), CancellationToken.None);
        }
예제 #9
0
        public async Task <State> TouchLambda(State state, ILambdaContext context)
        {
            var client    = new AmazonLambdaClient(RegionEndpoint.APSoutheast2);
            var variables = new Dictionary <string, string>();

            variables["LastTouched"] = DateTime.UtcNow.ToString();

            var updatedEnvironment = new Amazon.Lambda.Model.Environment
            {
                Variables      = variables,
                IsVariablesSet = true
            };

            var updateFunctionConfigurationRequest = new UpdateFunctionConfigurationRequest
            {
                FunctionName = state.FunctionName,
                Environment  = updatedEnvironment
            };

            var response = await client.UpdateFunctionConfigurationAsync(updateFunctionConfigurationRequest);

            return(state);
        }
 public void UpdateFunctionConfigurationAsync(UpdateFunctionConfigurationRequest request, AmazonServiceCallback <UpdateFunctionConfigurationRequest, UpdateFunctionConfigurationResponse> callback, AsyncOptions options = null)
 {
     throw new System.NotImplementedException();
 }
예제 #11
0
        /// <summary>
        /// Create an UpdateFunctionConfigurationRequest if any fields have changed. Otherwise it returns back null causing the Update
        /// to skip.
        /// </summary>
        /// <param name="existingConfiguration"></param>
        /// <returns></returns>
        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 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 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 runtime = this.GetStringValueOrDefault(this.Runtime, LambdaDefinedCommandOptions.ARGUMENT_FUNCTION_RUNTIME, false);

            if (runtime != null && runtime != existingConfiguration.Runtime)
            {
                request.Runtime = runtime;
                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
                    {
                        SubnetIds = subnetIds.ToList()
                    };
                    different = true;
                }
                if (AreDifferent(subnetIds, request.VpcConfig.SubnetIds))
                {
                    request.VpcConfig.SubnetIds = subnetIds.ToList();
                    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
                    {
                        SecurityGroupIds = securityGroupIds.ToList()
                    };
                    different = true;
                }
                if (AreDifferent(securityGroupIds, request.VpcConfig.SecurityGroupIds))
                {
                    request.VpcConfig.SecurityGroupIds = securityGroupIds.ToList();
                    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 (!different)
            {
                return(null);
            }

            return(request);
        }
예제 #12
0
        /// <summary>
        /// Initiates the asynchronous execution of the UpdateFunctionConfiguration operation.
        /// </summary>
        ///
        /// <param name="request">Container for the necessary parameters to execute the UpdateFunctionConfiguration operation.</param>
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public Task <UpdateFunctionConfigurationResponse> UpdateFunctionConfigurationAsync(UpdateFunctionConfigurationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var marshaller   = new UpdateFunctionConfigurationRequestMarshaller();
            var unmarshaller = UpdateFunctionConfigurationResponseUnmarshaller.Instance;

            return(InvokeAsync <UpdateFunctionConfigurationRequest, UpdateFunctionConfigurationResponse>(request, marshaller,
                                                                                                         unmarshaller, cancellationToken));
        }
예제 #13
0
        /// <summary>
        /// Create an UpdateFunctionConfigurationRequest if any fields have changed. Otherwise it returns back null causing the Update
        /// to skip.
        /// </summary>
        /// <param name="existingConfiguration"></param>
        /// <returns></returns>
        private UpdateFunctionConfigurationRequest CreateConfigurationRequestIfDifferent(GetFunctionConfigurationResponse existingConfiguration)
        {
            bool different = false;
            var  request   = new UpdateFunctionConfigurationRequest
            {
                FunctionName = this.GetStringValueOrDefault(this.FunctionName, DefinedCommandOptions.ARGUMENT_FUNCTION_NAME, true)
            };

            if (!string.IsNullOrEmpty(this.Description) && !string.Equals(this.Description, existingConfiguration.Description, StringComparison.Ordinal))
            {
                request.Description = Description;
                different           = true;
            }

            if (!string.IsNullOrEmpty(this.Role))
            {
                string fullRole;
                if (this.Role.StartsWith(Constants.IAM_ARN_PREFIX))
                {
                    fullRole = this.Role;
                }
                else
                {
                    fullRole = RoleHelper.ExpandRoleName(this.IAMClient, this.Role);
                }

                if (!string.Equals(fullRole, existingConfiguration.Role, StringComparison.Ordinal))
                {
                    request.Role = fullRole;
                    different    = true;
                }
            }

            if (!string.IsNullOrEmpty(this.Handler) && !string.Equals(this.Handler, existingConfiguration.Handler, StringComparison.Ordinal))
            {
                request.Handler = Handler;
                different       = true;
            }

            if (MemorySize.HasValue && MemorySize.Value != existingConfiguration.MemorySize)
            {
                request.MemorySize = MemorySize.Value;
                different          = true;
            }

            if (Runtime != null && Runtime != existingConfiguration.Runtime)
            {
                request.Runtime = Runtime;
                different       = true;
            }

            if (Timeout.HasValue && Timeout.Value != existingConfiguration.Timeout)
            {
                request.Timeout = Timeout.Value;
                different       = true;
            }

            if (this.SubnetIds != null)
            {
                if (request.VpcConfig == null)
                {
                    request.VpcConfig = new VpcConfig
                    {
                        SubnetIds = this.SubnetIds.ToList()
                    };
                    different = true;
                }
                if (AreDifferent(this.SubnetIds, request.VpcConfig.SubnetIds))
                {
                    request.VpcConfig.SubnetIds = this.SubnetIds.ToList();
                    different = true;
                }
            }
            if (this.SecurityGroupIds != null)
            {
                if (request.VpcConfig == null)
                {
                    request.VpcConfig = new VpcConfig
                    {
                        SecurityGroupIds = this.SecurityGroupIds.ToList()
                    };
                    different = true;
                }
                if (AreDifferent(this.SecurityGroupIds, request.VpcConfig.SecurityGroupIds))
                {
                    request.VpcConfig.SecurityGroupIds = this.SecurityGroupIds.ToList();
                    different = true;
                }
            }

            if (!string.IsNullOrEmpty(this.DeadLetterTargetArn) && !string.Equals(this.DeadLetterTargetArn, existingConfiguration.DeadLetterConfig?.TargetArn, StringComparison.Ordinal))
            {
                request.DeadLetterConfig           = existingConfiguration.DeadLetterConfig ?? new DeadLetterConfig();
                request.DeadLetterConfig.TargetArn = this.DeadLetterTargetArn;
                different = true;
            }
            else if (string.IsNullOrEmpty(this.DeadLetterTargetArn) && !string.IsNullOrEmpty(existingConfiguration.DeadLetterConfig?.TargetArn))
            {
                request.DeadLetterConfig           = null;
                request.DeadLetterConfig           = existingConfiguration.DeadLetterConfig ?? new DeadLetterConfig();
                request.DeadLetterConfig.TargetArn = string.Empty;
                different = true;
            }


            if (!string.IsNullOrEmpty(this.KMSKeyArn) && !string.Equals(this.KMSKeyArn, existingConfiguration.KMSKeyArn, StringComparison.Ordinal))
            {
                request.KMSKeyArn = this.KMSKeyArn;
                different         = true;
            }
            if (this.EnvironmentVariables != null && AreDifferent(this.EnvironmentVariables, existingConfiguration?.Environment?.Variables))
            {
                request.Environment = new Model.Environment {
                    Variables = this.EnvironmentVariables
                };
                different = true;
            }



            if (!different)
            {
                return(null);
            }

            return(request);
        }
예제 #14
0
        /// <summary>
        /// Create an UpdateFunctionConfigurationRequest if any fields have changed. Otherwise it returns back null causing the Update
        /// to skip.
        /// </summary>
        /// <param name="existingConfiguration"></param>
        /// <returns></returns>
        private UpdateFunctionConfigurationRequest CreateConfigurationRequestIfDifferent(GetFunctionConfigurationResponse existingConfiguration)
        {
            bool applyDefaultsFile = this.GetBoolValueOrDefault(this.ApplyDefaultsForUpdate, DefinedCommandOptions.ARGUMENT_APPLY_DEFAULTS_FOR_UPDATE, false).GetValueOrDefault();

            if (applyDefaultsFile)
            {
                this.Logger.WriteLine("Apply defaults values from defaults file while updating function configuration");
            }

            bool different = false;
            var  request   = new UpdateFunctionConfigurationRequest
            {
                FunctionName = this.GetStringValueOrDefault(this.FunctionName, DefinedCommandOptions.ARGUMENT_FUNCTION_NAME, true)
            };

            var description = applyDefaultsFile ? this.GetStringValueOrDefault(this.Description, DefinedCommandOptions.ARGUMENT_FUNCTION_DESCRIPTION, false) : Description;

            if (!string.IsNullOrEmpty(description) && !string.Equals(description, existingConfiguration.Description, StringComparison.Ordinal))
            {
                request.Description = description;
                different           = true;
            }

            var role = applyDefaultsFile ? this.GetStringValueOrDefault(this.Role, DefinedCommandOptions.ARGUMENT_FUNCTION_ROLE, false) : this.Role;

            if (!string.IsNullOrEmpty(role))
            {
                string fullRole;
                if (role.StartsWith(Constants.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 handler = applyDefaultsFile ? this.GetStringValueOrDefault(this.Handler, DefinedCommandOptions.ARGUMENT_FUNCTION_HANDLER, false) : this.Handler;

            if (!string.IsNullOrEmpty(handler) && !string.Equals(handler, existingConfiguration.Handler, StringComparison.Ordinal))
            {
                request.Handler = handler;
                different       = true;
            }

            var memorySize = applyDefaultsFile ? this.GetIntValueOrDefault(this.MemorySize, DefinedCommandOptions.ARGUMENT_FUNCTION_MEMORY_SIZE, false) : this.MemorySize;

            if (memorySize.HasValue && memorySize.Value != existingConfiguration.MemorySize)
            {
                request.MemorySize = memorySize.Value;
                different          = true;
            }

            var runtime = applyDefaultsFile ? this.GetStringValueOrDefault(this.Runtime, DefinedCommandOptions.ARGUMENT_FUNCTION_RUNTIME, false) : this.Runtime?.Value;

            if (runtime != null && runtime != existingConfiguration.Runtime)
            {
                request.Runtime = runtime;
                different       = true;
            }

            var timeout = applyDefaultsFile ? this.GetIntValueOrDefault(this.Timeout, DefinedCommandOptions.ARGUMENT_FUNCTION_TIMEOUT, false) : this.Timeout;

            if (timeout.HasValue && timeout.Value != existingConfiguration.Timeout)
            {
                request.Timeout = timeout.Value;
                different       = true;
            }

            var subnetIds = applyDefaultsFile ? this.GetStringValuesOrDefault(this.SubnetIds, DefinedCommandOptions.ARGUMENT_FUNCTION_SUBNETS, false) : this.SubnetIds;

            if (subnetIds != null)
            {
                if (request.VpcConfig == null)
                {
                    request.VpcConfig = new VpcConfig
                    {
                        SubnetIds = subnetIds.ToList()
                    };
                    different = true;
                }
                if (AreDifferent(subnetIds, request.VpcConfig.SubnetIds))
                {
                    request.VpcConfig.SubnetIds = subnetIds.ToList();
                    different = true;
                }
            }

            var securityGroupIds = applyDefaultsFile ? this.GetStringValuesOrDefault(this.SecurityGroupIds, DefinedCommandOptions.ARGUMENT_FUNCTION_SECURITY_GROUPS, false) : this.SecurityGroupIds;

            if (securityGroupIds != null)
            {
                if (request.VpcConfig == null)
                {
                    request.VpcConfig = new VpcConfig
                    {
                        SecurityGroupIds = securityGroupIds.ToList()
                    };
                    different = true;
                }
                if (AreDifferent(securityGroupIds, request.VpcConfig.SecurityGroupIds))
                {
                    request.VpcConfig.SecurityGroupIds = securityGroupIds.ToList();
                    different = true;
                }
            }

            var deadLetterTargetArn = applyDefaultsFile ? this.GetStringValueOrDefault(this.DeadLetterTargetArn, DefinedCommandOptions.ARGUMENT_DEADLETTER_TARGET_ARN, false) : this.DeadLetterTargetArn;

            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 = applyDefaultsFile ? this.GetStringValueOrDefault(this.TracingMode, DefinedCommandOptions.ARGUMENT_TRACING_MODE, false) : this.TracingMode;

            if (tracingMode != null)
            {
                var eTraceMode = Amazon.Lambda.TracingMode.FindValue(tracingMode);
                if (eTraceMode != existingConfiguration.TracingConfig?.Mode)
                {
                    request.TracingConfig      = new TracingConfig();
                    request.TracingConfig.Mode = eTraceMode;
                    different = true;
                }
            }

            var kmsKeyArn = applyDefaultsFile ? this.GetStringValueOrDefault(this.KMSKeyArn, DefinedCommandOptions.ARGUMENT_KMS_KEY_ARN, false) : this.KMSKeyArn;

            if (!string.IsNullOrEmpty(kmsKeyArn) && !string.Equals(kmsKeyArn, existingConfiguration.KMSKeyArn, StringComparison.Ordinal))
            {
                request.KMSKeyArn = kmsKeyArn;
                different         = true;
            }

            var environmentVariables = applyDefaultsFile ? this.GetKeyValuePairOrDefault(this.EnvironmentVariables, DefinedCommandOptions.ARGUMENT_ENVIRONMENT_VARIABLES, false) : this.EnvironmentVariables;

            if (environmentVariables != null && AreDifferent(environmentVariables, existingConfiguration?.Environment?.Variables))
            {
                request.Environment = new Model.Environment {
                    Variables = environmentVariables
                };
                different = true;
            }



            if (!different)
            {
                return(null);
            }

            return(request);
        }