Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti will be decommissioned after Roihu becomes available. Users should clean up unnecessary files and move any required data by the end of August 2026. See the Roihu data preparation instructions for details.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

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