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à.
Esegui più query (Amazon Athena, Amazon SNS)
Questo progetto di esempio dimostra come eseguire le query Athena in successione e poi in parallelo, gestire gli errori e quindi inviare una notifica Amazon SNS a seconda che le query abbiano esito positivo o negativo.
In questo progetto, Step Functions utilizza una macchina a stati per eseguire le query Athena in modo sincrono. Dopo la restituzione dei risultati della query, immettete lo stato parallelo con due query Athena eseguite in parallelo. Attende quindi che il processo abbia esito positivo o negativo e invia un argomento di Amazon SNS con un messaggio indicante se il processo è riuscito o meno.
Fase 1: Creare la macchina a stati e fornire risorse
-
Apri la console Step Functions
e scegli Crea macchina a stati. -
Digita
Execute multiple queries
nella casella di ricerca, quindi scegli Esegui più interrogazioni dai risultati della ricerca restituiti. -
Seleziona Successivo per continuare.
-
Step Functions elenca quelli AWS servizi utilizzati nel progetto di esempio selezionato. Mostra anche un grafico del flusso di lavoro per il progetto di esempio. Implementa questo progetto sul tuo Account AWS o usalo come punto di partenza per creare i tuoi progetti. In base a come vuoi procedere, scegli Esegui una demo o Sviluppa su di essa.
Questo progetto di esempio utilizza le seguenti risorse:
-
Amazon Athenainterrogazioni
-
Un argomento Amazon SNS
-
Una macchina a stati AWS Step Functions
-
Ruoli AWS Identity and Access Management (IAM) correlati
L'immagine seguente mostra il grafico del flusso di lavoro per il progetto di esempio Execute multiple queries:
-
-
Scegliete Usa modello per continuare con la selezione.
-
Esegui una di queste operazioni:
-
Se hai selezionato Build on it, Step Functions crea il prototipo del flusso di lavoro per il progetto di esempio selezionato. Step Functions non distribuisce le risorse elencate nella definizione del flusso di lavoro.
In Workflow StudioModalità di progettazione, trascina gli stati da e continua Stati del browser a creare il tuo prototipo di flusso di lavoro. Oppure passa a Modalità codice quello che fornisce un editor di codice integrato simile a VS Code per aggiornare la definizione Amazon States Language (ASL) della tua macchina a stati all'interno della console Step Functions. Per ulteriori informazioni sull'utilizzo di Workflow Studio per creare macchine a stati, consultaUtilizzo di Workflow Studio.
-
Se hai selezionato Esegui una demo, Step Functions crea un progetto di esempio di sola lettura che utilizza un AWS CloudFormation modello per distribuire le AWS risorse elencate in quel modello sul tuo. Account AWS
Suggerimento
Per visualizzare la definizione della macchina a stati del progetto di esempio, scegli Code.
Quando sei pronto, scegli Distribuisci ed esegui per distribuire il progetto di esempio e creare le risorse.
La creazione di queste risorse e delle relative autorizzazioni IAM può richiedere fino a 10 minuti. Mentre le risorse vengono distribuite, puoi aprire il link CloudFormation Stack ID per vedere quali risorse vengono fornite.
Dopo aver creato tutte le risorse del progetto di esempio, puoi vedere il nuovo progetto di esempio elencato nella pagina State machines.
Importante
Potrebbero essere applicate tariffe standard per ogni servizio utilizzato nel CloudFormation modello.
-
Fase 2: Eseguire la macchina a stati
-
Nella pagina Macchine a stati, scegli il tuo progetto di esempio.
-
Nella pagina del progetto di esempio, scegli Avvia esecuzione.
-
Nella finestra di dialogo Avvia esecuzione, effettuate le seguenti operazioni:
-
(Facoltativo) Per identificare l'esecuzione, potete specificarne un nome nella casella Nome. Per impostazione predefinita, Step Functions genera automaticamente un nome di esecuzione univoco.
Nota
Step Functions consente di creare nomi per macchine a stati, esecuzioni, attività ed etichette che contengono caratteri non ASCII. Questi nomi non ASCII non funzionano con Amazon. CloudWatch Per assicurarti di poter tenere traccia delle CloudWatch metriche, scegli un nome che utilizzi solo caratteri ASCII.
-
(Facoltativo) Nella casella Input, inserisci i valori di input in formato JSON per eseguire il flusso di lavoro.
Se avete scelto di eseguire una demo, non è necessario fornire alcun input di esecuzione.
-
Selezionare Start execution (Avvia esecuzione).
-
La console Step Functions ti indirizza a una pagina intitolata con il tuo ID di esecuzione. Questa pagina è nota come pagina dei dettagli di esecuzione. In questa pagina è possibile esaminare i risultati dell'esecuzione man mano che l'esecuzione procede o dopo il suo completamento.
Per esaminare i risultati dell'esecuzione, scegliete i singoli stati nella vista Grafico, quindi scegliete le singole schede Dettagli del passaggio nel riquadro per visualizzare i dettagli di ogni stato, inclusi rispettivamente input, output e definizione. Per i dettagli sulle informazioni sull'esecuzione che è possibile visualizzare nella pagina Dettagli di esecuzione, vederePagina dei dettagli di esecuzione: panoramica dell'interfaccia.
-
Esempio di codice della macchina a stati
La macchina a stati di questo progetto di esempio si integra con Amazon Athena e Amazon SNS passando i parametri direttamente a tali risorse.
Sfoglia questo esempio di macchina a stati per vedere come Step Functions controlla Amazon Athena e Amazon SNS connettendosi all'Amazon Resource Name (ARN) sul campo e passando Resource
Parameters
all'API del servizio.
Per ulteriori informazioni su come AWS Step Functions controllare altri AWS servizi, consulta. Utilizzo AWS Step Functions con altri servizi
{
"Comment": "An example of using Athena to execute queries in sequence and parallel, with error handling and notifications.",
"StartAt": "Generate Example Data",
"States": {
"Generate Example Data": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "<ATHENA_FUNCTION_NAME>"
},
"Next": "Load Data to Database"
},
"Load Data to Database": {
"Type": "Task",
"Resource": "arn:aws:states:::athena:startQueryExecution.sync",
"Parameters": {
"QueryString": "<ATHENA_QUERYSTRING>",
"WorkGroup": "<ATHENA_WORKGROUP>"
},
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "Send query results"
}
],
"Next": "Map"
},
"Map": {
"Type": "Parallel",
"ResultSelector": {
"Query1Result.$": "$[0].ResultSet.Rows",
"Query2Result.$": "$[1].ResultSet.Rows"
},
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "Send query results"
}
],
"Branches": [
{
"StartAt": "Start Athena query 1",
"States": {
"Start Athena query 1": {
"Type": "Task",
"Resource": "arn:aws:states:::athena:startQueryExecution.sync",
"Parameters": {
"QueryString": "<ATHENA_QUERYSTRING>",
"WorkGroup": "<ATHENA_WORKGROUP>"
},
"Next": "Get Athena query 1 results"
},
"Get Athena query 1 results": {
"Type": "Task",
"Resource": "arn:aws:states:::athena:getQueryResults",
"Parameters": {
"QueryExecutionId.$": "$.QueryExecution.QueryExecutionId"
},
"End": true
}
}
},
{
"StartAt": "Start Athena query 2",
"States": {
"Start Athena query 2": {
"Type": "Task",
"Resource": "arn:aws:states:::athena:startQueryExecution.sync",
"Parameters": {
"QueryString": "<ATHENA_QUERYSTRING>",
"WorkGroup": "<ATHENA_WORKGROUP>"
},
"Next": "Get Athena query 2 results"
},
"Get Athena query 2 results": {
"Type": "Task",
"Resource": "arn:aws:states:::athena:getQueryResults",
"Parameters": {
"QueryExecutionId.$": "$.QueryExecution.QueryExecutionId"
},
"End": true
}
}
}
],
"Next": "Send query results"
},
"Send query results": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"Message.$": "$",
"TopicArn": "<SNS_TOPIC_ARN>"
},
"End": true
}
}
}
Esempi IAM
Questo esempio di policy AWS Identity and Access Management (IAM) generato dal progetto di esempio include il minimo privilegio necessario per eseguire la macchina a stati e le risorse correlate. Ti consigliamo di includere solo le autorizzazioni necessarie nelle tue policy IAM.
AthenaStartQueryExecution
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"athena:startQueryExecution",
"athena:stopQueryExecution",
"athena:getQueryExecution",
"athena:getDataCatalog"
],
"Resource": [
"arn:aws:athena:us-east-2:123456789012:workgroup/stepfunctions-athena-sample-project-workgroup-ztuvu9yuix",
"arn:aws:athena:us-east-2:123456789012:datacatalog/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload",
"s3:CreateBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"glue:CreateDatabase",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:UpdateDatabase",
"glue:DeleteDatabase",
"glue:CreateTable",
"glue:UpdateTable",
"glue:GetTable",
"glue:GetTables",
"glue:DeleteTable",
"glue:BatchDeleteTable",
"glue:BatchCreatePartition",
"glue:CreatePartition",
"glue:UpdatePartition",
"glue:GetPartition",
"glue:GetPartitions",
"glue:BatchGetPartition",
"glue:DeletePartition",
"glue:BatchDeletePartition"
],
"Resource": [
"arn:aws:glue:us-east-2:123456789012:catalog",
"arn:aws:glue:us-east-2:123456789012:database/*",
"arn:aws:glue:us-east-2:123456789012:table/*",
"arn:aws:glue:us-east-2:123456789012:userDefinedFunction/*"
]
},
{
"Effect": "Allow",
"Action": [
"lakeformation:GetDataAccess"
],
"Resource": [
"*"
]
}
]
}
AthenaGetQueryResults
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"athena:getQueryResults"
],
"Resource": [
"arn:aws:us-east-2:123456789012:workgroup/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
Pubblicazione SNS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": [
"arn:aws:sns:us-east-2:123456789012:StepFunctionsSample-AthenaMultipleQueriese1ec229b-5cbe-4754-a8a8-078474bac878-SNSTopic-9AID0HEJT7TH"
]
}
]
}
LambdaInvokeFunction
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:us-east-2:123456789012:function:StepFunctionsSample-Athen-LambdaForStringGeneratio-GQFQjN7mE9gl:*"
]
},
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:us-east-2:123456789012:function:StepFunctionsSample-Athen-LambdaForStringGeneratio-GQFQjN7mE9gl"
]
}
]
}
Per informazioni su come configurare IAM quando si utilizza Step Functions con altri AWS servizi, vederePolitiche IAM per servizi integrati.