AWS Security ChangesHomeSearch

AWS AmazonCloudWatch: Refactor CloudWatch PutDashboard code samples (remove file I/O, rename methods)

Service: AmazonCloudWatch · 2026-09-27 · Documentation low

File: AmazonCloudWatch/latest/monitoring/example_cloudwatch_PutDashboard_section.md

Summary

Updates the CloudWatch PutDashboard example snippets: removes the C# SetupDashboard helper method, changes the Java method from createDashboardWithMetricsAsync(dashboardName, fileName) that read the dashboard body from a file to createDashboardAsync(dashboardName, dashboardBody) taking JSON directly (dropping the IOException), renames the Kotlin createDashboardWithMetrics to createDashboard with a dashboardBodyVal parameter instead of reading a file, and replaces the hardcoded "us-east-1" region with a REGION constant.

Security assessment

The diff only refactors sample code (method renames, passing the dashboard body as a JSON string instead of reading it from a file, and using a REGION constant). While removing file reads slightly reduces local file I/O in samples, there is no indication of addressing a specific vulnerability, credential, permission, encryption, or exposure issue.

Evidence

+        public CompletableFuture<PutDashboardResponse> createDashboardAsync(String dashboardName, String dashboardBody) {

Diff

diff --git a/AmazonCloudWatch/latest/monitoring/example_cloudwatch_PutDashboard_section.md b/AmazonCloudWatch/latest/monitoring/example_cloudwatch_PutDashboard_section.md
index db000f87a..5cdbef086 100644
--- a//AmazonCloudWatch/latest/monitoring/example_cloudwatch_PutDashboard_section.md
+++ b//AmazonCloudWatch/latest/monitoring/example_cloudwatch_PutDashboard_section.md
@@ -33,49 +32,0 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-        /// <summary>
-        /// Set up a dashboard using a call to the wrapper class.
-        /// </summary>
-        /// <param name="customMetricNamespace">The metric namespace.</param>
-        /// <param name="customMetricName">The metric name.</param>
-        /// <param name="dashboardName">The name of the dashboard.</param>
-        /// <returns>A list of validation messages.</returns>
-        private static async Task<List<DashboardValidationMessage>> SetupDashboard(
-            string customMetricNamespace, string customMetricName, string dashboardName)
-        {
-            // Get the dashboard model from configuration.
-            var newDashboard = new DashboardModel();
-            _configuration.GetSection("dashboardExampleBody").Bind(newDashboard);
-    
-            // Add a new metric to the dashboard.
-            newDashboard.Widgets.Add(new Widget
-            {
-                Height = 8,
-                Width = 8,
-                Y = 8,
-                X = 0,
-                Type = "metric",
-                Properties = new Properties
-                {
-                    Metrics = new List<List<object>>
-                        { new() { customMetricNamespace, customMetricName } },
-                    View = "timeSeries",
-                    Region = "us-east-1",
-                    Stat = "Sum",
-                    Period = 86400,
-                    YAxis = new YAxis { Left = new Left { Min = 0, Max = 100 } },
-                    Title = "Custom Metric Widget",
-                    LiveData = true,
-                    Sparkline = true,
-                    Trend = true,
-                    Stacked = false,
-                    SetPeriodToTimeRange = false
-                }
-            });
-    
-            var newDashboardString = JsonSerializer.Serialize(newDashboard,
-                new JsonSerializerOptions
-                { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull });
-            var validationMessages =
-                await _cloudWatchWrapper.PutDashboard(dashboardName, newDashboardString);
-    
-            return validationMessages;
-        }
-    
@@ -153 +104 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-         * Creates a new dashboard with the specified name and metrics from the given file.
+         * Creates a new dashboard with the specified name and body.
@@ -156 +107 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-         * @param fileName      the name of the file containing the dashboard body
+         * @param dashboardBody the dashboard body, as JSON
@@ -158 +108,0 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-         * @throws IOException if there is an error reading the dashboard body from the file
@@ -160,2 +110 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-        public CompletableFuture<PutDashboardResponse> createDashboardWithMetricsAsync(String dashboardName, String fileName) throws IOException {
-            String dashboardBody = readFileAsString(fileName);
+        public CompletableFuture<PutDashboardResponse> createDashboardAsync(String dashboardName, String dashboardBody) {
@@ -206 +155 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-    suspend fun createDashboardWithMetrics(
+    suspend fun createDashboard(
@@ -208 +157 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-        fileNameVal: String,
+        dashboardBodyVal: String,
@@ -213 +162 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-                dashboardBody = readFileAsString(fileNameVal)
+                dashboardBody = dashboardBodyVal
@@ -216 +165 @@ There's more on GitHub. Find the complete example and learn how to set up and ru
-        CloudWatchClient.fromEnvironment { region = "us-east-1" }.use { cwClient ->
+        CloudWatchClient.fromEnvironment { region = REGION }.use { cwClient ->