Salta el contingut

Pràctiques

IMPORTANT

Aquestes pràctiques no són obligatòries, però sí recomanables per a poder realitzar els entregables (Aules).

Per començar a fer aquestes pràctiques, es imprescindible haver completat les de la unitat 3.


Pràctica 0 - Preparació de l'entorn

🎯 Objectiu: Crear un entorn bàsic per a les pràctiques d'aquesta unitat.

  • Crea una VPC amb CIDR 10.0.0.0/16 i una subxarxa pública.
  • Afegix un Internet Gateway i una taula de rutes amb sortida a Internet.
  • Llança una instància EC2 (Amazon Linux) amb accés SSH.
  • Crea un Security Group que permeta:
    • SSH des de la teua IP.
    • HTTP (port 80) per a proves amb exida a qualsevol destí (0.0.0.0/0).

Pràctica 1 - El primer bucket

En aquesta pràctica crearem el nostre primer bucket. Per fer-ho, accedirem a la secció S3 del nostre panell de control i crearem un bucket amb les opcions per defecte:

  • Dona-li un nom únic (per exemple: bucket-alumne-nomcognom).
  • Deixa la regió per defecte.
  • Assegura’t que l’accés públic està bloquejat.

p1_1

  • Puja un arxiu senzill (fitxer.txt o index.html) i observa què mostra la consola després de la pujada.
    • Per fer-ho, accedeix al bucket i ahi voràs l'opció.
  • Si accedim al fitxer que acabem de pujar, podrem vora tota la informació sobre aquest.

Fixa’t en:

  • La secció Storage class on ens indica el tipus d'emmagatzematge que gasta el fitxer. p1_3

  • Les metadades automàtiques que AWS ha afegit.

  • La URL de l’objecte.

Intenta accedir a la URL: què passa?

  • Efectivament, Amazon bloqueja per defecte l'accés públic. Seria perillós deixar-ho obert per defecte.

p1_2

  • Per fer-ho, cal desactivar el bloqueig per a l'accés públic i afegir la següent policy que permitirà l'accés a tots els objectes del bucket.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::NOM-BUCKET/*"
    }
  ]
}

Pràctica 2 - Lifecycle del bucket

Continuan amb la pràctica anterior, anem a modificar el plan d'emmagatzenament a un més car. Després, configurarem el cicle de vida per a que quan pasen 30 dies canvie el plan a un més barat.

  • Comencem canviant el pla a Stantard-IA desde la secció de Storage class p2_1

  • Desde la finestra del bucket (no del fitxer), accedim a la pestanya Management i crearem una regla de cicle de vida Create Lifecycle Rule

    • Es poden configurar moltes característiques i filtres per a qui aplica la regla (o aplicar-la a tot el bucket)
    • Nosaltres seleccionarem a quin plan volem canviar i a quants dies volem fer-ho. p2_2

Pràctica 3 - S3 amb una web estàtica

Un dels usos que se li pot donar a S3 es el d'allotjar una web estàtica. Per fer-ho, pujarem al bucket creat el contingut de la carpeta static del repositori que hem gastat en unitats anteriors:

https://github.com/JuanraCollado/octopus-underwater-app

Ara sols falta indicar-li a AWS que és una web. Per fer-ho, anirem a la secció Static website hosting i editarem indicant quin és el fitxer index.

p3_1

I accedir a la web utilitzant la URL que ens proporcionen: p3_2

Recorda

Recorda que per poder accedir a fitxers del bucket, aquest ha de ser públic (per defecto no ho és).

Per fer el bucket públic, ho desactivem des de permissions com ho hem fet a la P1 i a la secció Bucket Policy, obrirem l'editor i pegarem aquesta política sustituint el nom del bucket. Aquest fragment de codi permetrà que l'accés als elements del bucket siga possible (gràcies al GetObject)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucket-juanra-collado/*"
    }
  ]
}

I ja tindrem la nostra web estàtica desplegada directament a un S3 sense necessitat de cap EC2 (i per tant més barat).

Si volguerem permetre que ademés de poder llegir del bucket es poguera escriure, caldria afegir altra action. Existeixen moltes actions:

...
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
    ]
...


Pràctica 4 - Enllaçar recurs S3 des de una pàgina web

Altra forma de gastar S3 és per emmagatzemar recursos estàtics als quals podem fer referència des de la nostra web.

  • Imatges
  • Videos
  • Audios
  • Fitxers
  • I molt més.

Per fer-ho, tan sols caldria utilitzar la URL de S3 a l'hora d'enllaçar el recurs:

<img src="http://web-nomcognom-u4.s3-website-us-east-1.amazonaws.com/logo.png" alt="Logo des de S3">

Accés des d'EC2 a S3 — Públic o privat?

Encara que S3 i EC2 siguen serveis d’AWS, no comparteixen la mateixa xarxa privada.
El servei S3 no viu dins de la teua VPC, sinó que és global i extern.

Açò implica que, si el bucket és privat, una instància EC2 no podrà llegir-ne els fitxers llevat que:

  • Tinga un rol IAM associat amb permisos per accedir-hi (s3:GetObject), o
  • S'haja creat un VPC Endpoint per a S3 (no disponible a AWS Academy).

Com que al laboratori de AWS Academy no és possible cap d'aquestes dues opcions, els fitxers que vulguem mostrar des de la nostra web EC2 han de ser públics (per política o ACL).

En entorns reals, aquesta configuració es faria d'una manera més segura mitjançant IAM Roles, evitant que els objectes siguen públics i mantenint l'accés restringit a les instàncies autoritzades.


Pràctica 5 - Integració de S3 amb Lambda

En la práctica 5 de la unitat 4 varem crear una funció Lambda que s'executava cada vegada que ocurria un event determinat. L'objectiu d'aquesta pràctica és configurar el bucket per a que quan ocurrisca un event de tipus creació d'objecte, execute una lambda determinada.

Per fer-ho: 1. Crearem una funció Lambda que escriga en consola y al cos de la web (com a la pràctica 5 de la unitat anterior), el missatge S'acaba de pujar un fixer al bucket. 2. Una vegada creada i funcionant, anirem a S3 → Properties → Event notifications → Create event notification. 3. Marcarem com a esdeveniment All object create events i triarem com a destinació la funció Lambda que acabem de crear. 4. Prova a pujar un fitxer i comprova que la funció Lamba està sent executada revisant logs com ho feiem a la unitat anterior.


Pràctica 6 - Gestió de volums EBS

En aquesta pràctica veurem com crear, associar i muntar un volum EBS a una instància EC2 i com podem començar a fer ús d'ell. A continuació, veurem com podem crear una còpia d'aquest i emmagatzemar-la en S3 per després poder tornar a gastar-la i per últim com eliminar aquest volum.

Creació d'un nou volum

  • A la consola d'AWS, EC2->Elastic Block Store -> Volumes
  • Create Volume
  • Posem els valors que dessitgem p6_1
  • I premem el botó per crear-lo

Associar volum a una instància EC2

  • Seleccionem el volum creat previament i premem Actions->Attach Volume
  • Triem la instància EC2
  • Seleccionem quin "nom" volem gastar per al nostre volum i premem Attach. Compte perquè alguns dels noms ja estan sent usats pel propi SO i ens mostrarà un missatge d'error. Assegureu-vos de triar un que no done error.
  • Premem en Attach

Recorda

Un volum EBS només es pot muntar en una instància dins de la mateixa AZ.

p6_2

És important que ens fixem en el missatge que ens apareix en la part inferior que diu:

Newer Linux kernels may rename your devices to /dev/xvdf through /dev/xvdp internally, even when the device name entered here (and shown in the details) is /dev/sdf through /dev/sdp.

Bàsicament el que ens està informant és que quan arranquem el EC2, si aquest esta en una de les noves versiones de Linux, no el vorem amb el nom que hem seleccionat ja que internament els nous Kernels el renombren. Per tant, cal tenir en compte en lloc de veure /dev/sdX veurem /dev/nvmeXn1 o /dev/xvdX

Muntar el volum dins de la instància EC2

  • Connectat per SSH a la instància
  • Llista els discs disponible i veuras que tens el principal del SO i el que acabes de crear, identificat en aquest cas com a nvme1n1.
    lsblk
    

p6_3

  • Crea una partició i dona-li format
    sudo mkfs -t ext4 /dev/nvme1n1
    

Altres opcions

  • Pots fer servir xfs si vols un sistema de fitxers més robust per a dades grans o BD.
  • No cal fer aquest pas si el volum és una còpia d’un altre (snapshot).
  • Creem un punt de muntatge i muntem el volum

    sudo mkdir /data
    sudo mount /dev/nvme1n1 /data
    

  • Comprovem que tot està OK

    df -h
    

p6_4

Ara ja es pot utilitzar el volum (muntat en la carpeta /data) com espai extra per a la nostra EC2.

Snapshots i restauracions

Els snapshots són còpies de seguretat del teu volum EBS, emmagatzemades a S3. Permeten restaurar o clonar volums fàcilment.

  • Ves a EC2 → Elastic Block Store → Volumes

  • Selecciona el teu volum i tria Actions → Create snapshot

  • Escriu una descripció i fes clic a Create snapshot

  • Ves a Snapshots per veure l’estat. Quan estiga “completed”, ja pots utilitzar-lo per crear un nou volum.

Com funciona realment

Els snapshots són incrementals: només es guarden els blocs que han canviat des de l’últim snapshot.

Eliminar i desassociar volums

Per gestionar costos, és important eliminar recursos no utilitzats:

  • Desmunta el volum dins de la instància:

    sudo umount /data
    

  • Desassocia’l des de la consola Actions → Detach volume

  • Si ja no el necessites, selecciona’l i fes Delete volume


Pràctica 7 - Persistència en EBS

  • Crea un volum nou i munta'l a una carpeta /practica7
  • Crea un document dins de la carpeta amb el teu nom
  • Crea un snapshot
  • Desmunta i elimina el volum
  • Restaura'l el volum des del snapshot (és com la creació però seleccionant el snapshot al desplegable) i comprova si el fitxer està.

Pràctica 8 - Creació i configuració d’una instància RDS

Ara que ja sabem què és RDS i com funciona a nivell conceptual, aprendrem a crear una base de dades MySQL gestionada i a configurar la seua seguretat bàsica.

Amazon RDS permet crear bases de dades de diversos motors (MySQL, PostgreSQL, MariaDB, Oracle, SQL Server o Aurora), però per a aquesta pràctica farem servir MySQL, ja que és el més comú en entorns DAW/DAM/ASIX/SMX.

Creació de la instància RDS

  • A la consola d’AWS, entra a Aurora y RDS → Databases → Create database.
  • Tria Standard create per vore totes les opcions.
  • A Engine options, selecciona:
    • Engine type: MySQL
    • Version: la que necessitem. Normalment AWS selecciona la més compatible per defecte.
  • A Templates, selecciona Sandbox (això usarà una microinstància gratuïta dins del laboratori).

p8_1

  • Continuarem emplenant els camps:

    • DB instance identifier: nom que li posem
    • Master username: nom d'usuari per a la bd (jo gastaré admin)
    • Master password: introduïm una segura i la recordem (o l'anotem)
  • Continuarem a la secció de Connectivity on:

    • Ens assegurem que la instància RDS s'associa a la VPC que dessitgem.
      • Ens permet directament seleccionar la EC2 a la que volem lligar-la però també podem fer-ho després.
    • Public access: No (la base de dades no ha d'estar exposta al públic general)
    • VPC security group: Creem un SG nou o seleccionem un existent que ens permeta:
      • Trànsit entrant al 3306 (port de MySQL) des del nostre EC2 i/o bastió.
    • La resta de paràmetres es queden per defecte però li donem una ullada per vore tot el que ens permet configurar d'inici (nom de la base de dades, cada quan volem còpia de seguretat, etc)

p8_2

Recorda

Perquè funcione la connexió, és imprescindible que:

  • La instància EC2 i la RDS estiguen dins de la mateixa VPC.

  • El SG de la RDS permeta entrades des del SG de l’EC2 pel port 3306.

  • Finalment li donem a Create database i es crearà la instància de la BD. Aquest procés sol tardar una miqueta.

Comprovar la instància RDS creada

Una vegada finalitzat el procés de creació, revisem que els detalls de la base de dades són correctes i que els permisos estan correctament setejats.

D'aquestes dades que ens dona, ens interesa el Endpoint que el gastarem per a poder connectar-nos a la base de dades des del nostre EC2.

p8_3


Pràctica 9 - Connexió a la base de dades RDS per consola i per codi

Connexió des de consola

Una vegada tenim la BD RDS creada, és equivalent a si haverem creat una EC2 i haverem instal·lat la base de dades dins. Per tant, per poder connectar-nos a ella, el procés és practicament el mateix:

  • Ens connectem per SSH a la instància EC2.
  • Instal·lem el client de MySQL:
    sudo apt update 
    sudo apt install mysql-client -y
    
  • Ens connectem a la RDS :
    mysql -h <endpoint> -P 3306 -u admin -p
    

p8_4

  • Una vegada connectats, ja podem executar instruccions MySQL per fer proves:
    CREATE DATABASE proves;
    SHOW DATABASES;
    

Error freqüent

Si rebs Access denied o Can't connect to MySQL server, revisa:

  • Que l’endpoint és correcte.
  • Que EC2 i RDS estan a la mateixa VPC.
  • Que el Security Group de la RDS permet connexions des del SG de la teua EC2 pel port 3306.

Connexió des de codi (PHP, per exemple)

Una vegada sabem que tot funciona correctament, connectar-nos des de codi no és diferent a com ho hem fet fins ara. La única diferència serà que com a nom de servidor gastarem el nom de l'Endpoint. La resta de paràmetres i de configuracions es fan de la mateixa forma que en les unitats anteriors.

<?php
$servername = "rds-juanra.cj8d9u123abc.us-east-1.rds.amazonaws.com";
$username = "admin";
$password = "la_teua_contrasenya";
$dbname = "proves";

// Connexió a la base de dades
$conn = new mysqli($servername, $username, $password, $dbname);

//Continuaria amb el codi

Pràctica 10 - Integració EC2 + RDS

Com a administrador cloud, vols comprovar que la teua aplicació web pot accedir a una base de dades gestionada sense exposar-la públicament.

Per això:

  1. Partirem d'una instància EC2 que ja hem fet abans amb Nginx + PHP funcionant.
  2. Crea una instància RDS MySQL a la mateixa VPC (plantilla Sandbox).
  3. Connectat a ella per consola i crea una base de dades amb una taula i alguna dada.
  4. Configura els Security Groups perquè:
    • La EC2 puga accedir al port 3306 de la RDS.
    • La RDS no accepte cap connexió pública.
  5. Prova la connexió. Per fer-ho, crea una pàgina testdb.php que el que faja siga connectar-se a la base de dades i mostrar les dades (ho hem fet en unitats anteriors)

Pràctica 11 - Creació d'una taula, inserció de dades i consulta amb DynamoDB

Creació de la taula

  • Per a crear una taula accedirem a DynamoDB->Create Table
  • Li donem un nom a la taula curt i identificatiu: p.e.
  • Indiquem com es dirà el camp que serà Partition key.
  • Indiquem el camp que utilitzarem com a Sort Key (si en tenim).
  • En Table settings podem seleccionar Customize settings per assegurar-nos que el mode és On-Demand entre d'altres paràmetres. Per defecte ja ho està per tant podem deixar Default settings sense cap problema.
  • Fem click a Create table i en pocs segons apareixerà a la llista de taules.

p11_1

Inserció de dades

Per a insertar dades de forma manual en la taula que acabem de crear, seguirem els següents pasos:

  • Fem click sobre la taula que acabem de crear i accedim als detalls d'aquesta.
  • Fem click en Actions->Create Item

p11_2

  • Introduim els valors que volem insertar. Per fer-ho més ràpid, aconselle fer-ho en format JSON.
  • Dins del format JSON podem utilitzar DynamoDB JSON que permet setejar els tipus de dades o bé insertar-les en el format JSON que coneguem.
  • Per exemple, anem a insertar una usuaria:
{
  "user_id": "u001",
  "nom": "Anna Coll",
  "ciutat": "València",
  "rol": "desenvolupadora",
  "any_experiencia": 2
}

p11_3

  • Li donem a Create item per guardar-lo.

  • Repetim l'operació en tants usuaris com necessitem. De moment sols accepta un item per creació. Es pot importar un JSON des de S3 per a grans quantitats de dades però està deshabilitat a AWS Academy.

{
  "user_id": "u002",
  "nom": "Marc Torres",
  "ciutat": "Gandia",
  "rol": "analista",
  "any_experiencia": 4
}
{
  "user_id": "u003",
  "nom": "Laura Pérez",
  "ciutat": "València",
  "rol": "devops",
  "any_experiencia": 1
}

p11_4

Consulta i filtratge d'elements

Per a consultar dades dins d'una taula:

  • Des de la vista de la taula, fes click en Explore table items
  • Ahi vorem la secció Scan or query items on podrem gastar els filtres que necessitem
  • Al camp user_id escriu un valor existent i fes click en Run
  • Pots també utilitzar altres camps no clau per a buscar, però tardarà una miqueta més perquè sempre la búsqueda per clau serà més ràpida.

p11_5

  • També podem utilitzar per a fer consultes PartiQL, un llenguatge SQL-like integrat dins de DynamoDB que ens permet escriure consultes més clares.

  • Per fer-ho, accedirem a la secció PartiQL i podrem executar consultes com les que coneguem de 1er.

SELECT * FROM "usuaris-dynamo-jr" WHERE ciutat='València';

p11_6

  • Podem fer altres proves:
SELECT nom, rol FROM "usuaris-dynamo-jr";
SELECT * FROM "usuaris-dynamo-jr" WHERE any_experiencia > 2;
  • El order by sols funciona sí hem posat la sort-key en el camp pel qual volem ordenar
    SELECT * FROM "projectes-daw" WHERE id_projecte='p001' ORDER BY nom;
    

Nota

PartiQL no suporta totes les operacions SQL (com JOIN o GROUP BY). És ideal per a consultes senzilles o filtratges puntuals.


Pràctica 12 - Activitat DynamoDB

  • Crea una taula anomenada projectes-dam amb els camps:
  • Partition key → id_projecte (String) Sort key → nom (String)
  • Afegeix almenys tres ítems amb informació fictícia sobre projectes web o mòbils.
  • Prova de fer una consulta per id_projecte i després un filtre per nom.