step-by-step Istruzioni di migrazione con esempio - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

step-by-step Istruzioni di migrazione con esempio

Questa sezione fornisce una step-by-step guida per migrare l'applicazione che attualmente utilizza la versione SDK per Java v1.x alla versione SDK per Java 2.x. La prima parte presenta una panoramica dei passaggi seguiti da un esempio dettagliato di migrazione.

I passaggi descritti qui descrivono la migrazione di un caso d'uso normale, in cui l'applicazione chiama Servizi AWS utilizzando client di servizi basati su modelli. Se devi migrare codice che utilizza un livello superiore APIs come S3 Transfer Manager o la CloudFrontprefirma, consulta la sezione sotto il sommario. Cosa c'è di diverso tra AWS SDK for Java 1.x e 2.x

L'approccio qui descritto è un suggerimento. Puoi utilizzare altre tecniche e sfruttare le tue funzionalità di modifica IDE del codice per ottenere lo stesso risultato.

Panoramica delle fasi

1. Inizia aggiungendo il SDK per Java 2.x BOM

Aggiungendo l'elemento Maven BOM (Bill of Materials) SDK per Java 2.x al POM file, ti assicuri che tutte le dipendenze v2 necessarie provengano dalla stessa versione. POMPuoi contenere dipendenze sia v1 che v2. Ciò consente di migrare il codice in modo incrementale anziché modificarlo tutto in una volta.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

Puoi trovare l'ultima versione sul Maven Central Repository.

2. Cerca nei file le istruzioni di importazione della classe v1

Scansionando i file della tua applicazione alla ricerca di SERVICE _ IDs usato nelle importazioni v1, troverai l'unico SERVICE _ IDs usato. Un SERVICE _ID è un nome breve e univoco per un. Servizio AWS Ad esempio cognitoidentity è il SERVICE _ID per Amazon Cognito Identity.

3. Determina le dipendenze di Maven v2 dalle istruzioni di importazione v1

Dopo aver trovato tutte le v1 SERVICE _ unicheIDs, puoi determinare l'artefatto Maven corrispondente per la dipendenza v2 facendo riferimento a. Nome del pacchetto in Maven mappings artifactId

4. Aggiungi elementi di dipendenza v2 al file POM

Aggiorna il POM file Maven con gli elementi di dipendenza determinati nel passaggio 3.

5. Nei file Java, passa in modo incrementale dalle classi v1 alle classi v2

Quando sostituite le classi v1 con le classi v2, apportate le modifiche necessarie per supportare la v2, ad API esempio utilizzando i builder anziché i costruttori e utilizzando getter e setter fluenti.

6. Rimuovi le dipendenze v1 Maven dalle importazioni v1 e v1 dai file POM

Dopo aver migrato il codice per utilizzare le classi v2, rimuovi tutte le importazioni v1 rimanenti dai file e tutte le dipendenze dal file di build.

7. Rifattorizza il codice per utilizzare i miglioramenti della v2 API

Dopo che il codice è stato compilato e superato con successo i test, puoi sfruttare i miglioramenti della v2, come l'utilizzo di un client o di impaginatori diversi per semplificare il codice. HTTP Questa fase è opzionale.

Esempio di migrazione

In questo esempio, eseguiamo la migrazione di un'applicazione che utilizza SDK for Java v1 e accede a diversi. Servizi AWS Esaminiamo in dettaglio il seguente metodo v1 nel passaggio 5. Questo è un metodo in una classe che contiene otto metodi e nell'applicazione sono presenti 32 classi.

Di seguito sono elencate solo le SDK importazioni v1 dal file Java.

import com.amazonaws.ClientConfiguration; import com.amazonaws.regions.Region; import com.amazonaws.regions.RegionUtils; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.AmazonEC2Exception; import com.amazonaws.services.ec2.model.CreateTagsRequest; import com.amazonaws.services.ec2.model.DescribeInstancesRequest; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.Reservation; import com.amazonaws.services.ec2.model.Tag; import com.amazonaws.services.ec2.model.TerminateInstancesRequest; ... private static List<Instance> getRunningInstances(AmazonEC2Client ec2, List<String> instanceIds) { List<Instance> runningInstances = new ArrayList<>(); try { DescribeInstancesRequest request = new DescribeInstancesRequest() .withInstanceIds(instanceIds); DescribeInstancesResult result; do { // DescribeInstancesResponse is a paginated response, so use tokens with multiple requests. result = ec2.describeInstances(request); request.setNextToken(result.getNextToken()); // Prepare request for next page. for (final Reservation r : result.getReservations()) { for (final Instance instance : r.getInstances()) { LOGGER.info("Examining instanceId: "+ instance.getInstanceId()); // if instance is in a running state, add it to runningInstances list. if (RUNNING_STATES.contains(instance.getState().getName())) { runningInstances.add(instance); } } } } while (result.getNextToken() != null); } catch (final AmazonEC2Exception exception) { // if instance isn't found, assume its terminated and continue. if (exception.getErrorCode().equals(NOT_FOUND_ERROR_CODE)) { LOGGER.info("Instance probably terminated; moving on."); } else { throw exception; } } return runningInstances; }

1. Aggiungi v2 Maven BOM

Aggiungi Maven BOM SDK per Java 2.x POM accanto a tutte le altre dipendenze nella sezione. dependencyManagement Se il tuo POM file ha la versione v1 diSDK, lasciala BOM per ora. Verrà rimosso in un passaggio successivo.

<dependencyManagement> <dependencies> <dependency> <groupId>org.example</groupId> <!--Existing dependency in POM. --> <artifactId>bom</artifactId> <version>1.3.4</version> <type>pom</type> <scope>import</scope> </dependency> ... <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <!--Existing v1 BOM dependency. --> <version>1.11.1000</version> <type>pom</type> <scope>import</scope> </dependency> ... <dependency> <groupId>software.amazon.awssdk</groupId> <!--Add v2 BOM dependency. --> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

2. Cerca nei file le istruzioni di importazione della classe v1

Cerca nel codice dell'applicazione le occorrenze uniche di. import com.amazonaws.services Questo ci aiuta a determinare le dipendenze v1 utilizzate dal progetto. Se la tua applicazione ha un POM file Maven con le dipendenze v1 elencate, puoi invece utilizzare queste informazioni.

Per questo esempio utilizziamo il comando ripgrep(rg) per cercare nella base di codice.

Dalla radice della tua base di codice, esegui il seguente ripgrep comando. Dopo aver ripgrep trovato le istruzioni di importazione, queste vengono reindirizzate a cutsort, e uniq i comandi per isolare SERVICE _. IDs

rg --no-filename 'import\s+com\.amazonaws\.services' | cut -d '.' -f 4 | sort | uniq

Per questa applicazione, i seguenti SERVICE _ IDs vengono registrati nella console.

autoscaling cloudformation ec2 identitymanagement

Ciò indica che c'è stata almeno un'occorrenza di ciascuno dei seguenti nomi di pacchetto usati nelle import istruzioni. Per i nostri scopi, i nomi delle singole classi non contano. Dobbiamo solo trovare i SERVICE _ IDs che vengono utilizzati.

com.amazonaws.services.autoscaling.* com.amazonaws.services.cloudformation.* com.amazonaws.services.ec2.* com.amazonaws.services.identitymanagement.*

3. Determina le dipendenze di Maven v2 dalle istruzioni di importazione v1

Il SERVICE _ IDs for v1 che abbiamo isolato dal passaggio 2, ad esempio autoscaling e, cloudformation può essere mappato per la maggior parte allo stesso _ID v2. SERVICE Poiché Maven v2 artifactId corrisponde al SERVICE _ID nella maggior parte dei casi, hai le informazioni necessarie per aggiungere blocchi di dipendenza al tuo file. POM

La tabella seguente mostra come possiamo determinare le dipendenze v2.

v1 SERVICE _ID è mappato a...

nome del pacchetto

v2 SERVICE _ID mappa su...

nome del pacchetto

dipendenza da Maven v2

ec2

com.amazonaws.services.ec2.*

ec2

software.amazon.awssdk.services.ec2.*

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>ec2</artifactId> </dependency>

scalabilità automatica

com.amazonaws.services.autoscaling.*

scalabilità automatica

software.amazon.awssdk.services.autoscaling.*

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>autoscaling</artifactId> </dependency>
cloudformation

com.amazonaws.services.cloudformation.*

cloudformation

software.amazon.awssdk.cloudformation.*

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>cloudformation</artifactId> </dependency>
gestione dell'identità*

com.amazonaws.services.identitymanagement.*

sono*

software.amazon.awssdk.iam.*

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>iam</artifactId> </dependency>

* La iam mappatura identitymanagement to è un'eccezione in cui il SERVICE _ID differisce tra le versioni. Fai riferimento a Nome del pacchetto in Maven mappings artifactId per le eccezioni se Maven o Gradle non sono in grado di risolvere la dipendenza v2.

4. Aggiungi elementi di dipendenza v2 al file POM

Nel passaggio 3, abbiamo determinato i quattro blocchi di dipendenza che devono essere aggiunti al file. POM Non è necessario aggiungere una versione perché l'abbiamo specificata BOM nel passaggio 1. Dopo aver aggiunto le importazioni, il nostro POM file presenta i seguenti elementi di dipendenza.

... <dependencies> ... <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>autoscaling</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>iam</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>cloudformation</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>ec2</artifactId> </dependency> ... </dependencies> ...

5. Nei file Java, passa in modo incrementale dalle classi v1 alle classi v2

Nel metodo che stiamo migrando, vediamo

  • Un cliente EC2 di servizio dicom.amazonaws.services.ec2.AmazonEC2Client.

  • Diverse classi di EC2 modelli utilizzate. Ad esempio DescribeInstancesRequest eDescribeInstancesResult.

import com.amazonaws.ClientConfiguration; import com.amazonaws.regions.Region; import com.amazonaws.regions.RegionUtils; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.AmazonEC2Exception; import com.amazonaws.services.ec2.model.CreateTagsRequest; import com.amazonaws.services.ec2.model.DescribeInstancesRequest; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.Reservation; import com.amazonaws.services.ec2.model.Tag; import com.amazonaws.services.ec2.model.TerminateInstancesRequest; ... private static List<Instance> getRunningInstances(AmazonEC2Client ec2, List<String> instanceIds) List<Instance> runningInstances = new ArrayList<>(); try { DescribeInstancesRequest request = new DescribeInstancesRequest() .withInstanceIds(instanceIds); DescribeInstancesResult result; do { // DescribeInstancesResponse is a paginated response, so use tokens with multiple re result = ec2.describeInstances(request); request.setNextToken(result.getNextToken()); // Prepare request for next page. for (final Reservation r : result.getReservations()) { for (final Instance instance : r.getInstances()) { LOGGER.info("Examining instanceId: "+ instance.getInstanceId()); // if instance is in a running state, add it to runningInstances list. if (RUNNING_STATES.contains(instance.getState().getName())) { runningInstances.add(instance); } } } } while (result.getNextToken() != null); } catch (final AmazonEC2Exception exception) { // if instance isn't found, assume its terminated and continue. if (exception.getErrorCode().equals(NOT_FOUND_ERROR_CODE)) { LOGGER.info("Instance probably terminated; moving on."); } else { throw exception; } } return runningInstances; } ...

Il nostro obiettivo è sostituire tutte le importazioni v1 con le importazioni v2. Procediamo una lezione alla volta.

a. Sostituisci l'istruzione di importazione o il nome della classe

Vediamo che il primo parametro del describeRunningInstances metodo è un'AmazonEC2Clientistanza v1. Esegui una di queste operazioni:

  • Sostituisci l'importazione per com.amazonaws.services.ec2.AmazonEC2Client con software.amazon.awssdk.services.ec2.Ec2Client e passa AmazonEC2Client aEc2Client.

  • Cambia il tipo di parametro in Ec2Client e lascia che IDE ci richieda l'importazione corretta. Il nostro ci IDE chiederà di importare la classe v2 perché i nomi dei client sono diversi e. AmazonEC2Client Ec2Client Questo approccio non funziona se il nome della classe è lo stesso in entrambe le versioni.

b. Sostituisci le classi del modello v1 con gli equivalenti v2

Dopo la modifica alla v2Ec2Client, se utilizziamo unIDE, vediamo errori di compilazione nella seguente dichiarazione.

result = ec2.describeInstances(request);

L'errore di compilazione deriva dall'utilizzo di un'istanza di v1 DescribeInstancesRequest come parametro del metodo v2. Ec2Client describeInstances Per risolvere il problema, effettuate le seguenti istruzioni di sostituzione o importazione.

replace con
import com.amazonaws.services.ec2.model.DescribeInstancesRequest
import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest

c. Cambia i costruttori v1 in v2 builder.

Vediamo ancora errori di compilazione perché non ci sono costruttori nelle classi v2. Per risolvere il problema, apporta la seguente modifica.

modifica in
final DescribeInstancesRequest request = new DescribeInstancesRequest() .withInstanceIds(instanceIdsCopy);
final DescribeInstancesRequest request = DescribeInstancesRequest.builder() .instanceIds(instanceIdsCopy) .build();

d. Sostituisci gli oggetti di *Result risposta v1 con gli equivalenti *Response v2

Una differenza consistente tra v1 e v2 è che tutti gli oggetti di risposta in v2 terminano con invece di. *Response *Result Sostituisci l'importazione v1 con DescribeInstancesResult l'importazione v2,. DescribeInstancesResponse

d. Effettuare modifiche API

La seguente dichiarazione richiede alcune modifiche.

request.setNextToken(result.getNextToken());

Nella v2, i metodi setter non utilizzano set o with. prefix I metodi Getter con prefisso get sono presenti anche in Java 2.x SDK

Le classi del modello, come l'requestistanza, sono immutabili nella v2, quindi dobbiamo crearne una nuova con un builder. DescribeInstancesRequest

Nella v2, l'istruzione diventa la seguente.

request = DescribeInstancesRequest.builder() .nextToken(result.nextToken()) .build();

d. Ripetere l'operazione fino alla compilazione del metodo con le classi v2

Continua con il resto del codice. Sostituisci le importazioni v1 con le importazioni v2 e correggi gli errori di compilazione. Se necessario, consulta il riferimento v2 e il API riferimento What's different.

Dopo aver migrato questo singolo metodo, abbiamo il seguente codice v2.

import com.amazonaws.ClientConfiguration; import com.amazonaws.regions.Region; import com.amazonaws.regions.RegionUtils; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.AmazonEC2Exception; import com.amazonaws.services.ec2.model.CreateTagsRequest; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.Tag; import com.amazonaws.services.ec2.model.TerminateInstancesRequest; import software.amazon.awssdk.services.ec2.Ec2Client; import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest; import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse; import software.amazon.awssdk.services.ec2.model.Ec2Exception; import software.amazon.awssdk.services.ec2.model.Instance; import software.amazon.awssdk.services.ec2.model.Reservation; ... private static List<Instance> getRunningInstances(Ec2Client ec2, List<String> instanceIds) { List<Instance> runningInstances = new ArrayList<>(); try { DescribeInstancesRequest request = DescribeInstancesRequest.builder() .instanceIds(instanceIds) .build(); DescribeInstancesResponse result; do { // DescribeInstancesResponse is a paginated response, so use tokens with multiple re result = ec2.describeInstances(request); request = DescribeInstancesRequest.builder() // Prepare request for next page. .nextToken(result.nextToken()) .build(); for (final Reservation r : result.reservations()) { for (final Instance instance : r.instances()) { // if instance is in a running state, add it to runningInstances list. if (RUNNING_STATES.contains(instance.state().nameAsString())) { runningInstances.add(instance); } } } } while (result.nextToken() != null); } catch (final Ec2Exception exception) { // if instance isn't found, assume its terminated and continue. if (exception.awsErrorDetails().errorCode().equals(NOT_FOUND_ERROR_CODE)) { LOGGER.info("Instance probably terminated; moving on."); } else { throw exception; } } return runningInstances; } ...

Poiché stiamo migrando un singolo metodo in un file Java con otto metodi, abbiamo un mix di importazioni v1 e v2 mentre elaboriamo il file. Abbiamo aggiunto le ultime sei istruzioni di importazione man mano che eseguivamo i passaggi.

Dopo aver migrato tutto il codice, non ci saranno più istruzioni di importazione v1.

6. Rimuovi le dipendenze v1 Maven dalle importazioni v1 e v1 dai file POM

Dopo aver migrato tutto il codice v1 nel file, abbiamo le seguenti istruzioni di importazione v2. SDK

import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.regions.ServiceMetadata; import software.amazon.awssdk.services.ec2.Ec2Client; import software.amazon.awssdk.services.ec2.model.CreateTagsRequest; import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest; import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse; import software.amazon.awssdk.services.ec2.model.Ec2Exception; import software.amazon.awssdk.services.ec2.model.Instance; import software.amazon.awssdk.services.ec2.model.InstanceStateName; import software.amazon.awssdk.services.ec2.model.Reservation; import software.amazon.awssdk.services.ec2.model.Tag; import software.amazon.awssdk.services.ec2.model.TerminateInstancesRequest;

Dopo aver migrato tutti i file nella nostra applicazione, non abbiamo più bisogno delle dipendenze v1 nel nostro file. POM Rimuovi la v1 BOM dalla dependencyManagement sezione, se utilizzata, e tutti i blocchi di dipendenza v1.

7. Rifattorizza il codice per utilizzare i miglioramenti della v2 API

Per lo snippet che stiamo migrando, possiamo opzionalmente utilizzare un impaginatore v2 e lasciargli gestire le richieste basate su token per ulteriori dati. SDK

Possiamo sostituire l'intera clausola con la seguente. do

DescribeInstancesIterable responses = ec2.describeInstancesPaginator(request); responses.reservations().stream() .forEach(reservation -> reservation.instances() .forEach(instance -> { if (RUNNING_STATES.contains(instance.state().nameAsString())) { runningInstances.put(instance.instanceId(), instance); } }));

Nome del pacchetto in Maven mappings artifactId

Quando migri il tuo progetto Maven o Gradle dalla v1 di Java alla v2, devi capire quali dipendenze aggiungere al tuo file di build. SDK L'approccio descritto nel step-by-step Istruzioni di migrazione con esempio (passaggio 3) utilizza i nomi dei pacchetti nelle istruzioni di importazione come punto di partenza per determinare le dipendenze da aggiungere al file di build. artifactIds

È possibile utilizzare le informazioni in questo argomento per mappare i nomi dei pacchetti v1 a v2. artifactIds

Convenzione di denominazione comune utilizzata nei nomi dei pacchetti e in Maven artifactIds

La tabella seguente mostra la convenzione di denominazione comune SDKs utilizzata per un determinato SERVICE _ID. Un SERVICE _ID è un identificatore univoco per un. Servizio AWS Ad esempio, il SERVICE _ID per il servizio Amazon S3 s3 è cognitoidentity ed è SERVICE il _ID per Amazon Cognito Identity.

nome del pacchetto v1 (dichiarazione di importazione) v1 artifactId v2 artifactId nome del pacchetto v2 (dichiarazione di importazione)
com.amazonaws.services. SERVICE_ID aws-java-sdk- _ID SERVICE SERVICE_ID software.amazon.awssdk.services. SERVICE_ID
Esempio di Amazon Cognito Identity (SERVICE_ID:) cognitoidentity
com.amazonaws.services. identità cognitiva aws-java-sdk- identità cognitiva identità cognitiva software.amazon.awssdk.services. identità cognitiva

SERVICEDifferenze _ID

All'interno di v1

In alcuni casi il SERVICE _ID differisce tra il nome del pacchetto e quello dello stesso artifactId servizio. Ad esempio, la riga CloudWatch Metrics della tabella seguente mostra che metrics è il SERVICE _ID nel nome del pacchetto ma cloudwatchmetrics è il _ID. artifactId SERVICE

All'interno di v2

Non ci sono differenze nel SERVICE _ID usato nei nomi dei pacchetti e. artifactIds

Tra v1 e v2

Per la maggior parte dei servizi, il SERVICE _ID nella v2 è lo stesso del SERVICE _ID della v1 in entrambi i nomi dei pacchetti e. artifactIds Un esempio di ciò è il cognitoedentity SERVICE _ID mostrato nella tabella precedente. Tuttavia, alcuni SERVICE _ IDs differiscono tra SDKs quelli mostrati nella tabella seguente.

Un SERVICE_ID in grassetto in una delle colonne v1 indica che è diverso dal SERVICE _ID utilizzato nella v2.

Nome servizio nome del pacchetto v1 v1 artifactId v2 artifactId nome del pacchetto v2

Tutti i nomi dei pacchetti iniziano con com.amazonaws.services quello mostrato nella prima riga.

Tutti artifactIds sono racchiusi in tag come mostrato nella prima riga.

Tutti artifactIds sono racchiusi in tag come mostrato nella prima riga.

Tutti i nomi dei pacchetti iniziano con software.amazon.awssdk quello mostrato nella prima riga.

APIGateway com.amazonaws.services.api gateway < > - api-gateway </ > artifactId aws-java-sdk artifactId < > apigateway </ > artifactId artifactId software.amazon.awssdk.services.apigateway
Registro delle app registro delle app apprendistato registro del catalogo dei servizi registro del catalogo dei servizi
Application Discovery scoperta delle applicazioni scoperta scoperta delle applicazioni individuazione delle applicazioni
Runtime AI Augmented autonomia aerea aumentata durata dell'aria aumentata runtime sagemaker a2i runtime sagemakera2i
Certificate Manager gestore dei certificati acm acm acm
CloudControl API API di controllo cloud API di controllo cloud controllo cloud controllo del cloud
CloudSearch cloudsearch v2 cloudsearch cloudsearch cloudsearch
CloudSearch Dominio dominio cloudsearch ricerca nel cloud dominio cloudsearch dominio cloudsearch
CloudWatch Eventi eventi cloudwatch eventi eventi cloudwatch eventi cloudwatch
CloudWatch Evidentemente Cloudwatch evidentemente cloudwatch evidentemente evidently evidently
CloudWatch Registri logs logs log di cloudwatch cloudwatchlogs
CloudWatch Metriche metriche metriche cloudwatch cloudwatch cloudwatch
CloudWatch rum Cloudwatch rum cloudwatchrum rum rum
Provider di identità Cognito cognitoidp cognitoidp provider di cognitoidentity provider di cognitoidentity
Campagna Connect connetti la campagna connetti la campagna collegare le campagne collegare le campagne
Connect Wisdom connetti la saggezza connettere la saggezza wisdom wisdom
Database Migration Service servizio di migrazione del database dms migrazione del database migrazione del database
DataZone zona dati zona dati esterna zona dati zona dati
DynamoDB dinamo dbv2 dynamodb dynamodb dynamodb
File system elastico file system elastico efs efs efs
Riduzione elastica della mappa elasticmapreduce emr emr emr
Glue DataBrew incolla databrew incollare databrew databrew databrew
IAMRuoli ovunque I miei ruoli sono ovunque sono ruoli ovunque rolesanywhere rolesanywhere
Gestione di identità gestione dell'identità iam iam iam
Dati IoT dati IoT iot piano dati iot piano dati iot
Analisi Kinesis kinesisanalytics kinesis kinesisanalytics kinesisanalytics
Kinesis Firehose manichetta antincendio kinesis kinesis firehose firehose
Canali di segnalazione video Kinesis canali di segnalazione video kinesis canali di segnalazione video kinesis segnalazione video kinesis segnalazione video kinesis
Lex runtime lex lex runtime lex lexruntime
Attenzione a Vision fai attenzione alla visione attenzione alla visione lookoutvision lookoutvision
Modernizzazione del mainframe modernizzazione del mainframe modernizzazione del mainframe m2 m2
Misurazione del Marketplace misurazione del mercato servizio di marketplacemetering misurazione del marketplace misurazione del marketplace
Grafana gestita grafana gestito grafana gestita grafana grafana
Mechanical Turk mturk richiedente turco meccanico mturk mturk
Suggerimenti di strategia dell'Hub di migrazione raccomandazioni sulla strategia dell'hub di migrazione raccomandazioni strategiche di migrationhub strategia migrationhubs strategia migrationhub
Nimble Studio studio agile studio agile nimble nimble
5G privato 5g privato 5g privato reti private reti private
Prometheus prometeo prometeo amp amp
Cestino bidone per riciclare pattumiera rbin rbin
Dati Redshift API redshift dataapi redshiftdataapi dati redshift dati redshift
Route 53 domini route53 route53 domini route53 domini route53
Sage Maker Edge Manager sagemaker edgemanager sagemakedgemanager sagemakeredge sagemaker edge
Token di sicurezza token di sicurezza sts sts sts
Migrazione dei server migrazione del server migrazione del server sms sms
Email semplice email semplice ses ses ses
Email semplice V2 email semplice v2 ses v2 sesv2 sesv2
Gestione semplice dei sistemi gestione semplice dei sistemi ssm ssm ssm
Flusso di lavoro semplice flusso di lavoro semplice flusso di lavoro semplice swf swf
Step Functions funzioni a fasi funzioni step sfn sfn