Hyppää sisältöön

A new version of SD Connect and SD Desktop will be available from Monday, September 28. The major upgrade will introduce significant improvements, but also includes changes that are not compatible with the current version of the service. Click here to review the available support materials.

Warning!

Puhti and Mahti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti and Mahti login nodes and storage services are planned to remain available until 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

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 data-analyysin työnkulku

  1. Lataa syötedata Altaaseen käyttäen boto3:a tai toista asiakasohjelmaa.
  2. Lataa data Allaksesta paikalliselle laitteelle (ts. 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 Altaaseen 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

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

Tunnistetiedot useiden CSC-projektien käyttämiseen

allas-conf:n käyttö on suoraviivaista, mutta se ylikirjoittaa olemassa olevan tunnistetietotiedoston aina suoritettaessa, mikä tekee useiden projektien kanssa työskentelystä hieman työlästä. Siksi on suositeltavaa käyttää Cloud storage configuration -sovellusta Roihu -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 määrittääksesi S3-yhteydet eli remotet niille projekteille, joiden Allas-tallennustilaa haluat käyttää. Määritykset tallennetaan tiedostoon ~/.config/rclone/rclone.conf sillä supertietokoneella, jonka selainkäyttöliittymää käytit niiden luomiseen.

  2. S3-määritysten access key ID- ja secret access key -merkinnät täytyy etuliittää aws_:lla, 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, S3-tunnistetietosi boto3:n käyttöä varten 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 Allakseen

Lataa pieni tiedosto nimeltä my_snake.txt ä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