Hyppää sisältöön

Significant changes to Puhti & Mahti authentication coming in April! Read about the SSH key and multi-factor authentication requirements.

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

  1. Lataa syöttödata Allakseen käyttämällä boto3-ohjelmaa tai muuta asiakasta.
  2. Lataa data Allaksesta paikalliselle laitteelle (esim. henkilökohtainen työasema tai CSC:n supertietokone) käyttämällä boto3-ohjelmaa.
  3. Analysoi paikallinen datakopiosi.
  4. Kirjoita analyysin tulokset paikalliseen tallennustilaan.
  5. 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.

# pip
pip install boto3

# conda
conda install anaconda::boto3

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.

  1. 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.

  2. S3-konfiguraatiot syöttöavaimen tunnukselle ja salaiselle pääsyavaimelle tarvitsevat prefiksiksi aws_ jotta boto3 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.

    sed -E 's/^(access|secret)/aws_\1/g' ~/.config/rclone/rclone.conf > ~/.boto3_credentials
    

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')
S3-tunnukset määritetty useille projekteille:
# 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ä:

s3_resource.create_bucket(Bucket="examplebucket")

Listaa ämpärit ja tiedostot

Listaa kaikki projektiin kuuluvat ämpärit:

for bucket in s3_resource.buckets.all():
    print(bucket.name)

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:

s3_resource.Object('examplebucket', 'object_name_in_allas.txt').download_file('local_file.txt')

Lataa objekti

Lataa pieni tiedosto nimeltä my_snake.txt ämpärille snakebucket:

s3_resource.Object('examplebucket', 'object_name_in_allas.txt').upload_file('local_file.txt')

Poista ämpärit ja objektit

Poista kaikki objektit ämpäristä:

my_bucket = s3_client.Bucket('examplebucket')
my_bucket.objects.all().delete()

Poista ämpäri, täytyy olla tyhjä:

s3_resource.Bucket('examplebucket').delete()