Hoppa till innehåll

Migraatio-opas · AWS S3:sta

Siirry AWS S3:sta SIAX-objektitallennukseen

S3-rajapinnasta on tullut alan standardi, ja se on hyvä uutinen kaikille jotka haluavat siirtyä pois sieltä. Objektitallennuksemme puhuu samaa protokollaa signatuuri v4:llä, mikä tarkoittaa että SDK:nne, työkalunne ja kirjastonne toimivat muuttumattomana — vaihdatte endpointin ja avaimet, ette koodia.

Syy siirtyä on useimmiten liikenne. Tallennus on halpaa kaikkialla; AWS:llä lähtevä data maksaa, ja kaikelle mikä tarjoilee tiedostoja loppukäyttäjille egress-erä kasvaa nopeasti suuremmaksi kuin tallennuserä. Objektitallennuksemme maksaa 25 kr per 100 Gt kuukaudessa, kaikki data EU:ssa.

Itse kopiointi on ratkaistu ongelma — rclone tekee työn eikä siinä ole mitään keksittävää. Työ on muualla: IAM-rooleille ei ole vastinetta ja ne pitää korvata avainpareilla ja bucket-politiikoilla, ja jokainen kohta koodissa joka luo presigned-URL:eja pitää kirjoittaa uudelleen koska signatuuri on sidottu endpointtiin ja alueeseen. Jos suunnittelette tämän etukäteen, migraatiosta tulee vähäeleinen. Jos ette, se huomataan cutover-päivänä.

Ajankäyttö

Iltapäivä bucketille jossa on muutama sata gigatavua tavanomaisella objektimäärällä. Kopiointi on harvoin ongelma — pääsyn ja presigned-virtausten uudelleenkirjoitus vie aikaa, tyypillisesti yhdestä kolmeen kehityspäivää riippuen siitä kuinka monessa kohdassa koodi puhuu S3:n kanssa. Arkistoidut objektit Glacierissa lisäävät vuorokausia odotusaikaan.

Käyttökatko

Ei mitään jos ajatte kaksoiskirjoitusta päällekkäisyyden ajan: kirjoittakaa molempiin kohteisiin, lukekaa S3:sta, ja vaihtakaa lukeminen kun delta-synkkaus on kiinni kärryissä. Ilman kaksoiskirjoitusta tarvitsette kirjoitusikkunan kirjoitussuojattuna viimeisen synkkauksen ajaksi — muutamasta minuutista tuntiin riippuen siitä kuinka paljon on muuttunut bulkkikopion jälkeen. CDN-vaihdolla on oma häntänsä TTL:n ohjaamana.

01

Näin teet sen

  1. 1

    Kartoita bucketit objektimäärän mukaan, ei pelkän volyymin

    Lukekaa koko, objektimäärä, tallennusluokka ja versiointi bucketeittain komennolla aws s3 ls --summarize tai Storage Lensillä. Objektien määrä ohjaa ajankäyttöä enemmän kuin teratavut: kymmenen miljoonaa pientä tiedostoa vie kauemmin kuin viisi teratavua suurina lohkoina. Kirjatkaa myös mikä kirjoittaa jokaiseen bucketiin — se lista määrää miltä cutoverin pitää näyttää.

  2. 2

    Luokaa bucketit ja avaimet meillä ja pystyttäkää rclone

    Luokaa vastaavat bucketit ja avainpari per sovellus, ei yhtä yhteistä kaikelle. Konfiguroikaa rclone-remote tyyppiä s3 endpointtiimme vasten ja asettakaa alue ja osoitustyyli ohjeidemme mukaan. Testatkaa kourallisella tiedostoja ja varmentakaa että content-type ja muu metadata tulee mukana ennen kuin päästätte koko kopion irti.

  3. 3

    Ajakaa bulkkikopio

    rclone copy s3:bucket siax:bucket --transfers 32 --checkers 64 --fast-list on kohtuullinen lähtökohta; nostakaa rinnakkaisuutta kunnes läpäisy tasaantuu. Ajakaa mielellään instanssista samalla AWS-alueella kuin bucket lyhentääksenne aikaa — egress-kustannuksen AWS:stä ulos maksatte joka tapauksessa. Objektit Glacierissa tai Deep Archivessa pitää palauttaa ensin, ja se vie tunneista vuorokausiin.

  4. 4

    Varmenna ennen kuin luotatte kopioon

    rclone check --one-way vertaa kokoa ja tarkistussummaa objekti kerrallaan. Vertailkaa myös kokonaisobjektimäärä lähteen ja kohteen välillä, ja tehkää pistokokeita content-typelle, cache-controlille ja muille headereille joita sovellus oikeasti lukee. Kopio joka näyttää oikealta tavuina mutta on menettänyt metadataa, tuottaa virheitä jotka ilmenevät vasta selaimessa.

  5. 5

    Kirjoita pääsy uudelleen — tämä on se oikea työ

    IAM:ia ei ole meillä: roolit, instanssiprofiilit, AssumeRole ja ehtopohjaiset politiikat korvataan avainpareilla ja bucket-politiikoilla. Käykää läpi jokainen kohta joka luo presigned-URL:eja ja ohjatkaa endpoint, alue ja signatuurikonfiguraatio uudelleen, koska signatuuri on sidottu kaikkiin kolmeen. Päivittäkää CORS-säännöt ja testatkaa lataus selaimesta, ei vain palvelimelta.

  6. 6

    Vaihda kaksoiskirjoituksella ja pidä paluutie

    Antakaa sovelluksen kirjoittaa molempiin kohteisiin päällekkäisyyden ajan ja jatkakaa lukemista S3:sta kunnes delta-synkkaus on kiinni kärryissä. Vaihtakaa sitten lukeminen, ajakaa viimeinen rclone sync ja ohjatkaa CDN tai CloudFront-jakelu uudelleen. Pystyttäkää riippumaton varmuuskopio bucketista (19 kr/100 Gt) — replikointi kahden järjestelmän välillä ei ole sama asia kuin varmuuskopiointi — ja pitäkää S3-bucket kirjoitussuojattuna vähintään 30 päivää ennen kuin asetatte lifecycle-säännön joka poistaa.

02

Mikä on todella hankalaa

  • IAM ei tule mukana, ja se on enemmän työtä kuin miltä kuulostaa. Roolit EC2- ja ECS-instansseilla, AssumeRole tilien välillä, tag-pohjaiset ehdot ja OIDC-federointi CI:stä korvataan staattisilla avainpareilla. Sovellusten jotka eivät ole koskaan joutuneet käsittelemään salaisuutta, pitää alkaa tehdä niin, mikä vaikuttaa deploy-virtaan eikä vain koodiin.
  • Presigned-URL:t pitää generoida uudelleen kaikkialla. Signatuuri on sidottu endpointtiin, alueeseen ja avaimeen, joten backendin, eräajotöiden ja mahdollisten mobiiliasiakkaiden pitää kaikkien ohjautua uudelleen ja tulla testatuksi. Linkit jotka on jo lähetetty pitkällä voimassaoloajalla, lakkaavat toimimasta vaihdossa — varautukaa siihen jos lähetätte latauslinkkejä sähköpostilla.
  • Objekteja Glacierissa ja Deep Archivessa ei voi kopioida suoraan. Ne pitää palauttaa ensin, mikä maksaa ja vie muutamasta tunnista useisiin vuorokausiin riippuen palautustasosta. Arkistoraskaille tileille tämä vaihe usein määrää koko aikataulun.
  • AWS:stä lähteminen maksaa egressiä: noin 0,09 USD per Gt ilmaisen noin 100 Gt:n kuukausipotin ylitse, eli suuruusluokkaa 450 USD 5 Tt:lle kertakustannuksena. AWS on tarjonnut vuodesta 2024 maksuttoman uloskirjautumisen asiakkaille jotka jättävät alustan kokonaan, mutta se vaatii hakemuksen tuen kautta eikä koske osittaisia siirtoja. Tarkistakaa ehdot ennen budjetointia.
  • Vakiotyökalut kopioivat jokaisen objektin nykyisen version — eivät versiohistoriaa, eivät objekti-ACL:eja, eivät lifecycle-sääntöjä eivätkä replikointia. S3 event notificationsille jotka liipaisevat Lambdaa ei ole suoraa vastinetta, ja ne pitää rakentaa uudelleen sovelluspuolella. Jos teillä on Object Lock compliance-tilassa sääntelysyistä: sopikaa se meidän kanssamme ennen siirron suunnittelua, ei jälkeen.
03

Kustannusesimerkki

500 Gt tallennettuna ja 200 Gt lähtevää liikennettä kuukaudessa S3 Standardilla: noin 0,023 USD/Gt tallennukselle ja noin 0,09 USD/Gt liikenteelle ilmaisen potin ylitse, plus pyyntökustannukset — karkeasti 300–350 kr/kk. AWS:n hinnat vaihtelevat alueittain ja muuttuvat jatkuvasti, joten laskekaa oman laskunne mukaan. Sama 500 Gt meillä maksaa 125 kr/kk (25 kr per 100 Gt). Siihen päälle tulee kertakustannus datan lukemisesta ulos S3:sta, noin 45 USD 500 Gt:lle jos ette saa uloskirjautumista maksutta. Tällä profiililla siirto maksaa itsensä takaisin parissa kuukaudessa. Jos teillä on paljon tallennusta ja lähes ei liikennettä, se vie kauemmin ja hyöty on pienempi — kannattaa laskea ennen päätöstä.

04

Usein kysytyt kysymykset

Täytyykö meidän vaihtaa SDK tai kirjoittaa koodi uudelleen?
Ei. Rajapinta on S3-yhteensopiva signatuuri v4:llä, joten sama SDK toimii — vaihdatte endpointin, alueen ja mahdollisesti osoitustyylin. Testatkaa multipart-lataukset ja CORS erikseen, siellä erot yleensä näkyvät.
Tuleeko versiohistoria mukana?
Ei. rclone ja aws s3 sync kopioivat jokaisen objektin nykyisen version. Jos tarvitsette historian säilytettynä, se on oma projektinsa: joko kopioikaa jokainen versio eksplisiittisesti erillisinä objekteina, tai säilyttäkää S3-bucket kirjoitussuojattuna arkistona.
Mitä maksaa datan siirtäminen ulos AWS:stä?
Noin 0,09 USD per Gt ilmaisen potin ylitse, eli suuruusluokkaa 90 USD per teratavu. AWS on tarjonnut vuodesta 2024 maksuttoman uloskirjautumisen asiakkaille jotka jättävät alustan kokonaan, EU:n datasäädöksen mukaisesti, mutta se vaatii hakemuksen tuen kautta ja hyväksynnän. Budjetoikaa kustannus ja pitäkää maksutonta tietä bonuksena jos se myönnetään.
Voimmeko jättää joitakin bucketteja S3:een?
Kyllä. Moni aloittaa liikenneraskaista buckettien joissa egress-kustannus tekee eniten eroa, ja antaa arkistodatan olla Glacierissa kunnes se pitää joka tapauksessa poistaa. Hybridi on usein oikea vastaus ensimmäisenä vuonna.
Mitä teemme S3 event notificationsille ja Lambda-triggereille?
Ne pitää rakentaa uudelleen. Yleinen malli on että sovellus joka kirjoittaa objektin, laittaa myös työn jonoon, sen sijaan että luotettaisiin tallennuksen generoivan tapahtuman. Siitä tulee eksplisiittisempää ja helpompaa vianetsiä, mutta se on uudelleenkirjoitusta ja pitää olla aikataulussa.
Onko teillä ISO 27001 tai SOC 2?
Ei, meillä ei ole ISO 27001:tä, SOC 2:ta eikä PCI-DSS:ää. Voimme näyttää GDPR-vaatimustenmukaisuuden, henkilötietojen käsittelysopimukset ja sen että kaikki data tallennetaan EU:ssa, ja ajamme avointa lähdekoodia aivan pohjalle asti niin että voitte tarkastaa toteutuksen. Jos teillä on kova sertifiointivaatimus kilpailutuksessa, AWS on parempi vastaus kuin me juuri siinä kohdassa, ja on rehellisempää sanoa se suoraan.