private ParameterTier GetParameterTier()

in src/Amazon.AspNetCore.DataProtection.SSM/SSMXmlRepository.cs [305:348]


        private ParameterTier GetParameterTier(string elementValue)
        { 
            var elementValueLength = elementValue.Length;
            var storageMode = _options.TierStorageMode;

            _logger.LogDebug("Using tier storage mode {StorageMode} to decide which SSM parameter tier to use for DataProtection element.", storageMode);

            // Check if the value is too large for the advanced tier (8192 characters/ 8KB), in this case the key generation is not suitable for keys that should be stored as SSM parameter.
            const int advancedTierMaxSize = 8192;
            if (elementValueLength > advancedTierMaxSize)
            { 
                throw new SSMParameterToLongException($"Could not save DataProtection element to SSM parameter. " +
                                                      $"DataProtection element has a length of {elementValueLength} which exceeds the maximum SSM parameter size of {advancedTierMaxSize}. " +
                                                      $"Please consider using another key provider or key store.");
            }

            // Check if advanced tier has to be used anyway due to tier storage mode
            if (storageMode == TierStorageMode.AdvancedOnly)
                return ParameterTier.Advanced;

            // Check if IntelligentTiering tier has to be used anyway due to tier storage mode
            if (storageMode == TierStorageMode.IntelligentTiering)
                return ParameterTier.IntelligentTiering;

            // Check if the value is too big for the standard tier and try to use the advanced tier if the storage mode allows it.
            // 4096 characters (4KB) is the maximum size for the standard tier.
            const int standardTierMaxSize = 4096;
            if (elementValueLength > standardTierMaxSize)
            {
                _logger.LogDebug("DataProtection element has a length of {Length} which exceeds the maximum standard tier SSM parameter size of {StandardTierMaxSize} (4KB), checking if advanced tier usage is allowed.", elementValueLength, standardTierMaxSize);

                // tier is too large for standard tier, check if advanced tier is allowed
                if (_options == null || _options.TierStorageMode == TierStorageMode.StandardOnly)
                { 
                    throw new SSMParameterToLongException($"Could not save DataProtection element to SSM parameter. " +
                                                          $"Element has {elementValueLength} characters which exceeds the limit of {standardTierMaxSize} characters of the standard parameter tier and usage of advanced tier is not configured." +
                                                          $"You can resolve this issue by changing the TierStorageMode to {nameof(TierStorageMode.AdvancedUpgradeable)} or {nameof(TierStorageMode.AdvancedOnly)} in the configuration.");
                }
 
                return ParameterTier.Advanced;
            }
             
            return ParameterTier.Standard;
        }