Files
claw-alexa/deploy.sh
2026-01-30 21:14:19 +01:00

148 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# OpenClaw Alexa Skill - AWS Lambda Deployment Script
# Run: ./deploy.sh
set -e
FUNCTION_NAME="openclaw-alexa"
REGION="${AWS_REGION:-us-east-1}"
RUNTIME="nodejs20.x"
TIMEOUT=30
MEMORY=128
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}═══════════════════════════════════════${NC}"
echo -e "${GREEN} OpenClaw Alexa - Lambda Deployment ${NC}"
echo -e "${GREEN}═══════════════════════════════════════${NC}"
# Check AWS CLI
if ! command -v aws &> /dev/null; then
echo -e "${RED}Error: AWS CLI not installed${NC}"
echo "Install: brew install awscli"
exit 1
fi
# Check AWS credentials
if ! aws sts get-caller-identity &> /dev/null; then
echo -e "${RED}Error: AWS not configured${NC}"
echo "Run: aws configure"
exit 1
fi
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
echo -e "${GREEN}AWS Account:${NC} $ACCOUNT_ID"
echo -e "${GREEN}Region:${NC} $REGION"
# Create deployment package
echo -e "\n${YELLOW}Creating deployment package...${NC}"
cd "$(dirname "$0")/lambda"
zip -r ../lambda.zip index.js
cd ..
# Check if function exists
if aws lambda get-function --function-name $FUNCTION_NAME --region $REGION &> /dev/null; then
echo -e "${YELLOW}Updating existing function...${NC}"
aws lambda update-function-code \
--function-name $FUNCTION_NAME \
--zip-file fileb://lambda.zip \
--region $REGION
else
echo -e "${YELLOW}Creating new Lambda function...${NC}"
# Create execution role if needed
ROLE_NAME="openclaw-alexa-role"
ROLE_ARN="arn:aws:iam::${ACCOUNT_ID}:role/${ROLE_NAME}"
if ! aws iam get-role --role-name $ROLE_NAME &> /dev/null; then
echo -e "${YELLOW}Creating IAM role...${NC}"
cat > trust-policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
aws iam create-role \
--role-name $ROLE_NAME \
--assume-role-policy-document file://trust-policy.json
aws iam attach-role-policy \
--role-name $ROLE_NAME \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
echo "Waiting for role to propagate..."
sleep 10
rm trust-policy.json
fi
# Create function
aws lambda create-function \
--function-name $FUNCTION_NAME \
--runtime $RUNTIME \
--role $ROLE_ARN \
--handler index.handler \
--zip-file fileb://lambda.zip \
--timeout $TIMEOUT \
--memory-size $MEMORY \
--region $REGION
fi
# Set environment variables (use your own values)
echo -e "${YELLOW}Setting environment variables...${NC}"
if [ -z "$OPENCLAW_GATEWAY_URL" ] || [ -z "$OPENCLAW_GATEWAY_PASSWORD" ]; then
echo -e "${RED}Error: Set OPENCLAW_GATEWAY_URL and OPENCLAW_GATEWAY_PASSWORD first${NC}"
echo "export OPENCLAW_GATEWAY_URL=https://your-machine.tailnet.ts.net"
echo "export OPENCLAW_GATEWAY_PASSWORD=your-password"
exit 1
fi
aws lambda update-function-configuration \
--function-name $FUNCTION_NAME \
--environment "Variables={OPENCLAW_GATEWAY_URL=$OPENCLAW_GATEWAY_URL,OPENCLAW_GATEWAY_PASSWORD=$OPENCLAW_GATEWAY_PASSWORD}" \
--region $REGION
# Get function ARN
LAMBDA_ARN=$(aws lambda get-function --function-name $FUNCTION_NAME --region $REGION --query 'Configuration.FunctionArn' --output text)
# Clean up
rm -f lambda.zip
echo -e "\n${GREEN}═══════════════════════════════════════${NC}"
echo -e "${GREEN} Deployment Complete! ${NC}"
echo -e "${GREEN}═══════════════════════════════════════${NC}"
echo -e "\nLambda ARN: ${YELLOW}$LAMBDA_ARN${NC}"
echo -e "\n${GREEN}Next Steps:${NC}"
echo "1. Go to: https://developer.amazon.com/alexa/console/ask"
echo "2. Create New Skill → Name: 'OpenClaw' → Custom → Provision your own"
echo "3. Copy the Skill ID"
echo "4. Add Alexa trigger to Lambda:"
echo " aws lambda add-permission \\"
echo " --function-name $FUNCTION_NAME \\"
echo " --statement-id alexa-skill \\"
echo " --action lambda:InvokeFunction \\"
echo " --principal alexa-appkit.amazon.com \\"
echo " --event-source-token <YOUR_SKILL_ID>"
echo ""
echo "5. In Alexa Console → JSON Editor → paste contents of:"
echo " interactionModels/custom/en-US.json"
echo ""
echo "6. Endpoint → AWS Lambda ARN → paste: $LAMBDA_ARN"
echo "7. Save & Build Model"
echo "8. Test tab → say 'ask claw bot to tell me a joke'"