Advertisement
Javi

AWS: CLI automation demo with pokemon

Dec 3rd, 2021 (edited)
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. export AWS_DEFAULT_REGION=us-east-1
  2.  
  3. VPC=$(aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text)
  4. echo The default VPC is $VPC.
  5.  
  6. SUBNET_IDX=$(($RANDOM % 6))
  7. echo Your subnet index is $SUBNET_IDX.
  8.  
  9. SUBNET=$(aws ec2 describe-subnets \
  10. --filters "Name=vpc-id,Values=$VPC" \
  11. --query "Subnets[$SUBNET_IDX].SubnetId" \
  12. --output text)
  13. echo Your subnet is $SUBNET.
  14.  
  15. AMI=$(aws ec2 describe-images \
  16. --owners 099720109477 \
  17. --filters 'Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-*-22.04-amd64-server-*' 'Name=state,Values=available' \
  18. --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' \
  19. --output text)
  20. echo The AMI is going to be $AMI.
  21.  
  22. SG=$(aws ec2 create-security-group \
  23. --group-name AppSG-$USER\
  24. --description "The security group of the application." \
  25. --vpc-id $VPC \
  26. --query 'GroupId' \
  27. --output text)
  28. echo The security group is $SG.
  29.  
  30. aws ec2 authorize-security-group-ingress \
  31. --group-id $SG \
  32. --protocol tcp \
  33. --port 8080 \
  34. --cidr 0.0.0.0/0
  35.  
  36. cat << EOF > pokemon.sh
  37. #!/bin/sh
  38.  
  39. sudo apt update
  40. sudo apt install awscli openjdk-17-jre-headless -y
  41. wget https://github.com/ciberado/pokemon-java/releases/download/v2.0.0/pokemon-2.0.0.jar
  42. java -jar pokemon-2.0.0.jar
  43. EOF
  44.  
  45. ls
  46. cat pokemon.sh
  47.  
  48. aws ec2 run-instances \
  49. --subnet-id $SUBNET \
  50. --image-id $AMI \
  51. --security-group-ids $SG \
  52. --instance-type t3.nano \
  53. --block-device-mapping DeviceName=/dev/sda1,Ebs={VolumeSize=8} \
  54. --user-data file://pokemon.sh \
  55. --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$USER},{Key=App,Value=Pokemon}]"
  56.  
  57. IP=$(aws ec2 describe-instances \
  58. --filters "Name=tag:Name,Values=$USER" \
  59. --query 'Reservations[*].Instances[*].PublicIpAddress' \
  60. --output text)
  61. echo Your application is at http://$IP:8080
  62. echo And your Pokémon is $(curl -s http://$IP:8080/ | jq .name -r).
  63.  
  64.  
  65. aws ec2 describe-instances \
  66. --filters "Name=instance-type,Values=t3.nano" \
  67. --query "Reservations[*].Instances[*].{Id: InstanceId, name: Tags[?Key=='Name'] | [0].Value, IP: PublicIpAddress, Time: LaunchTime}" \
  68. --output table
  69.  
  70. ADDRESSES=$(aws ec2 describe-instances \
  71. --filters "Name=instance-type,Values=t3.nano" \
  72. --query "Reservations[*].Instances[*].PublicIpAddress" \
  73. --output text)
  74. echo Instances public IPs:
  75. echo $ADDRESSES
  76.  
  77.  
  78. for IP in $ADDRESSES
  79. do
  80. POKEMON=$(curl -s http://$IP:8080/ | jq .name -r)
  81. echo "$IP: $POKEMON ( http://$IP:8080 )"
  82. done
  83. Open any of the instances.
  84.  
  85.  
  86.  
  87.  
  88.  
  89. aws ec2 run-instances \
  90. --subnet-id $SUBNET \
  91. --image-id $AMI \
  92. --security-group-ids $SG \
  93. --count 1 \
  94. --instance-type t3.nano \
  95. --block-device-mapping DeviceName=/dev/sda1,Ebs={VolumeSize=8} \
  96. --user-data file://pokemon.sh \
  97. --instance-market-options '{"MarketType":"spot"}'
  98.  
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement