Remote development on EC2 instances
--Resource
--
1. Create a bot
# Open this bot in telegram
https://telegram.me/botfather
# give the commands
/start
/newbot
# give a name to your bot
# you will get a token . SAVE IT!
2. Create EC2 instance
# open aws account
# search EC2
# Launch new insatnce (If you want to control an intance already created , ignore this step)
3. Prepare zip file
# Open a linux terminal and give this commans to create a lambda function
mkdir /tmp/bot
cd /tmp/bot
pip3 install python-telegram-bot pynamodb --system -t .
wget https://raw.githubusercontent.com/itpp-labs/odoo-devops-docs/master/tools/ec2-dev-bot/lambda_function.py -O lambda_function.py
rm -rf botocore* tornado* docutils*
zip -r /tmp/bot.zip *
# save this zip file
4. Create Lambda function
# open aws account
# search lambda
# click on create function
# choose Author from scratch , give function name , select runtime Python 3.8
# click on create function
5. Permissions (Role)
# open aws account
# search IAM service
# select Acces Management -> Policies (on left side)
# create policy
Create policy of actions for DynamoDB:
Service – DynamoDB
Action – All DynamoDB actions
Resources – All Resources
Create policy of actions for EC2:
Service – EC2
Action – All EC2 actions
Resources – All Resources
# search IAM service
# select Acces Management -> roles (on left side)
# Open role attached to the lambda function
# Attache created policies
5. Upload code
# open asw account
# search lambda
# select the function you were created
# Code entry type: Upload a .zip file
# Upload bot.zip
6. Time OUT
# open asw account
# search lambda
# select the function you were created
# select configuration
# select General configuration
# set Timeout 35sec
7. Trigger
# open aws account
# search lambda
# select the function you were created
# select configuration
# select Triggers
# set API Gateway
API type: HTTP
Authorization: NONE
Method: ANY
# set CloudWatch Events
Rule name –> ec2-dev-bot-cron
Schedule expression –> rate(1 hour)
8. Register webhook at telegram
# open a linux terminal and type it
# AWS_API_GATEWAY (HOw get?)
open aws account
search lambda
select the function you were created
select configuration
select Triggers
select API Gateway
API endpoint = AWS_API_GATEWAY
# Telegram token from https://telegram.me/botfather when you create a bot
AWS_API_GATEWAY=XXX
TELEGRAM_TOKEN=XXX
curl -XPOST https://api.telegram.org/bot$TELEGRAM_TOKEN/setWebhook --data "url=$AWS_API_GATEWAY" --data "allowed_updates=['message','callback_query']"
OR use this method to set up hook instead of use commands in terminal
https://api.telegram.org/bot{my_bot_token}/setWebhook?url={url_to_send_updates_to}
https://api.telegram.org/bot{my_bot_token}/getWebhookInfo
9. Settings
# open aws account
# search lambda
# select the function you were created
# select configuration
# select Environment variables
# set these variables
#NOTE
# replace 123 -> your telegram user id (You can get one via Get My ID bot)
# Instance ID looks like i-07e6... and can be found in Description tab of existing Instance
LOG_LEVEL = DEBUG
AUTO_SHUTDOWN_HARD = 2
AUTO_SHUTDOWN_SOFT = 2
USER_123_INSTANCE = (aws instance id)
USER_123_CODE = (123)
TELEGRAM_TOKEN = (new bot token)
DOMAIN=”USERCODE.example.com”
DOMAIN_NO_SSL=”USERCODE.nossl.example.com”
10. How to use
# open telegram bot created by you
get instance info
/status
turn the instance off after confirmation
/shutdown
turn the instance off without confirmation
Shutdown
turn on instance or extend time to shutdown
/up
10. Usefull things
# Reset webhook
https://api.telegram.org/bot{my_bot_token}/setWebhook?url=
# To view the messages from your BOT
https://api.telegram.org/bot{my_bot_token}/getUpdates