Vous êtes sur la page 1sur 10

Master ASI

A.U : 2022/2023
TP 2 - Création d’une base de données dans un Cloud
avec une application de test

Objectif :
L’objectif de ce TP est de créer une base de données dans un Cloud (AWS) puis de la faire
connecter à une application PHP de test.
Les étapes de réalisation du TP :
- Création d’une base de données MySQL.
- Connexion à la machine virtuelle du serveur Web Apache déjà créée précédemment
dans le TP 1.
- Création d’une application PHP dans le serveur Web et faire la connexion entre cette
application et la base de données.

Voir démo du TP 2 (et TP 1).

Tâche 1 : Création d’une base de données MySQL


Au cours de cette étape, vous allez créer une instance de base de données Amazon RDS for
MySQL.

Pour créer une instance de base de données MySQL :

i. Connectez-vous à la AWS Management Console et ouvrez la console Amazon RDS à


l'adresse https://console.aws.amazon.com/rds/

1
i. Sur la page Créer une base de données, vérifiez que l'option Création standard est
activée, puis choisissez MySQL.

ii. Dans la section Modèles, choisissez Offre gratuite.

Puis définissez les valeurs suivantes :

• Identifiant d'instance de base de données : database-1


• Identifiant principal : admin
• Mot de passe principal : Choisissez un mot de passe.
• Confirmer le mot de passe : Saisissez à nouveau le mot de passe.

2
iii. Dans la section Classe d'instance de base de données, définissez les valeurs
suivantes :

• Classe à capacité extensible (inclut les classes t)


• db.t3.micro

Remarque :

Amazon RDS offre de nombreux types d'instances optimisés pour différents cas
d'utilisation de base de données relationnelle. Ces types d'instances correspondent à
différentes combinaisons en termes de capacités de CPU, de mémoire, de stockage et
de mise en réseau. Chaque type d'instance inclut plusieurs tailles d'instance, ce qui
vous permet de mettre à l'échelle vos bases de données en fonction des exigences de
la charge de travail ciblée.

Par exemple, les instances db.t3 (choisies dans ce TP) sont conçues pour les charges
de travail de base de données nécessitant une utilisation modérée du CPU avec des
pics d’utilisation temporaires.

Référence pour les types d’instances Amazon RDS :


https://aws.amazon.com/fr/rds/instance-types/

3
iv. Dans les sections Stockage, utilisez les valeurs par défaut.

• Type de stockage : gp2 (SSD)


• Stockage alloué : 20G
• Choisir Activer la mise à l’échelle automatique du stockage
• Seuil de stockage minimal : 1000

v. Dans la section Connectivité, définissez les valeurs suivantes :

• Ressource de calcul : choisissez Se connecter à une ressource de calcul EC2


• Instance EC2 : L’instance créée dans la tâche précédente (Serveur php)
• Groupes de sécurité VPC (pare-feu) : Choisir l’option Choisir existants. Ainsi, un
groupe de sécurité permettant la connectivité avec l’instance EC2 sectionnée (instance
Serveur php) sera ajouté.

4
vi. Pour créer votre instance de base de données MySQL, choisissez Créer une base de
données.

Votre nouvelle instance de base de données apparaît dans la liste Bases de données avec l'état
Création en cours.

5
vii. Attendez que l’état de votre instance de base de données affiche Disponible.
Sélectionnez ensuite le nom de l'instance de base de données pour afficher les détails.

viii. Dans la section Connectivité et sécurité, affichez le Point de terminaison et le Port


de l’instance de base de données.

6
Tache 2 : Création de l’application de test

1) Connexion à l’instance EC2 et l’installation de PHP et de MySQL

1. Connectez-vous à l'instance EC2 que vous avez précédemment créée


(ssh -i ma-cle-serveur-php.pem ec2-user@xxxxxx.compute-1.amazonaws.com)

1. Installez le logiciel PHP à l'aide de la commande amazon-linux-extras install. Cette


commande installe plusieurs packages logiciels et les dépendances connexes au même
moment.
[ec2-user@ip-XXXXXXX ~]$ sudo amazon-linux-extras install php8.0 mariadb10.5

2. Démarrez le serveur web avec la commande illustrée ci-dessous.


[ec2-user@ip-XXXXXXX ~]$ sudo systemctl start httpd

7
2) Création d’une table dans la base de données
Il est possible de créer la table à partir d’un client MySQL connecté à la base de données.
Dans cet exemple, la connexion est faite à partir du client MySQL déjà installé dans
l’instance du serveur Web.
[ec2-user@ip-XXXXXXX ~]$ sudo mysql -h database-
XXXXXXXXXXX.rds.amazonaws.com -u admin -padminadmin
MySQL [(none)]> CREATE DATABASE db1;
MySQL [(none)]> use db1;
MySQL [db1]> CREATE TABLE EMPLOYEES (ID int(11) UNSIGNED
AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS
VARCHAR(90));
MySQL [db1]> exit
3) Ajout d’une application PHP dans le serveur web Apache
[ec2-user@ip-XXXXXXX ~]$ cd /var/www/html
[ec2-user@ip-XXXXXXX ~]$ sudo nano test-php-bd.php

8
<?php
define('DB_SERVER', 'database-XXXXXXXXXXX.rds.amazonaws.com');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'xxxxxxxx');
define('DB_DATABASE', 'db1');
?>
<html>
<body>
<h1>Test Page PHP</h1>
<?php
/* Connect to MySQL and select the database. */
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);

if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();

$database = mysqli_select_db($connection, DB_DATABASE);

/* Ensure that the EMPLOYEES table exists. */


VerifyEmployeesTable($connection, DB_DATABASE);

/* If input fields are populated, add a row to the EMPLOYEES table. */


$employee_name = htmlentities($_POST['NAME']);
$employee_address = htmlentities($_POST['ADDRESS']);

if (strlen($employee_name) || strlen($employee_address)) {
AddEmployee($connection, $employee_name, $employee_address);
}
?>
<!-- Input form -->
<form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
<table border="0">
<tr>
<td>NAME</td>
<td>ADDRESS</td>
</tr>
<tr>
<td>
<input type="text" name="NAME" maxlength="45" size="30" />
</td>
<td>
<input type="text" name="ADDRESS" maxlength="90" size="60" />
</td>
<td>
<input type="submit" value="Add Data" />
</td>
</tr>
</table>
</form>
<!-- Display table data. -->
<table border="1" cellpadding="2" cellspacing="2">
<tr>
<td>ID</td>
<td>NAME</td>
<td>ADDRESS</td>
</tr>

<?php
$result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");
while($query_data = mysqli_fetch_row($result)) {
echo "<tr>";
echo "<td>",$query_data[0], "</td>",
"<td>",$query_data[1], "</td>",
"<td>",$query_data[2], "</td>";
echo "</tr>";
}
?>
</table>
<!-- Clean up. -->
<?php

mysqli_free_result($result);
mysqli_close($connection);
?>
</body>
</html>
<?php
/* Add an employee to the table. */
function AddEmployee($connection, $name, $address) {
$n = mysqli_real_escape_string($connection, $name);
$a = mysqli_real_escape_string($connection, $address);
$query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
}
/* Check whether the table exists and, if not, create it. */
function VerifyEmployeesTable($connection, $dbName) {
if(!TableExists("EMPLOYEES", $connection, $dbName))
{
$query = "CREATE TABLE EMPLOYEES (
ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(45),
ADDRESS VARCHAR(90)
)";

if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");


}
}
/* Check for the existence of a table. */
function TableExists($tableName, $connection, $dbName) {
$t = mysqli_real_escape_string($connection, $tableName);
$d = mysqli_real_escape_string($connection, $dbName);

$checktable = mysqli_query($connection,
"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");

if(mysqli_num_rows($checktable) > 0) return true;

return false;
}
?>

9
Pour tester l’application (remarque : utilisez http et non https)
http://XXXXXXX.compute-1.amazonaws.com/test-php-bd.php

Tache 3 : Exploration des groupes de sécurité créés


Explorez les groupes de sécurité associés à l’instance du serveur Web et l’instance de la base de
données.

10

Vous aimerez peut-être aussi