Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Allaksen käyttö Pythonilla S3-protokollan kautta

Voit käyttää AWS SDK for Pythonia (boto3) Allaksen käyttämiseen S3-protokollan kautta. boto3 on Python-kirjasto, joka on kehitetty Amazon S3 -tallennuksen ja muiden AWS-palveluiden käyttöön.

Yleinen datan analysoinnin työnkulku

  1. Lataa syötedata palveluun Allakseen käyttäen boto3:a tai toista asiakasohjelmaa.
  2. Lataa data Allaksesta paikalliselle laitteelle (esim. omalle työasemalle tai CSC:n supertietokoneelle) käyttäen boto3:a.
  3. Analysoi datan paikallinen kopio.
  4. Kirjoita analyysin tulokset paikalliseen tallennustilaasi.
  5. Lataa tulokset palveluun Allakseen käyttäen boto3:a.

Jotkin Python-kirjastot tukevat suoraa lukemista ja kirjoittamista S3:n kautta, kuten AWS SDK for pandas ja GDAL-pohjaiset kirjastot (paikkatietodatan käsittelyyn).

Muista välttää samojen objektien käsittelyä sekä S3:lla että SWIFTillä, sillä ne toimivat eri tavoin suurten objektien kanssa.

Asennus

Asennus omalle työasemalle

boto3 on saatavilla Python-versioille 3.8 ja uudemmille. Sen voi asentaa omalle laitteelle käyttäen pip:iä tai conda:a.

# pip
pip install boto3

# conda
conda install anaconda::boto3

Asennus CSC:n supertietokoneelle

Valmiiksi asennetuissa geoconda- ja biopythontools-moduuleissa boto3 on jo asennettuna. Jos haluat käyttää kirjastoa toisessa Python-ympäristössä, voit käyttää pip:iä lisätäksesi sen olemassa olevan moduulin päälle.

Tunnistetiedot yhden CSC-projektin käyttämiseen

module load allas
allas-conf -m S3

boto3 käyttää sisäisesti aws-kirjastoa, joten jos haluat kopioida tunnistetietosi supertietokoneen ulkopuolelle, noudata aws:n ohjeita.

Tunnistetiedot useiden CSC-projektien käyttämiseen

Komennon allas-conf -m S3 käyttö on suoraviivaista, mutta se ylikirjoittaa olemassa olevan tunnistetiedoston aina suoritettaessa, mikä tekee useiden projektien kanssa työskentelystä hieman työlästä. Siksi on suositeltavaa käyttää Cloud storage configuration -sovellusta Puhdin tai Mahdin selainkäyttöliittymässä S3-yhteyksien määrittämiseen, koska nämä määritykset tallennetaan yksittäisiin S3-profiileihin.

  1. Käytä Cloud storage configuration -sovellusta S3-yhteyksien eli remotejen määrittämiseen niille projekteille, joiden Allas-tallennustilaa haluat käyttää. Määritykset tallennetaan tiedostoon ~/.config/rclone/rclone.conf siinä supertietokoneessa, jonka selainkäyttöliittymää käytit niiden luomiseen.

  2. S3-määritysten access key ID- ja secret access key -merkintöihin täytyy lisätä etuliite aws_, jotta boto3 tunnistaa ne S3-tunnistetiedoiksi, mutta emme halua tehdä muutoksia suoraan tiedostoon ~/.config/rclone/rclone.conf, koska muut ohjelmat käyttävät sitä. Käytä sen sijaan sed-apuohjelmaa lukemaan määritystiedoston sisältö, tekemään tarvittavat muutokset ja kirjoittamaan muokattu sisältö uuteen tiedostoon, esimerkiksi ~/.boto3_credentials. Tämä onnistuu seuraavalla komennolla.

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

Kun olet suorittanut nämä vaiheet, boto3:n käyttöön tarkoitetut S3-tunnistetietosi on tallennettu projektikohtaisiin S3-profiileihin vaiheessa 2 luomaasi tiedostoon. Profiilien nimet ovat muotoa s3allas-<project>, esimerkiksi s3allas-project_2001234. Voit nyt käyttää näitä tunnistetietoja boto3-resurssin luomiseen.

boto3:n käyttö

Luo boto3-resurssi

Vain yhdelle projektille määritetyt S3-tunnistetiedot:

# Create resource using credentials from the default location
# With newer versions of aws-library:
#   - defining endpoint here is not any more mandatory, if it is given in the config file.
#   - two checksum settings must be added that moving objects to/from Allas would work

import boto3
os.environ["AWS_REQUEST_CHECKSUM_CALCULATION"] = "when_required"
os.environ["AWS_RESPONSE_CHECKSUM_VALIDATION"] = "when_required"

s3_resource = boto3.resource('s3', endpoint_url='https://a3s.fi')
Useille projekteille määritetyt S3-tunnistetiedot:
# Create resource using credentials from a profile
import boto3
import os

s3_credentials = '<credentials-file>'   # e.g. '~/.boto3_credentials'
s3_profile = 's3allas-<project>'        # e.g. 's3allas-project_2001234'

os.environ['AWS_SHARED_CREDENTIALS_FILE'] = s3_credentials
os.environ["AWS_REQUEST_CHECKSUM_CALCULATION"] = "when_required"
os.environ["AWS_RESPONSE_CHECKSUM_VALIDATION"] = "when_required"

s3_session = boto3.Session(profile_name=s3_profile)
s3_resource = s3_session.resource('s3', endpoint_url='https://a3s.fi')

Jokainen seuraava vaihe 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 objektit

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 palveluun

Lataa pieni tiedosto nimeltä my_snake.txt palveluun ämpäriin snakebucket:

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

Poista ämpäreitä ja objekteja

Poista kaikki objektit ämpäristä:

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

Poista ämpäri; sen on oltava tyhjä:

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

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta