Support examples using AWS CLI with Bash script
The following code examples show you how to perform actions and implement common scenarios by using the AWS Command Line Interface with Bash script with Support.
Scenarios are code examples that show you how to accomplish specific tasks by calling multiple functions within a service or combined with other AWS services.
Each example includes a link to the complete source code, where you can find instructions on how to set up and run the code in context.
Topics
Scenarios
The following code example shows how to:
Check available services and severity levels
Create a support case
Add communications to a case
- AWS CLI with Bash script
-
Note
There's more on GitHub. Find the complete example and learn how to set up and run in the Sample developer tutorials
repository. #!/bin/bash # AWS Support CLI Tutorial Script # This script demonstrates how to use AWS Support API through AWS CLI set -euo pipefail # Security: Validate script location and permissions SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly SCRIPT_DIR # Security: Use secure temporary directory readonly TEMP_DIR="$(mktemp -d)" || { echo "Failed to create temp directory"; exit 1; } trap "rm -rf '$TEMP_DIR'" EXIT # Set up logging with secure permissions LOG_FILE="${TEMP_DIR}/aws-support-tutorial.log" touch "$LOG_FILE" chmod 600 "$LOG_FILE" # Security: Validate AWS CLI is available if ! command -v aws &> /dev/null; then echo "ERROR: AWS CLI is not installed or not in PATH" >&2 exit 1 fi # Security: Check AWS credentials are configured if ! aws sts get-caller-identity &> /dev/null; then echo "ERROR: AWS credentials are not properly configured" >&2 exit 1 fi { echo "Starting AWS Support Tutorial at $(date)" echo "Script: $0" echo "User: $(whoami)" echo "---" } >> "$LOG_FILE" # Function to log commands and their outputs securely log_cmd() { local cmd="$1" echo "$(date): Running command" >> "$LOG_FILE" # Don't echo the actual command to prevent credential leakage eval "$cmd" 2>&1 | tee -a "$LOG_FILE" return ${PIPESTATUS[0]} } # Function to check for errors in command output check_error() { local cmd_output="$1" local cmd_status="$2" local error_msg="$3" local is_fatal="${4:-true}" if [[ $cmd_status -ne 0 || "$cmd_output" =~ [Ee][Rr][Rr][Oo][Rr] ]]; then echo "ERROR: $error_msg" | tee -a "$LOG_FILE" echo "Command returned status: $cmd_status" >> "$LOG_FILE" # Check for subscription error if [[ "$cmd_output" =~ "SubscriptionRequiredException" ]]; then { echo "" echo "====================================================" echo "IMPORTANT: This account does not have the required AWS Support plan." echo "You need a Business, Enterprise On-Ramp, or Enterprise Support plan" echo "to use the AWS Support API." echo "" echo "This script will now demonstrate the commands that would be run" echo "if you had the appropriate support plan, but will not execute them." echo "====================================================" } | tee -a "$LOG_FILE" DEMO_MODE=true return 0 fi if [[ "$is_fatal" == "true" ]]; then cleanup_resources exit 1 fi fi } # Function to clean up resources cleanup_resources() { echo "Cleaning up resources..." | tee -a "$LOG_FILE" echo "No persistent resources were created that need cleanup." | tee -a "$LOG_FILE" } # Function to run a command in demo mode demo_cmd() { local cmd="$1" local description="$2" { echo "" echo "DEMO: $description" echo "Command that would be executed:" echo " [Command hidden for security]" echo "" } | tee -a "$LOG_FILE" } # Function to safely extract JSON values extract_json_value() { local json_output="$1" local key="$2" echo "$json_output" | grep -o "\"$key\": \"[^\"]*\"" | head -1 | cut -d'"' -f4 || echo "" } # Array to track created resources declare -a CREATED_RESOURCES # Initialize demo mode flag DEMO_MODE=false # Security: Validate input parameters if [[ $# -gt 0 ]]; then echo "ERROR: This script does not accept parameters" >&2 exit 1 fi { echo "===================================================" echo "AWS Support CLI Tutorial" echo "===================================================" echo "This script demonstrates how to use AWS Support API" echo "Note: You must have a Business, Enterprise On-Ramp," echo "or Enterprise Support plan to use the AWS Support API." echo "===================================================" echo "" } | tee -a "$LOG_FILE" # Step 1: Check available services echo "Step 1: Checking available AWS Support services..." | tee -a "$LOG_FILE" SERVICES_OUTPUT=$(log_cmd "aws support describe-services --language en" 2>&1) || SERVICES_OUTPUT="" check_error "$SERVICES_OUTPUT" $? "Failed to retrieve AWS Support services" # If we're in demo mode, set default values if [[ "$DEMO_MODE" == "true" ]]; then SERVICE_CODE="general-info" echo "Using demo service code: $SERVICE_CODE" | tee -a "$LOG_FILE" else # Extract a service code for demonstration using safer method SERVICE_CODE=$(extract_json_value "$SERVICES_OUTPUT" "code") || SERVICE_CODE="" if [[ -z "$SERVICE_CODE" ]]; then SERVICE_CODE="general-info" echo "Using default service code: $SERVICE_CODE" | tee -a "$LOG_FILE" else echo "Found service code: $SERVICE_CODE" | tee -a "$LOG_FILE" fi fi # Step 2: Check available severity levels echo "Step 2: Checking available severity levels..." | tee -a "$LOG_FILE" if [[ "$DEMO_MODE" == "true" ]]; then demo_cmd "aws support describe-severity-levels --language en" "Check available severity levels" SEVERITY_CODE="low" echo "Using demo severity code: $SEVERITY_CODE" | tee -a "$LOG_FILE" else SEVERITY_OUTPUT=$(log_cmd "aws support describe-severity-levels --language en" 2>&1) || SEVERITY_OUTPUT="" check_error "$SEVERITY_OUTPUT" $? "Failed to retrieve severity levels" SEVERITY_CODE=$(extract_json_value "$SEVERITY_OUTPUT" "code") || SEVERITY_CODE="" if [[ -z "$SEVERITY_CODE" ]]; then SEVERITY_CODE="low" echo "Using default severity code: $SEVERITY_CODE" | tee -a "$LOG_FILE" else echo "Found severity code: $SEVERITY_CODE" | tee -a "$LOG_FILE" fi fi # Step 3: Create a test support case { echo "" echo "===================================================" echo "SUPPORT CASE CREATION" echo "===================================================" } | tee -a "$LOG_FILE" if [[ "$DEMO_MODE" == "true" ]]; then { echo "DEMO MODE: The following steps would create and manage a support case" echo "if you had a Business, Enterprise On-Ramp, or Enterprise Support plan." echo "" } | tee -a "$LOG_FILE" USER_EMAIL="example@example.com" demo_cmd "aws support create-case" "Create a support case" CASE_ID="case-12345678910-2013-c4c1d2bf33c5cf47" echo "Demo case ID: $CASE_ID" | tee -a "$LOG_FILE" demo_cmd "aws support describe-cases" "List support cases" demo_cmd "aws support add-communication-to-case" "Add communication to case" demo_cmd "aws support describe-communications" "View case communications" demo_cmd "aws support resolve-case" "Resolve the support case" else echo "Creating a test support case..." | tee -a "$LOG_FILE" USER_EMAIL="example@example.com" CC_EMAIL_PARAM="--cc-email-addresses $USER_EMAIL" # Create the case CASE_OUTPUT=$(log_cmd "aws support create-case --subject 'AWS CLI Tutorial Test Case' --service-code '$SERVICE_CODE' --category-code 'using-aws' --communication-body 'This is a test case created as part of an AWS CLI tutorial.' --severity-code '$SEVERITY_CODE' --language 'en' $CC_EMAIL_PARAM" 2>&1) || CASE_OUTPUT="" check_error "$CASE_OUTPUT" $? "Failed to create support case" # Extract the case ID safely CASE_ID=$(extract_json_value "$CASE_OUTPUT" "caseId") || CASE_ID="" if [[ -n "$CASE_ID" ]]; then echo "Successfully created support case with ID: $CASE_ID" | tee -a "$LOG_FILE" CREATED_RESOURCES+=("Support Case: $CASE_ID") # Step 4: List the case we just created echo "" | tee -a "$LOG_FILE" echo "Step 4: Listing the support case we just created..." | tee -a "$LOG_FILE" CASES_OUTPUT=$(log_cmd "aws support describe-cases --case-id-list '$CASE_ID' --include-resolved-cases false --language 'en'" 2>&1) || CASES_OUTPUT="" check_error "$CASES_OUTPUT" $? "Failed to retrieve case details" # Step 5: Add a communication to the case echo "" | tee -a "$LOG_FILE" echo "Step 5: Adding a communication to the support case..." | tee -a "$LOG_FILE" COMM_OUTPUT=$(log_cmd "aws support add-communication-to-case --case-id '$CASE_ID' --communication-body 'This is an additional communication for the test case.' $CC_EMAIL_PARAM" 2>&1) || COMM_OUTPUT="" check_error "$COMM_OUTPUT" $? "Failed to add communication to case" # Step 6: View communications for the case echo "" | tee -a "$LOG_FILE" echo "Step 6: Viewing communications for the support case..." | tee -a "$LOG_FILE" COMMS_OUTPUT=$(log_cmd "aws support describe-communications --case-id '$CASE_ID' --language 'en'" 2>&1) || COMMS_OUTPUT="" check_error "$COMMS_OUTPUT" $? "Failed to retrieve case communications" # Step 7: Resolve the case { echo "" echo "===================================================" echo "CASE RESOLUTION" echo "===================================================" echo "Resolving the support case..." } | tee -a "$LOG_FILE" RESOLVE_OUTPUT=$(log_cmd "aws support resolve-case --case-id '$CASE_ID'" 2>&1) || RESOLVE_OUTPUT="" check_error "$RESOLVE_OUTPUT" $? "Failed to resolve case" echo "Successfully resolved support case: $CASE_ID" | tee -a "$LOG_FILE" else echo "Could not extract case ID from the response." | tee -a "$LOG_FILE" fi fi # Display summary of created resources { echo "" echo "===================================================" echo "TUTORIAL SUMMARY" echo "===================================================" } | tee -a "$LOG_FILE" if [[ "$DEMO_MODE" == "true" ]]; then { echo "This was a demonstration in DEMO MODE." echo "No actual AWS Support cases were created." echo "To use the AWS Support API, you need a Business, Enterprise On-Ramp," echo "or Enterprise Support plan." } | tee -a "$LOG_FILE" else { echo "Resources created during this tutorial:" if [[ ${#CREATED_RESOURCES[@]} -eq 0 ]]; then echo "No resources were created." else for resource in "${CREATED_RESOURCES[@]+"${CREATED_RESOURCES[@]}"}"; do echo "- $resource" done fi } | tee -a "$LOG_FILE" fi { echo "" echo "Tutorial completed successfully!" echo "Log file: $LOG_FILE" echo "===================================================" } | tee -a "$LOG_FILE" # Display log file path to user echo "Log file: $LOG_FILE"-
For API details, see the following topics in AWS CLI Command Reference.
-