Crear virtual env
python3 -m venv ./venv
#Activar el entorno
source ./venv/bin/activateInstalar dentro del env localstack, el cli de aws y el local aws
python3 -m pip install --upgrade localstack
pip install awscli awscli-local terraform-localConfigurar las variables
export AWS_ACCESS_KEY_ID="test"
export AWS_SECRET_ACCESS_KEY="test"
export AWS_DEFAULT_REGION="us-east-1"
#Iniciar el stack
localstack start
#Testear
awslocal kinesis list-streamsCrear un archivo llamado user_script.sh con este contenido
touch user_script.sh
nano user_script.sh
#!/bin/bash -xeu
apt update
apt install python3 -y
python3 -m http.server 8000Pasos para levantar las ec2
awslocal ec2 authorize-security-group-ingress \
--group-id default \
--protocol tcp \
--port 8000 \
--cidr 0.0.0.0/0De este comando debemos extraer el GroupId
awslocal ec2 describe-security-groupsY luego ese id pasarlo al parametro security-group-id colocar el security group id
awslocal ec2 run-instances \
--image-id ami-ff0fea8310f3 \
--count 2 \
--instance-type t3.nano \
--security-group-ids 'sg-ba212ac91e4d91d7e' \
--user-data file://./user_script.sh Chequear que estan ejecutandose
awslocal ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,PublicIpAddress,State.Name]' --output tableCrear archivo provider.tf y main.tf
Ejecutar comandos
tflocal init
tflocal plan
tflocal apply -auto-approvelocalstack logs be accessible via SSH at: 127.0.0.1:12862, 172.17.0.4:22 curl 172.17.0.4:8000
Se agrego al main.tf el codigo:
resource "aws_sqs_queue" "tf_queue_one" {
name = "queue-one"
delay_seconds = 10
max_message_size = 2048
message_retention_seconds = 86400
receive_wait_time_seconds = 10
tags = {
Environment = "production"
}
}
resource "aws_sqs_queue" "tf_queue_two" {
name = "queue-two"
delay_seconds = 10
max_message_size = 2048
message_retention_seconds = 86400
receive_wait_time_seconds = 10
tags = {
Environment = "production"
}
}Ejecutar comandos de terraform
tflocal plan
tflocal apply -auto-approvePara probar usamos el envio de mensajes
awslocal sqs send-message \
--queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-one \
--message-body "Prueba a sqs 1.0"
awslocal sqs send-message \
--queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-one \
--message-body "Prueba a sqs 1.1"
awslocal sqs send-message \
--queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-two \
--message-body "Prueba a sqs 2.0"
awslocal sqs send-message \
--queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-two \
--message-body "Prueba a sqs 2.1" Para recepcionar los mensajes
awslocal sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-one
awslocal sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-one
awslocal sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-two
awslocal sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/queue-twoSe agrego al main.tf el codigo:
resource "aws_dynamodb_table" "primera_tabla" {
name = "PrimeraTabla"
billing_mode = "PROVISIONED"
read_capacity = 5
write_capacity = 5
hash_key = "Id"
attribute {
name = "Id"
type = "S"
}
}Ejecutar comandos de terraform
tflocal plan
tflocal apply -auto-approveEjecutar el archivo de python
python3 scrypt.py