Pubblicato il 19/08/2023 da alnao nella categoria AWS

Una Software Development Kit, spesso abbreviato con la sigla SDK, è una libreria che permette ad un programmatore di interfacciarsi con i servizi AWS tramite codice scritto in un linguaggio utilizzando delle specifiche API messe a disposizione. A differenza della CDK di AWS, che può essere usata solo per creare e configurare risorse, la SDK permette anche di interagire con i servizi, per esempio con le librerie SDK è possibile recuperare la lista di un bucket mentre con la CDK è possibile solo creare e distruggere uno storage S3. La libreria è documentata molto bene nel sito ufficiale e sono disponibili moltissimi esempi gratuiti che è possibile studiare nel repository ufficiale gratuito, gli usi più comuni sono lo sviluppo di applicazioni che interagiscono con i servizi nel Cloud sia come codice serverless tramite il servizio AWS Lambda Function sia come di applicazioni client.

Quando si usano le librerie di AWS (CDK e SDK) bisogna sempre ricordare che queste usano i profili configurati con la AWS-CLI: esattamente come per il comando CLI-SAM anche per la SDK viene usato il parametro di default se non specificato diversamente, se non c’è nessun profilo configurato queste librerie non sono utilizzabili, tuttavia è possibile impostare il profilo direttamente nel codice senza dover usare i profili CLI del sistema.


Per il linguaggio di programmazione Python la libreria SDK messa a disposizione da AWS è boto3, installabile grazie al gestore dei pacchetti pip:

pip install boto3

oppure nei sistemi Debian 12 è installabile con il pacchetto ufficiale:

apt-get install python3-boto3
Con questa libreria è possibile recuperare l’elenco dei profili e l’elendo dei bucket di un account con pochissime righe di codice:
#Elenco profili disponibili
import boto3
lista_profili=boto3.session.Session().available_profiles
for profilo in lista_profili:
    print(profilo)
#Elenco bucket
import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)
Tutta la libreria boto3 per python è open-source e la documentazione ufficiale è la fonte principale di informazioni in caso di necessità.

Per il linguaggio Java la libreria è disponibile in un respository maven di amazon, purtroppo esistono due versioni della libreria non compatibili tra loro come indicato nella documentazione ufficiale:
Package names begin with software.amazon.awssdk in SDK 2.x, 
  whereas the SDK 1.x uses com.amazonaws
Nota: In questo sito sono disponibili esempi solo della seconda versione, nella precedente versione del sito sono disponibili esempi della prima prima versione considerata deprecata.

Per iniziare a lavorare con SDK in Java è necessario configurare la libreria nel file di configurazione, aggiungendo i riferimenti al repository maven nel pom.xml con il tag:

<dependencyManagement>
    <dependencies>
        <dependency>
          <groupId>software.amazon.awssdk</groupId>
          <artifactId>bom</artifactId>
          <version>2.16.1</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
e poi è necessario aggiungere la dipendenza delle singole librerie in base ai singoli servizi usati, per esempio per usare le librerie di autenticazione e profili:
<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>auth</artifactId>
</dependency>
<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>profiles</artifactId>
</dependency>
Per recuperare i profili di un sistema è possibile usare i metodi base della libreria SDK
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.profiles.ProfileFile;
import software.amazon.awssdk.profiles.ProfileFile.Type;
...
    public static ProfileFile loadCredentialsFromFile() 
                throws FileNotFoundException {
        File configfile = new File(System.getProperty("user.home"),
           ".aws/credentials");
        ProfileFile profileFile = ProfileFile.builder()
           .content(new FileInputStream(configfile))
           .type(Type.CREDENTIALS).build();
        return profileFile;
    }
    public static Set<String> loadProfilesFromFile() 
                throws FileNotFoundException{
        ProfileFile p=loadCredentialsFromFile();
        return p.profiles().keySet();
    }
    public static AwsCredentialsProvider loadCredentialFromFile() 
                throws FileNotFoundException {
        return loadCredentialFromFile(DEFAULT_PROFILE);
    }
    public static AwsCredentialsProvider loadCredentialFromFile(
                String profileName) throws FileNotFoundException {
        ProfileFile p=loadCredentialsFromFile();
        AwsCredentialsProvider profileProvider = 
           ProfileCredentialsProvider.builder()
           .profileFile(p)
           .profileName(profileName)
           .build();
        return profileProvider;
    }
...
Tutti i dettagli riguardo alla libreria per la gestione di profili e credenziali nella SDK v2 di Java è disponibile nella solita documentazione ufficiale. Per tutti i linguaggi di programmazione sono disponibili esempi di codice con progetti completi nella documentazione ufficiale.

Esattamente come per i servizi CloudFormation e CDK bisogna ricordare che la SDK è gratuita ma tutte le risorse gestite possono essere a pagamento e bisogna sempre prestare attenzione a quello che viene creato nel Cloud per evitare addebiti indesiderati.

MENU