У цьому завданні ми розгортаємо додатки MySQL та Flask в AWS, створюємо приватні та публічні підмережі, а також EC2 для MySQL у приватній підмережі та сервер Flask у публічній підмережі. Потім намагаємося підключити обидва сервери.
Створення VPC
назва VPC FlaskApp-Vpc.
Створення підмереж
- Публічна підмережа
назва публічної підмережі public subnet-flask app
IP діапазон 10.0.2.0/24
- Приватна підмережа
назва приватної підмережі private subnet-MySql
IP діапазон 10.0.1.0/24
Налаштування NAT Gateway
- Розгорніть NAT Gateway в публічній підмережі.
- NAT Gateway дозволяє вихідний трафік з приватної підмережі без відкриття її для Інтернету.
- Ассоціюйте NAT Gateway з маршрутизатором приватної підмережі, щоб дозволити доступ до Інтернету безпечно.
Налаштування маршрутизації
- Публічна підмережа маршрутизує трафік до Інтернету через Internet Gateway.
- Підмережа маршрутизує вихідний трафік через NAT Gateway.
- Додаток Flask зв'язується з MySQL за допомогою приватної IP-адреси.
Перейдіть до Route Tables > Виберіть таблицю маршруту публічної підмережі.
Додайте маршрут:
Мета: 0.0.0.0/0.
Мета: Internet Gateway.
Крок 6: Запуск EC2 екземплярів (Інстанс бази даних MySQL):
Запустіть EC2 інстанс у приватній підмережі.
Виберіть AMI з попередньо встановленим MySQL або налаштуйте MySQL вручну.
Використовуйте Security Group для дозволу вхідного трафіку лише від приватної IP Flask додатка.
Крок 7: Налаштування Flask і MySQL
Налаштування MySQL:
- Підключіться до інстансу MySQL через SSH.
- Створіть базу даних і користувача для Flask додатка:
CREATE DATABASE myapp;
CREATE USER 'flaskuser'@'192.168.1.%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON myapp.* TO 'flaskuser'@'192.168.1.%';
FLUSH PRIVILEGES;
Налаштування Flask:
- Підключіться до інстансу Flask через SSH.
- Напишіть Flask додаток для підключення до MySQL за допомогою його приватної IP:
import mysql.connector
from flask import Flask
app = Flask(__name__)@app.route('/')
def index():
try:
conn = mysql.connector.connect(
host="192.168.1.2",
user="flaskuser",
password="password",
database="myapp"
)
return "Connected to the database!"
except mysql.connector.Error as err:
return f"Error connecting to database: {err}"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Крок 8: Налаштування Security Groups
- Для інстансу MySQL: Дозволити вхідний трафік на порт 3306 від приватного IP Flask інстансу.
- Для інстансу Flask: Дозволити вхідний трафік на порт 5000 від будь-якої публічної IP.
Крок 9: Перевірка з'єднання
- Ping та Telnet: З інстансу Flask протестуйте підключення до приватної IP MySQL: bash
ping 192.168.1.2
telnet 192.168.1.2 3306
Дякую....
Перекладено з: Design, Deploy, and Diagnose: A Comprehensive Cloud Project with Flask and MySQL.