Files
claude-hub/scripts/setup-aws-profiles.sh
Jonathan Flatt fc567071dd Initial commit
2025-05-20 17:01:59 +00:00

165 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# Script to set up AWS profiles for Claude webhook service
# This avoids storing credentials in environment variables
echo "AWS Profile Setup for Claude Webhook"
echo "===================================="
echo
# Function to create a profile
create_aws_profile() {
local profile_name=$1
local description=$2
echo "Setting up profile: $profile_name ($description)"
echo
# Check if profile already exists
if aws configure list --profile "$profile_name" &>/dev/null; then
echo "Profile '$profile_name' already exists."
read -p "Do you want to update it? (y/n): " update_profile
if [[ $update_profile != "y" ]]; then
echo "Skipping profile '$profile_name'"
return
fi
fi
# Get credentials
read -p "AWS Access Key ID: " access_key
read -s -p "AWS Secret Access Key: " secret_key
echo
read -p "Default region [us-west-2]: " region
region=${region:-us-west-2}
read -p "Output format [json]: " output
output=${output:-json}
# Set the profile using AWS CLI
aws configure set aws_access_key_id "$access_key" --profile "$profile_name"
aws configure set aws_secret_key "$secret_key" --profile "$profile_name"
aws configure set region "$region" --profile "$profile_name"
aws configure set output "$output" --profile "$profile_name"
echo "✅ Profile '$profile_name' created successfully!"
echo
}
# Main menu
echo "Which profiles would you like to set up?"
echo "1. claude-webhook (default profile for the service)"
echo "2. claude-dev (development environment)"
echo "3. claude-prod (production environment)"
echo "4. All of the above"
echo "5. Custom profile name"
echo
read -p "Enter your choice (1-5): " choice
case $choice in
1)
create_aws_profile "claude-webhook" "Default profile for Claude webhook service"
;;
2)
create_aws_profile "claude-dev" "Development environment"
;;
3)
create_aws_profile "claude-prod" "Production environment"
;;
4)
create_aws_profile "claude-webhook" "Default profile for Claude webhook service"
create_aws_profile "claude-dev" "Development environment"
create_aws_profile "claude-prod" "Production environment"
;;
5)
read -p "Enter custom profile name: " custom_name
read -p "Enter description: " custom_desc
create_aws_profile "$custom_name" "$custom_desc"
;;
*)
echo "Invalid choice. Exiting."
exit 1
;;
esac
# Update .env file
echo
echo "Updating .env file configuration..."
ENV_FILE="../.env"
# Backup existing .env
if [ -f "$ENV_FILE" ]; then
cp "$ENV_FILE" "$ENV_FILE.backup"
echo "Backed up existing .env to .env.backup"
fi
# Function to update .env
update_env_file() {
local profile_name=$1
# Remove old AWS credential lines
if [ -f "$ENV_FILE" ]; then
sed -i.tmp '/^AWS_ACCESS_KEY_ID=/d' "$ENV_FILE"
sed -i.tmp '/^AWS_SECRET_ACCESS_KEY=/d' "$ENV_FILE"
rm "$ENV_FILE.tmp"
fi
# Add new profile configuration
if grep -q "^USE_AWS_PROFILE=" "$ENV_FILE" 2>/dev/null; then
sed -i.tmp "s/^USE_AWS_PROFILE=.*/USE_AWS_PROFILE=true/" "$ENV_FILE"
else
echo "USE_AWS_PROFILE=true" >> "$ENV_FILE"
fi
if grep -q "^AWS_PROFILE=" "$ENV_FILE" 2>/dev/null; then
sed -i.tmp "s/^AWS_PROFILE=.*/AWS_PROFILE=$profile_name/" "$ENV_FILE"
else
echo "AWS_PROFILE=$profile_name" >> "$ENV_FILE"
fi
if [ -f "$ENV_FILE.tmp" ]; then
rm "$ENV_FILE.tmp"
fi
echo "✅ Updated .env to use AWS profile: $profile_name"
}
# Ask which profile to use in .env
echo
echo "Which profile should be used in the .env file?"
aws configure list-profiles | nl -v 1
echo
read -p "Enter the number or profile name: " env_choice
if [[ $env_choice =~ ^[0-9]+$ ]]; then
# User entered a number
profile_to_use=$(aws configure list-profiles | sed -n "${env_choice}p")
else
# User entered a profile name
profile_to_use=$env_choice
fi
if [ -n "$profile_to_use" ]; then
update_env_file "$profile_to_use"
fi
# Test the profile
echo
echo "Testing AWS profile configuration..."
if aws sts get-caller-identity --profile "$profile_to_use" &>/dev/null; then
echo "✅ Profile '$profile_to_use' is working correctly!"
aws sts get-caller-identity --profile "$profile_to_use" --output table
else
echo "❌ Failed to authenticate with profile '$profile_to_use'"
echo "Please check your credentials and try again."
fi
echo
echo "Setup complete!"
echo
echo "Next steps:"
echo "1. Rebuild the Docker image: ./build-claudecode.sh"
echo "2. Start the service: npm start"
echo "3. Your AWS credentials are now stored securely in ~/.aws/credentials"
echo
echo "To switch profiles later, update AWS_PROFILE in .env"