PHZ:n Juha Heikkinen: AR 360 -videoiden lataus AWS:stä

Asiakkaalla oli haasteita saada AR 360 -videot pyörimään AWS:stä sovellukseensa. PHZ:n Juha Heikkinen ratkaisi ongelman konfiguroimalla Cross-Origin Resource Sharing (CORS) -headerit kuntoon.

PHZ Full Stackin asiakkaalla oli hankaluuksia saada toistettua AR 360 -videoita sovelluksessa, jonka videot sijaitsivat AWS:n S3 -pilvipalvelussa. Asiakkaan oli saatava ongelmaan ratkaisu nopeasti: toimeksianto tuli puoliltapäivin, ja videoiden tuli olla toistettavissa seuraavan päivän aamuun mennessä.

Todensin ongelman syyn nopeasti: syyksi paljastui puuttuva CORS-header (Cross Origin Resource Sharing). Jotta videoiden toisto toimisi sovelluksessa, on AWS S3:n palautettava access-control-allow-origin -header oikein konfiguroituna. CORS-headerin avulla palvelin kertoo pyytävälle osapuolelle sen, kenen kanssa vastaus voidaan jakaa.

S3-bucketin CORS-headerit konfiguroitiin

Ensimmäiseksi asiakkaalle luotiin oma organisaatiotili AWS:ään. Tämä lisää tietoturvaa, kun kaikki eri asiakkaiden palvelut eivät ole yhden ja saman tunnuksen takana sekä mahdollistaa sen, että asiakkaan laskulle saadaan eriteltyä käytön mukaiset kustannukset.

Asiakas halusi videot Amazon S3-palveluun. Asiakkaalle tehtiin uusi S3-bucket, jonne AR 360 -videot ladattiin. Ensimmäiseksi halusin testata CORS-asetusten toimivuuden. Tätä varten videot asetettiin hetkellisesti julkisesti saataville.

S3-bucketin Permissions-välilehdelle konfiguroitiin CORS-headerit asiakkaan pyytämän access-control-allow-origin: "*" -mallin mukaisesti.

Videoiden lataamisen ja CORS-asetusten konfiguroinnin jälkeen testattiin, että niitä pystyy lataamaan curl-komennolla. Samalla varmistettiin CORS-headerien palautuminen. Tämän jälkeen päästiin jatkamaan seuraavaan vaiheeseen, jossa konfiguroidaan videoiden jakelukanavaksi CDN (Content Delivery Network) eikä paljasteta suoria S3-osoitteita.

Luotiin uusi CloudFront CDN-jakelu

Videot tuli saada ladattua Amazonin CloudFrontin (CDN-palvelu) läpi ja vielä mahdollisimman pienellä viiveellä. CDN-verkoilla tiedostot siirtyvät CDN-verkossa lähelle asiakasta, jolloin tiedostojen lataaminen on nopeampaa.

Yleensä CDN-verkot tuovat myös säästöjä. CDN-palveluja käytetään yleisesti jakamaan staattista sisältöä, kuten videoita, koska se vähentää palveluun kohdistuvaa kuormaa.

Asiakkaalle luotiin uusi CloudFront CDN-jakelu, ja jakaminen konfiguroitiin tapahtumaan ainoastaan Pohjois-Amerikasta ja Euroopasta.

Yhteysasetuksissa käytettiin oletusarvoja yhteyden muodostamisen yrityksille sekä yhteyden aikakatkaisulle. CDN-jakelun Origin Domain määriteltiin käyttämään aiemmin luotua S3-bucketia, jolloin CDN-verkon yli jaetaan S3-bucketissa olevia videoita.

Videoiden lataaminen CloudFrontin läpi testattiin

Kun CloudFront oli pystyssä, tarkistettiin, että videoiden lataaminen onnistui curl-komennolla CloudFrontin läpi. Samalla katsottiin, että CORS-headereissa näkyi haluttu access-control-allow-origin: "*".

Alkuperäinen S3-bucket suojattiin

Koska ensimmäisten CORS-headerien testausten takia S3-bucket oli määritelty julkiseksi, oli nyt viimeisteltävä asiat ja rajattava S3-bucketin näkyvyys. Tämä tapahtuu asettamalla käyttöön Origin Access Identity -konfiguraatio (OAI), jolloin pääsy bucketin puolelle on mahdollista vain CloudFrontin CDN-jakelusta.

Lisäksi otettiin käyttöön Origin Shield cache, jonka alueeksi määriteltiin Euroopassa toimiva palvelin.

Lopputuloksena tyytyväinen asiakas

CORS-headerien konfigurointi S3:n puolella sekä niiden välittäminen CloudFrontin läpi oli lopulta ratkaisu asiakkaan alkuperäiseen ongelmaan.

Korjausten jälkeen sovellus sai toistettua videot AWS:n pilvipalvelusta, ja asiakas oli tyytyväinen, kun ongelma saatiin ratkaistua tiukassa aikataulussa.


PHZ:n Juha Heikkinen: ”Erityisvahvuuksiani ovat Python, testiautomaatio ja AWS”

Olen koulutukseltani sähkö- ja tietoliikennetekniikan insinööri Metropolia-ammattikorkeakoulusta. Jatko-opintoina olen suorittanut insinöörin ylemmän ammattikorkeakoulututkinnon.

Aloitin PHZ Full Stackin konsulttina vuonna 2019. Sitä ennen olin tietoliikennepuolen hommissa automaatiotestaajana, testaajana sekä vähän aikaa järjestelmäarkkitehtina.

Olen kehittäjänä tarkka, tunnollinen ja ahkera. Erityisvahvuuksiani ovat Python, testiautomaatio, Amazon Web Services (AWS), Docker sekä reititysprotokollat.