Allaksen käyttäminen Pythonin kanssa S3-protokollan yli
Voit käyttää AWS SDK for Python
(boto3
) pääsyyn Allakseen S3-protokollan avulla.
boto3
on Python-kirjasto, joka on kehitetty työskentelemään
Amazon S3 -tallennuksen ja muiden AWS-palveluiden kanssa.
Yleinen data-analyysityönkulku
- Lataa syöttödata Allakseen käyttämällä
boto3
-ohjelmaa tai muuta asiakasta. - Lataa data Allaksesta paikalliselle laitteelle
(esim. henkilökohtainen työasema tai CSC:n supertietokone) käyttämällä
boto3
-ohjelmaa. - Analysoi paikallinen datakopiosi.
- Kirjoita analyysin tulokset paikalliseen tallennustilaan.
- Lataa tulokset Allakseen käyttämällä
boto3
-ohjelmaa.
Jotkin Python-kirjastot tukevat suoraa lukemista ja kirjoittamista S3:n kautta, kuten AWS SDK for pandas ja GDAL-pohjaiset kirjastot (paikkatietoaineistojen käsittelyyn).
Muista välttää samojen objektien käsittelyä sekä S3:lla että SWIFT:llä, sillä ne toimivat eri tavoin suurten objektien kanssa.
Asennus
Asennus henkilökohtaiselle työasemalle
boto3
on saatavilla Python 3.8 ja uudemmille versioille.
Se voidaan
asentaa henkilökohtaiselle laitteelle
käyttäen pip
- tai conda
-ohjelmaa.
Asennus CSC:n supertietokoneelle
geoconda
ja
biopythontools
moduulit sisältävät jo valmiiksi boto3
-ohjelman.
Jos haluat käyttää kirjastoa jossakin muussa Python-ympäristössä, voit käyttää pip
-ohjelmaa
lisätäksesi sen olemassa olevaan moduuliin.
S3-tunnuksien määrittäminen
Tunnukset yksittäisen projektin käyttöön
Helpoin tapa määrittää S3-tunnukset boto3
-ohjelman käyttöä varten on
säätämällä S3-yhteys CSC:n supertietokoneella.
Kun allas-conf --mode s3cmd
suoritetaan, tunnukset tallennetaan
~/.aws/credentials
, joka on oletussijainti, josta boto3
etsii niitä.
Voit myös määritellä toisen sijainnin tunnuksien tiedostolle
muokkaamalla AWS_SHARED_CREDENTIALS_FILE
ympäristömuuttujaa.
Jos haluat käyttää Allasta henkilökohtaiselta työasemalta,
voit yksinkertaisesti kopioida tunnuksien tiedoston laitteellesi
käyttämällä tiedostonsiirtotyökalua kuten scp
.
Jos haluat, että boto3
löytää tunnukset automaattisesti
ilman AWS_SHARED_CREDENTIALS_FILE
-muutoksia,
varmista, että kopioit myös yläkansio kuten alla olevassa esimerkissä.
# Kopioi tunnustiedosto ja sen yläkansio kotihakemistoosi
scp -r <käyttäjänimi>@<isäntänimi>.csc.fi:~/.aws $HOME
Tunnukset useiden projektien käyttöön
allas-conf --mode s3cmd
on suoraviivainen tapa,
mutta se ylikirjoittaa olemassa olevan tunnustiedoston jokaisella ajolla,
joka tekee useiden projektien kanssa työskentelystä hieman vaivalloista.
Siksi suositellaan käyttämään
Pilvitallennuksen määrityssovellusta
Puhdin tai Mahti
verkkokäyttöliittymässä S3-yhteyksien määritykseen, koska nämä määritykset tallennetaan
erillisiin S3-profiileihin.
-
Käytä Pilvitallennuksen määritystä konfiguroidaksesi S3-yhteydet, tai etäyhteydet, projekteille, joiden Allas-tallennukseen haluat päästä. Konfiguraatiot tallennetaan
~/.config/rclone/rclone.conf
tiedostoon siinä supertietokoneessa, jonka verkkokäyttöliittymää käytit niiden luomiseen. -
S3-konfiguraatiot syöttöavaimen tunnukselle ja salaiselle pääsyavaimelle tarvitsevat prefiksiksi
aws_
jottaboto3
tunnistaa ne S3-tunnuksiksi, mutta emme halua tehdä muutoksia suoraan~/.config/rclone/rclone.conf
-tiedostoon, koska sitä käyttävät muutkin ohjelmat. Sen sijaan käytäsed
-komentoa lukemaan konfiguraatiotiedoston sisältö, tekemään tarvittavat muutokset ja kirjoittamaan muokatut sisällöt uuteen tiedostoon, esimerkiksi~/.boto3_credentials
. Tämä voidaan tehdä seuraavalla komennolla.
Näiden vaiheiden jälkeen S3-tunnuksesi boto3
:n käyttöä varten ovat tallennettu
projektiin liittyviin S3-profiileihin tiedostossa, jonka loit vaiheessa 2. Profiilien nimet
ovat muodossa s3allas-<project>
, esimerkiksi s3allas-project_2001234
.
Nyt voit käyttää näitä tunnuksia
luodaksesi boto3
-resurssin.
boto3
käyttö
Luo boto3
-resurssi
S3-tunnukset määritetty vain yhdelle projektille:
# Luo resurssi käyttämällä oletuksena olevaa tunnussijaintia
import boto3
s3_resource = boto3.resource('s3', endpoint_url='https://a3s.fi')
# Luo resurssi käyttämällä profiilin tunnuksia
import boto3
import os
s3_credentials = '<credentials-file>' # esim. '~/.boto3_credentials'
s3_profile = 's3allas-<project>' # esim. 's3allas-project_2001234'
os.environ['AWS_SHARED_CREDENTIALS_FILE'] = s3_credentials
s3_session = boto3.Session(profile_name=s3_profile)
s3_resource = s3_session.resource('s3', endpoint_url='https://a3s.fi')
Jokainen seuraava askel olettaa, että boto3
-resurssi on luotu.
Luo ämpäri
Luo uusi ämpäri seuraavalla skriptillä:
Listaa ämpärit ja tiedostot
Listaa kaikki projektiin kuuluvat ämpärit:
Listaa kaikki ämpäriin kuuluvat objektit:
my_bucket = s3_resource.Bucket('examplebucket')
for my_bucket_object in my_bucket.objects.all():
print(my_bucket_object.key)
Lataa objekti
Lataa objekti:
Lataa objekti
Lataa pieni tiedosto nimeltä my_snake.txt
ämpärille snakebucket
:
Poista ämpärit ja objektit
Poista kaikki objektit ämpäristä:
Poista ämpäri, täytyy olla tyhjä: