Diferència entre revisions de la pàgina «AWS: Amazon Web Services. Cloud»

De wikijoan
Salta a la navegació Salta a la cerca
 
(Hi ha 12 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
=Introducció=
+
=Crear una màquina EC2 a AWS=
 
Entro a la consola de AWS Management Console
 
Entro a la consola de AWS Management Console
  
Línia 32: Línia 32:
 
</pre>
 
</pre>
 
Ara ja m'he de poder connectar via ssh. El public DNS és:
 
Ara ja m'he de poder connectar via ssh. El public DNS és:
*ec2-52-207-224-88.compute-1.amazonaws.com
+
*ec2-3-91-76-69.compute-1.amazonaws.com
 
<pre>
 
<pre>
 
$ chmod 400 joan2.pem
 
$ chmod 400 joan2.pem
$ ssh -i "joan.pem" ubuntu@ec2-54-172-172-75.compute-1.amazonaws.com
+
$ ssh -i "joan.pem" ubuntu@ec2-3-91-76-69.compute-1.amazonaws.com
 
</pre>
 
</pre>
 
i ja puc entrar. Puc utilitzar ''scp'' per enviar fitxers al servidor. Recordar que quan acabi l'he d'apagar.
 
i ja puc entrar. Puc utilitzar ''scp'' per enviar fitxers al servidor. Recordar que quan acabi l'he d'apagar.
  
==Base de dades langtrainer a AWS==
+
=Base de dades langtrainer a AWS=
 
Vull tenir un mysql en el cloud. Escullo Database RDS (RDS significa Amazon Relational Database Service)
 
Vull tenir un mysql en el cloud. Escullo Database RDS (RDS significa Amazon Relational Database Service)
  
Línia 50: Línia 50:
 
*DB instance identifier: database-2
 
*DB instance identifier: database-2
 
*username: admin
 
*username: admin
*password: S*******
+
*password: k*******
  
Miro quines opcions té el ''stardard create'', i entre elles hi ha el public: no
+
Miro quines opcions té el ''stardard create'', i entre elles hi ha el public: yes (important si vull accedir des d'un ordinador remot)
  
 
Finalment: create database
 
Finalment: create database
Línia 58: Línia 58:
 
*end point: database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com
 
*end point: database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com
  
(TBD). Havia de fer de manera d'obrir el port 3306 (inbound rule)
+
Com que al principi no havia fet que la BD fos accessible publicament, qualsevol opció la puc modificar a posteriori. Fer que la nostra instància sigui ''public accessible'':
<pre>
+
*https://aws.amazon.com/premiumsupport/knowledge-center/rds-connectivity-instance-subnet-vpc/
mysql -h langtrainer.cyr40ydu5rcj.us-east-1.rds.amazonaws.com -P 3306 -u admin -p
+
 
mysql -h langtrainer.cyr40ydu5rcj.us-east-1.rds.amazonaws.com -u admin -p langtrainer < /home/joan/copia_langtrainer_200902.dmp
+
Hem d'obrir el port 3306 (seguretat > inbound rule). Podem posar ''detectar la meva IP''.
</pre>
+
 
Des del meu portàtil puc accedir a la base de dades remota:
+
Comprovar que ho hem fet bé: (el port 3306 està obert)
<pre>
 
php llista_langtrainer.php
 
</pre>
 
''llista_langtrainer.php'':
 
 
<pre>
 
<pre>
 +
$ nmap -A -T4 -Pn -p3306 database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com
 +
Starting Nmap 7.80 ( https://nmap.org ) at 2021-01-26 21:40 CET
 +
Nmap scan report for database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com (54.162.80.115)
 +
Host is up (0.10s latency).
 +
rDNS record for 54.162.80.115: ec2-54-162-80-115.compute-1.amazonaws.com
  
 +
PORT    STATE SERVICE VERSION
 +
3306/tcp open  mysql?
 +
...
 
</pre>
 
</pre>
 
+
Ja hem de poder entrar al mysql des del portàtil (des d'una màquina remota). I podem carregar una base de dades remotament.
==Màquina EC2 a AWS. LAMP==
 
 
<pre>
 
<pre>
ssh -i /home/joan/Baixades/prova1_ec2.pem ec2-user@ec2-52-91-66-204.compute-1.amazonaws.com
+
mysql -h database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com -P 3306 -u admin -p
sudo chmod 400 /home/joan/Baixades/prova1_ec2.pem
+
mysql -h database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com -u admin -p langtrainer < /home/joan/copia_langtrainer_200902.dmp
ssh -i /home/joan/Baixades/prova1_ec2.pem ec2-user@ec2-52-91-66-204.compute-1.amazonaws.com
 
 
</pre>
 
</pre>
Ja estic a la màquina remota.
+
I ara podem executar un script. El següent codi detecta si el script l'estem executant des de la shell o des del navegador:
 
 
Instal·lo el Apache i el LAMP (tutorial que vaig trobar, TBD)
 
 
 
També puc executar el script ''llista_langtrainer'' en la màquina remota: (la base de dades ''langtrainer'' està en una altra màquina de AWS)
 
 
 
Des de la línia de comandes:
 
 
<pre>
 
<pre>
php llista_langtrainer.php  
+
*php llista_langtrainer.php
 +
*http://localhost/M10_UF2/llista_langtrainer.php
 
</pre>
 
</pre>
i també la puc accedir online:
+
''llista_langtrainer.php'':
*http://ec2-52-91-66-204.compute-1.amazonaws.com/llista_langtrainer.php
 
 
 
script ''lista_langtrainer.php'':
 
 
<pre>
 
<pre>
 
<?php
 
<?php
 
header('Content-type: text/html; charset=utf-8');
 
header('Content-type: text/html; charset=utf-8');
  
$servername = "langtrainer.cyr40ydu5rcj.us-east-1.rds.amazonaws.com";
+
$servername = "database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com";
 
$username = "admin";
 
$username = "admin";
$password = "She4aiVa";
+
$password = "keiL2lai";
 
$dbname = "langtrainer";
 
$dbname = "langtrainer";
  
Línia 110: Línia 104:
 
mysqli_query($conn, "SET NAMES 'utf8'");
 
mysqli_query($conn, "SET NAMES 'utf8'");
  
$sql = "select word, translation from WORD W, TRANSLATION T where W.id_word=T.id_word limit 10";
+
$sql = "select word, translation from word w, translation t where w.id_word=t.id_word limit 10";
  
 
$resultset = mysqli_query($conn,$sql);
 
$resultset = mysqli_query($conn,$sql);
  
 
+
if (php_sapi_name()==='cli') { //executem des de la comanda
while($row = mysqli_fetch_array($resultset)) {
+
echo "VOCABULARI\n============\n";
\techo $row['word'].": ".$row['translation']."\
+
while($row = mysqli_fetch_array($resultset)) {
";
+
echo $row['word'].": ".$row['translation']."\n";
 +
}
 +
} else { //executem des de la web
 +
echo "<h2>VOCABULARI</h2>";
 +
echo "<ul>";
 +
while($row = mysqli_fetch_array($resultset)) {
 +
echo "<li>".$row['word'].": ".$row['translation']."</li>";
 +
}
 +
echo "</ul>";
 
}
 
}
 +
mysqli_close($conn);
  
mysqli_close($conn);
+
echo php_sapi_name();
  
 
?>
 
?>
 
</pre>
 
</pre>
{{Autor}}, setembre 2020
+
==Aturar la màquina quan arrenqui (TBD)==
 +
La instància RDS està per defecte encesa. Si l'apaguem, al cap d'una setmana arrenca.
 +
 
 +
Per evitar-ho, es pot programar una funció que l'apagui automàticament.
 +
*https://dzone.com/articles/create-an-aws-lambda-function-to-stop-and-start-an
 +
 
 +
=Màquina EC2 a AWS. LAMP (servei web i base de dades)=
 +
<pre>
 +
ssh -i "joan.pem" ubuntu@ec2-54-172-172-75.compute-1.amazonaws.com
 +
</pre>
 +
Ja estic a la màquina remota.
 +
 
 +
També puc executar el script ''llista_langtrainer'' en la màquina remota: (la base de dades ''langtrainer'' està en una altra màquina de AWS)
 +
<pre>
 +
$ sudo apt install php7.4-cli
 +
$ sudo apt install php7.4-mysql
 +
 
 +
$ php llista_langtrainer.php
 +
VOCABULARI
 +
============
 +
deserve (to): merèixer, ser digne de
 +
weird: rar, extrany
 +
gills: branquies, agalles
 +
draw breath (to): agafar aire
 +
draw (to): dibuixar
 +
draw (to): Estirar (pull), treure, atraure
 +
snout: morro, hocico
 +
wound: ferida
 +
wound: ferir (pp, ferit)
 +
dismiss (to): acomiadar, destituir. Refusar
 +
</pre>
 +
==Instal·lar LAMP (Apache2 i MySQL Server)==
 +
[[Fitxer:Langtrainer aws.png|thumbnail]]
 +
Si no ho havíem fet, hem de permetre les connexions http. En la configuració de la màquina, anar a Configure Security Group. Add Rule and choose HTTP from the dropdown
 +
 
 +
La instal·lació d'Apache+MySQL és molt directa amb aquest enllaç:
 +
*https://niralar.com/install-lamp-web-server-on-amazon-ec2-with-ubuntu-20-04/
 +
<pre>
 +
sudo apt-get update
 +
sudo apt-get install apache2
 +
sudo apt-get install php libapache2-mod-php php-mysql php-curl php-gd php-json php-zip php-mbstring
 +
sudo service apache2 restart
 +
</pre>
 +
<pre>
 +
sudo apt-get install mysql-server
 +
sudo mysql_secure_installation
 +
</pre>
 +
 
 +
Ara ja tenim l'Apache funcionant:
 +
*http://ec2-3-91-76-69.compute-1.amazonaws.com
 +
<pre>
 +
cd /var/www/html
 +
sudo nano llista_langtrainer.php
 +
</pre>
 +
i ja puc executar el meu petit script:
 +
*http://ec2-3-91-76-69.compute-1.amazonaws.com/llista_langtrainer.php
 +
 
 +
=Tancar la sessió=
 +
Quan acabem la sessió, recordar tancar la màquina EC2.
 +
{{Autor}}, setembre 2020, gener 2021

Revisió de 17:11, 29 gen 2021

Crear una màquina EC2 a AWS

Entro a la consola de AWS Management Console

Creo una màquina EC2: All services > Compute > EC2

Les màquines EC2 significa Elastic Computing, i forma part de la Capa gratuïta, 12 mesos gratis, 750 hores al mes (750 horas por mes de uso de instancias t2.micro con Linux, RHEL o SLES)

He de posar la informació de la target de crèdit per tal de poder escollir una instància.

Step 1: Choose an Amazon Machine Image (AMI)

Escullo:
Ubuntu Server 20.04 LTS (HVM), SSD Volume Type - ami-0885b1f6bd170450c (64-bit x86) / ami-054e49cb26c2fd312 (64-bit Arm)
(tier elegible)

Step 2: Choose an Instance Type

Step 7: Review Instance Launch
create a new key pair (joan.pem)

Your instances are now launching

Name: --
Instance ID: i-069719a8c85b6e2bd	
Instance state: Pending -> Running
Instance type: t2.micro
Status check
Alarm status
Availability Zone: us-east-1d
Public IPv4 DNS: ec2-54-172-172-75.compute-1.amazonaws.com
Public IPv4 address: 54.172.172.75

Ara ja m'he de poder connectar via ssh. El public DNS és:

  • ec2-3-91-76-69.compute-1.amazonaws.com
$ chmod 400 joan2.pem
$ ssh -i "joan.pem" ubuntu@ec2-3-91-76-69.compute-1.amazonaws.com

i ja puc entrar. Puc utilitzar scp per enviar fitxers al servidor. Recordar que quan acabi l'he d'apagar.

Base de dades langtrainer a AWS

Vull tenir un mysql en el cloud. Escullo Database RDS (RDS significa Amazon Relational Database Service)

De moment no tinc res:

  • DB Instances (0/40)

create database. Engine options: escullo Standard create, MySQL

  • Template: escullo Free Tier
  • DB instance identifier: database-2
  • username: admin
  • password: k*******

Miro quines opcions té el stardard create, i entre elles hi ha el public: yes (important si vull accedir des d'un ordinador remot)

Finalment: create database

  • end point: database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com

Com que al principi no havia fet que la BD fos accessible publicament, qualsevol opció la puc modificar a posteriori. Fer que la nostra instància sigui public accessible:

Hem d'obrir el port 3306 (seguretat > inbound rule). Podem posar detectar la meva IP.

Comprovar que ho hem fet bé: (el port 3306 està obert)

$ nmap -A -T4 -Pn -p3306 database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com
Starting Nmap 7.80 ( https://nmap.org ) at 2021-01-26 21:40 CET
Nmap scan report for database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com (54.162.80.115)
Host is up (0.10s latency).
rDNS record for 54.162.80.115: ec2-54-162-80-115.compute-1.amazonaws.com

PORT     STATE SERVICE VERSION
3306/tcp open  mysql?
...

Ja hem de poder entrar al mysql des del portàtil (des d'una màquina remota). I podem carregar una base de dades remotament.

mysql -h database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com -P 3306 -u admin -p
mysql -h database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com -u admin -p langtrainer < /home/joan/copia_langtrainer_200902.dmp

I ara podem executar un script. El següent codi detecta si el script l'estem executant des de la shell o des del navegador:

*php llista_langtrainer.php 
*http://localhost/M10_UF2/llista_langtrainer.php

llista_langtrainer.php:

<?php
header('Content-type: text/html; charset=utf-8');

$servername = "database-2.cdlwhdawd8sb.us-east-1.rds.amazonaws.com";
$username = "admin";
$password = "keiL2lai";
$dbname = "langtrainer";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

mysqli_query($conn, "SET NAMES 'utf8'");

$sql = "select word, translation from word w, translation t where w.id_word=t.id_word limit 10";

$resultset = mysqli_query($conn,$sql);

if (php_sapi_name()==='cli') { //executem des de la comanda
	echo "VOCABULARI\n============\n";
	while($row = mysqli_fetch_array($resultset)) {
		echo $row['word'].": ".$row['translation']."\n";
	}
} else { //executem des de la web
	echo "<h2>VOCABULARI</h2>";
	echo "<ul>";
	while($row = mysqli_fetch_array($resultset)) {
		echo "<li>".$row['word'].": ".$row['translation']."</li>";
	}
	echo "</ul>";
}
mysqli_close($conn);

echo php_sapi_name();

?>

Aturar la màquina quan arrenqui (TBD)

La instància RDS està per defecte encesa. Si l'apaguem, al cap d'una setmana arrenca.

Per evitar-ho, es pot programar una funció que l'apagui automàticament.

Màquina EC2 a AWS. LAMP (servei web i base de dades)

ssh -i "joan.pem" ubuntu@ec2-54-172-172-75.compute-1.amazonaws.com

Ja estic a la màquina remota.

També puc executar el script llista_langtrainer en la màquina remota: (la base de dades langtrainer està en una altra màquina de AWS)

$ sudo apt install php7.4-cli
$ sudo apt install php7.4-mysql

$ php llista_langtrainer.php 
VOCABULARI
============
deserve (to): merèixer, ser digne de
weird: rar, extrany
gills: branquies, agalles
draw breath (to): agafar aire
draw (to): dibuixar
draw (to): Estirar (pull), treure, atraure
snout: morro, hocico
wound: ferida
wound: ferir (pp, ferit)
dismiss (to): acomiadar, destituir. Refusar

Instal·lar LAMP (Apache2 i MySQL Server)

Langtrainer aws.png

Si no ho havíem fet, hem de permetre les connexions http. En la configuració de la màquina, anar a Configure Security Group. Add Rule and choose HTTP from the dropdown

La instal·lació d'Apache+MySQL és molt directa amb aquest enllaç:

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install php libapache2-mod-php php-mysql php-curl php-gd php-json php-zip php-mbstring
sudo service apache2 restart
sudo apt-get install mysql-server
sudo mysql_secure_installation

Ara ja tenim l'Apache funcionant:

cd /var/www/html
sudo nano llista_langtrainer.php

i ja puc executar el meu petit script:

Tancar la sessió

Quan acabem la sessió, recordar tancar la màquina EC2.


creat per Joan Quintana Compte, setembre 2020, gener 2021