public Object handleRequest()

in resources/custom-resources/ssm-put-param-secure/src/main/java/com/amazon/aws/partners/saasfactory/SSMPutParamSecure.java [56:174]


	public Object handleRequest(Map<String, Object> input, Context context) {
		LambdaLogger logger = context.getLogger();

		try {
			ObjectMapper mapper = new ObjectMapper();
			logger.log(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(input));
			logger.log("\n");
		} catch (JsonProcessingException e) {
			logger.log("Could not log input\n");
		}

		final String requestType = (String) input.get("RequestType");
		Map<String, Object> resourceProperties = (Map<String, Object>) input.get("ResourceProperties");
		final String ssmParameterName = (String) resourceProperties.get("Name");
		final String ssmParameterValue = (String) resourceProperties.get("Value");
		final boolean update = "Update".equalsIgnoreCase(requestType);
		final boolean withKey = resourceProperties.containsKey("KeyId");
		final boolean withDescription = resourceProperties.containsKey("Description");

		final String[] stackArn = ((String) input.get("StackId")).split(":");
		final String region = stackArn[3];
		final String accountId = stackArn[4];
//		final String stack = stackArn[5].split("/")[1];
		final String ssmArn = "arn:aws:ssm:" + region + ":" + accountId + ":parameter/" + ssmParameterName;

		ExecutorService service = Executors.newSingleThreadExecutor();

		ObjectNode responseData = JsonNodeFactory.instance.objectNode();
		try {
			if (requestType == null) {
				throw new RuntimeException();
			}
			Runnable r = () -> {
				PutParameterRequest request = PutParameterRequest.builder()
						.name(ssmParameterName)
						.value(ssmParameterValue)
						.type(ParameterType.SECURE_STRING)
						.overwrite(update)
						.build();

				if (withKey && !withDescription) {
					request = request.toBuilder()
							.keyId((String) resourceProperties.get("KeyId"))
							.build();
				} else if (!withKey && withDescription) {
					request = request.toBuilder()
							.description((String) resourceProperties.get("Description"))
							.build();
				} else if (withKey && withDescription) {
					request = request.toBuilder()
							.keyId((String) resourceProperties.get("KeyId"))
							.description((String) resourceProperties.get("Description"))
							.build();
				}

				if ("Create".equalsIgnoreCase(requestType)) {
					logger.log("CREATE\n");

					PutParameterResponse response = ssm.putParameter(request);
					Long version = response.version();

					responseData.put("Parameter", ssmParameterName);
					responseData.put("ARN", ssmArn);
					responseData.put("Version", version);

					logger.log("Adding new parameter to SSM: " + ssmArn + "\n");

					sendResponse(input, context, "SUCCESS", responseData);
				} else if ("Update".equalsIgnoreCase(requestType)) {
					logger.log("UDPATE\n");

					PutParameterResponse response = ssm.putParameter(request);
					Long version = response.version();

					responseData.put("Parameter", ssmParameterName);
					responseData.put("ARN", ssmArn);
					responseData.put("Version", version);

					logger.log("Updating value of existing SSM parameter: " + ssmArn + "\n");

					sendResponse(input, context, "SUCCESS", responseData);
				} else if ("Delete".equalsIgnoreCase(requestType)) {
					logger.log("DELETE\n");

					DeleteParameterRequest deleteRequest = DeleteParameterRequest.builder()
							.name(ssmParameterName)
							.build();

					DeleteParameterResponse response = ssm.deleteParameter(deleteRequest);

					responseData.put("ARN", ssmArn);

					logger.log("Deleting SSM parameter: " + ssmArn + "\n");

					sendResponse(input, context, "SUCCESS", responseData);
				} else {
					logger.log("FAILED unknown requestType " + requestType + "\n");
					responseData.put("Reason", "Unknown RequestType " + requestType);
					sendResponse(input, context, "FAILED", responseData);
				}
			};
			Future<?> f = service.submit(r);
			f.get(context.getRemainingTimeInMillis() - 1000, TimeUnit.MILLISECONDS);
		} catch (final TimeoutException | InterruptedException | ExecutionException e) {
			// Timed out
			logger.log("FAILED unexpected error or request timed out " + e.getMessage() + "\n");
			// Print entire stack trace
			final StringWriter sw = new StringWriter();
			final PrintWriter pw = new PrintWriter(sw, true);
			e.printStackTrace(pw);
			logger.log(sw.getBuffer().toString() + "\n");

			responseData.put("Reason", e.getMessage());
			sendResponse(input, context, "FAILED", responseData);
		} finally {
			service.shutdown();
		}
		return null;
	}