-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdeploy-lambda.sh
More file actions
executable file
·148 lines (120 loc) · 4.33 KB
/
Copy pathdeploy-lambda.sh
File metadata and controls
executable file
·148 lines (120 loc) · 4.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
# Alexa Computer Control - Lambda Deployment Script
# Este script empacota e faz deploy da função Lambda
set -e
echo "🚀 Iniciando deploy da função Lambda..."
# Verificar se AWS CLI está configurado
if ! command -v aws &> /dev/null; then
echo "❌ AWS CLI não encontrado. Instale primeiro: https://aws.amazon.com/cli/"
exit 1
fi
# Verificar credenciais AWS
if ! aws sts get-caller-identity &> /dev/null; then
echo "❌ AWS CLI não está configurado. Execute: aws configure"
exit 1
fi
# Configurações
FUNCTION_NAME="computer-control-alexa-skill"
REGION="${AWS_REGION:-us-east-1}"
RUNTIME="nodejs18.x"
HANDLER="index.handler"
ROLE_NAME="lambda-execution-role-computer-control"
echo "📍 Região: $REGION"
echo "📁 Função: $FUNCTION_NAME"
# Navegar para o diretório da função Lambda
cd lambda-function
# Instalar dependências
echo "📦 Instalando dependências..."
npm install --production
# Criar pacote ZIP
echo "📦 Criando pacote de deployment..."
rm -f function.zip
zip -r function.zip . -x "*.git*" "node_modules/.cache/*" "*.md"
# Verificar se a função já existe
FUNCTION_EXISTS=$(aws lambda list-functions --region $REGION --query "Functions[?FunctionName=='$FUNCTION_NAME'].FunctionName" --output text)
if [ "$FUNCTION_EXISTS" = "$FUNCTION_NAME" ]; then
echo "🔄 Atualizando função existente..."
aws lambda update-function-code \
--function-name $FUNCTION_NAME \
--zip-file fileb://function.zip \
--region $REGION
echo "⚙️ Atualizando configuração..."
aws lambda update-function-configuration \
--function-name $FUNCTION_NAME \
--runtime $RUNTIME \
--handler $HANDLER \
--timeout 30 \
--memory-size 256 \
--region $REGION
else
echo "🆕 Criando nova função..."
# Criar role IAM se não existir
ROLE_ARN=$(aws iam get-role --role-name $ROLE_NAME --query 'Role.Arn' --output text 2>/dev/null || echo "")
if [ -z "$ROLE_ARN" ]; then
echo "🔐 Criando IAM role..."
# Criar trust policy
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
rm trust-policy.json
# Esperar role ser criada
echo "⏳ Aguardando role ser criada..."
sleep 10
ROLE_ARN=$(aws iam get-role --role-name $ROLE_NAME --query 'Role.Arn' --output text)
fi
echo "🔐 Usando IAM Role: $ROLE_ARN"
# Criar função
aws lambda create-function \
--function-name $FUNCTION_NAME \
--runtime $RUNTIME \
--role $ROLE_ARN \
--handler $HANDLER \
--zip-file fileb://function.zip \
--timeout 30 \
--memory-size 256 \
--region $REGION
# Aguardar função ficar ativa
echo "⏳ Aguardando função ficar ativa..."
aws lambda wait function-active --function-name $FUNCTION_NAME --region $REGION
fi
# Obter ARN da função
FUNCTION_ARN=$(aws lambda get-function --function-name $FUNCTION_NAME --region $REGION --query 'Configuration.FunctionArn' --output text)
echo "✅ Deploy concluído!"
echo "📋 ARN da função: $FUNCTION_ARN"
echo ""
echo "🔧 Próximos passos:"
echo "1. Configure as variáveis de ambiente no AWS Console:"
echo " - COMPUTER_SERVER_URL: http://seu-ip:3000"
echo " - API_KEY: sua-chave-secreta"
echo " - COMPUTER_MAC: seu-endereco-mac"
echo ""
echo "2. Adicione permissão para Alexa invocar a função:"
echo " aws lambda add-permission \\"
echo " --function-name $FUNCTION_NAME \\"
echo " --statement-id alexa-skill-invoke \\"
echo " --action lambda:InvokeFunction \\"
echo " --principal alexa-appkit.amazon.com \\"
echo " --region $REGION"
echo ""
echo "3. Use este ARN na configuração da sua Skill Alexa:"
echo " $FUNCTION_ARN"
# Limpar arquivos temporários
rm -f function.zip
echo "🎉 Deploy finalizado com sucesso!"