Effettua il provisioning di un prodotto Terraform in AWS Service Catalog utilizzando un repository di codice - Prontuario AWS

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à.

Effettua il provisioning di un prodotto Terraform in AWS Service Catalog utilizzando un repository di codice

Creato dal dott. Rahul Sharad Gaikwad (AWS) e Tamilselvan P (AWS)

Ambiente: PoC o pilota

Tecnologie: infrastruttura; DevOps

Carico di lavoro: tutti gli altri carichi di lavoro

Servizi AWS: AWS Service Catalog; Amazon EC2

Riepilogo

AWS Service Catalog supporta il provisioning self-service con governance per le configurazioni HashiCorp Terraform. Se usi Terraform, puoi usare Service Catalog come strumento unico per organizzare, governare e distribuire le tue configurazioni Terraform all'interno di AWS su larga scala. Puoi accedere alle funzionalità principali di Service Catalog, tra cui la catalogazione di modelli di infrastruttura come codice (IaC) standardizzati e preapprovati, il controllo degli accessi, il provisioning delle risorse cloud con accesso con privilegi minimi, il controllo delle versioni, la condivisione con migliaia di account AWS e il tagging. Gli utenti finali, come ingegneri, amministratori di database e data scientist, visualizzano un elenco di prodotti e versioni a cui hanno accesso e possono implementarli con una singola azione.

Questo modello ti aiuta a distribuire risorse AWS utilizzando il codice Terraform. Il codice Terraform nel GitHub repository è accessibile tramite Service Catalog. Utilizzando questo approccio, integri i prodotti con i flussi di lavoro Terraform esistenti. Gli amministratori possono creare portafogli Service Catalog e aggiungere loro prodotti AWS Launch Wizard utilizzando Terraform.

I vantaggi di questa soluzione sono i seguenti:

  • Grazie alla funzionalità di rollback di Service Catalog, in caso di problemi durante la distribuzione, è possibile ripristinare il prodotto a una versione precedente.

  • È possibile identificare facilmente le differenze tra le versioni del prodotto. Ciò consente di risolvere i problemi durante la distribuzione.

  • Puoi configurare una connessione al repository in Service Catalogue, ad esempio to GitHub GitLab, o AWS CodeCommit. È possibile apportare modifiche al prodotto direttamente tramite il repository.

Per informazioni sui vantaggi complessivi di AWS Service Catalog, consulta What is Service Catalog.

Prerequisiti e limitazioni

Prerequisiti

Architettura

Stack tecnologico Target

  • AWS Service Catalog

  • AWS Lambda

Architettura di destinazione

Diagramma dell'architettura del provisioning di un prodotto Terraform in Service Catalog da un repository di codice

Il diagramma mostra il flusso di lavoro seguente:

  1. Quando una configurazione Terraform è pronta, uno sviluppatore crea un file.zip che contiene tutto il codice terraform. Lo sviluppatore carica il file.zip nell'archivio di codice collegato a Service Catalog.

  2. Un amministratore associa il prodotto Terraform a un portafoglio in Service Catalog. L'amministratore crea inoltre un vincolo di avvio che consente agli utenti finali di fornire il prodotto.

  3. In Service Catalog, gli utenti finali avviano le risorse AWS utilizzando la configurazione Terraform. Possono scegliere quale versione del prodotto distribuire.

Strumenti

Servizi e strumenti AWS

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

  • AWS Service Catalog ti aiuta a gestire centralmente i cataloghi di servizi IT approvati per AWS. Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.

Altri servizi

  • Go è un linguaggio di programmazione open source supportato da Google.

  • Python è un linguaggio di programmazione per computer generico.

Archivio di codice

Se hai bisogno di configurazioni Terraform di esempio da distribuire tramite Service Catalog, puoi utilizzare le configurazioni nell'Amazon Macie GitHub Organization Setup Using Terraform repository. L'uso degli esempi di codice in questo repository non è richiesto.

Best practice

  • Invece di fornire i valori per le variabili nel file di configurazione Terraform (terraform.tfvars), configura i valori delle variabili quando avvii il prodotto tramite Service Catalog.

  • Concedi l'accesso al portafoglio solo a utenti o amministratori specifici.

  • Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le best practice relative alla concessione dei privilegi minimi e alla sicurezza nella documentazione IAM.

Epiche

AttivitàDescrizioneCompetenze richieste

(Facoltativo) Installa Docker.

Se desideri eseguire le funzioni AWS Lambda nel tuo ambiente di sviluppo, installa Docker. Per ulteriori informazioni, consulta la sezione Installazione del motore Docker nella documentazione di Docker.

DevOps ingegnere

Installa il motore AWS Service Catalog per Terraform.

  1. Immetti il seguente comando per clonare il repository AWS Service Catalog Engine for Terraform.

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. Passa alla directory principale del repository clonato.

  3. Inserire il seguente comando. Questo installa il motore.

    run ./bin/bash/deploy-tre.sh -r

    La regione AWS impostata nel tuo profilo predefinito non viene utilizzata durante l'installazione automatizzata. Al contrario, fornisci la regione quando esegui questo comando.

DevOps ingegnere, amministratore AWS
AttivitàDescrizioneCompetenze richieste

Crea una connessione al GitHub repository.

  1. Accedi alla Console di gestione AWS, quindi apri la console Developer Tools. Puoi accedere alla console Developer Tools scegliendo un servizio come AWS CodePipeline CodeCommit, AWS o AWS CodeDeploy.

  2. Nel riquadro di navigazione a sinistra, scegli Impostazioni, quindi scegli Connessioni.

  3. Scegli Crea connessione.

  4. Seleziona il repository in cui conservi il codice sorgente Terraform. Ad esempio, puoi scegliere Bitbucket o Enterprise Server GitHub. GitHub

  5. Inserisci un nome per la connessione, quindi scegli Connetti.

  6. Quando richiesto, autentica il repository.

    Una volta completata l'autenticazione, la connessione viene creata e lo stato diventa attivo.

Amministratore AWS
AttivitàDescrizioneCompetenze richieste

Crea il prodotto Service Catalog.

  1. Apri la console AWS Service Catalog.

  2. Passa alla sezione Amministrazione, quindi seleziona Elenco prodotti.

  3. Scegli Crea prodotto.

  4. Nella pagina Crea prodotto nella sezione Dettagli del prodotto, scegli il Tipo di prodotto esterno. Service Catalog utilizza questo tipo di prodotto per supportare i prodotti Terraform Community Edition.

  5. Inserisci un nome e un proprietario per il prodotto Service Catalog.

  6. Seleziona Specificare il repository di codice utilizzando un CodeStar provider.

  7. Inserisci le seguenti informazioni per il tuo repository:

    • Connettiti al tuo provider utilizzando AWS CodeConnections: seleziona la connessione che hai creato in precedenza.

    • Repository: seleziona il repository.

    • Ramo: seleziona il ramo.

    • Percorso del file modello: scegli il percorso in cui è archiviato il file del modello di codice. Il nome del file deve terminare contar.gz.

  8. In Nome e descrizione della versione, fornisci informazioni sulla versione del prodotto.

  9. Scegli Crea prodotto.

Amministratore AWS

Crea un portfolio.

  1. Apri la console AWS Service Catalog.

  2. Vai alla sezione Amministrazione, quindi scegli Portfolios.

  3. Scegli Crea portfolio

  4. Immetti uno dei seguenti valori:

    • Portfolio name (Nome portafoglio) - Sample terraform

    • Descrizione del portafoglioSample portfolio for Terraform configurations

    • Proprietario: le tue informazioni di contatto, come l'email

  5. Scegli Crea.

Amministratore AWS

Aggiungi il prodotto Terraform al portafoglio.

  1. Apri la console AWS Service Catalog.

  2. Passa alla sezione Amministrazione, quindi seleziona Elenco prodotti.

  3. Seleziona il prodotto Terraform che hai creato in precedenza.

  4. Scegli Azioni, quindi scegli Aggiungi prodotto al portafoglio.

  5. Scegli il Sample terraform portfolio.

  6. Scegli Aggiungi prodotto al portafoglio.

Amministratore AWS

Creare la policy d'accesso.

  1. Apri la console AWS Identity and Access Management (IAM).

  2. Nel pannello di navigazione, seleziona Policies (Policy).

  3. Nel riquadro del contenuto seleziona Create policy (Crea policy).

  4. Scegli l'opzione JSON.

  5. Inserisci la policy JSON di esempio nella policy di accesso nella sezione Informazioni aggiuntive di questo modello.

  6. Seleziona Successivo.

  7. Nella pagina Rivedi e crea, nella casella Nome della policy, inserisciTerraformResourceCreationAndArtifactAccessPolicy.

  8. Scegli Crea policy.

Amministratore AWS

Crea una politica di fiducia personalizzata.

  1. Apri la console AWS Identity and Access Management (IAM).

  2. Nel pannello di navigazione, seleziona Roles (Ruoli).

  3. Selezionare Create role (Crea ruolo).

  4. In Tipo di entità affidabile, scegli Custom trust policy.

  5. Nell'editor di policy JSON, inserisci la policy JSON di esempio in Trust policy nella sezione Informazioni aggiuntive di questo modello.

  6. Seleziona Successivo.

  7. In Politiche di autorizzazione, scegli TerraformResourceCreationAndArtifactAccessPolicy quella che hai creato in precedenza.

  8. Seleziona Successivo.

  9. In Dettagli del ruolo, nella casella Nome ruolo, immettereSCLaunch-product

    Importante: il nome del ruolo deve iniziare conSCLaunch.

  10. Scegli Crea ruolo.

Amministratore AWS

Aggiungi un vincolo di lancio al prodotto Service Catalog.

  1. Accedi alla Console di gestione AWS come utente con autorizzazioni amministrative.

  2. Apri la console AWS Service Catalog.

  3. Nel pannello di navigazione, scegli Portfolios.

  4. Scegli il portfolio che hai creato in precedenza.

  5. Nella pagina dei dettagli del portfolio, scegli la scheda Vincoli, quindi scegli Crea vincolo.

  6. Per Prodotto, seleziona il prodotto Terraform che hai creato in precedenza.

  7. In Vincolo di avvio, per Metodo, scegli Inserisci il nome del ruolo.

  8. Nella casella Nome del ruolo, immettete. SCLaunch-product

  9. Seleziona CREATE.

Amministratore AWS

Concedi l'accesso al prodotto.

  1. Apri la console AWS Service Catalog.

  2. Nel pannello di navigazione, scegli Portfolios.

  3. Scegli il portfolio che hai creato in precedenza.

  4. Scegli la scheda Accesso, quindi scegli Concedi l'accesso.

  5. Scegli la scheda Ruoli, quindi seleziona il ruolo a cui devi avere accesso per distribuire questo prodotto.

  6. Selezionare Concedi l'accesso.

Amministratore AWS

Avvia il prodotto.

  1. Accedi alla Console di gestione AWS come utente con le autorizzazioni per distribuire il prodotto Service Catalog.

  2. Apri la console AWS Service Catalog.

  3. Nel pannello di navigazione, scegli Prodotti.

  4. Scegli il prodotto che hai creato in precedenza, quindi scegli Avvia prodotto.

  5. Inserisci il nome di un prodotto e definisci i parametri richiesti.

  6. Scegli Launch product.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Convalida la distribuzione.

Esistono due macchine a stati AWS Step Functions per il flusso di lavoro di provisioning del Service Catalog:

  • ManageProvisionedProductStateMachine—Service Catalog richiama questa macchina a stati durante il provisioning di un nuovo prodotto Terraform e durante l'aggiornamento di un prodotto fornito Terraform esistente.

  • TerminateProvisionedProductStateMachine—Service Catalog richiama questa macchina a stati quando termina un prodotto fornito da Terraform esistente.

Si controllano i registri della macchina a stati per confermare che il ManageProvisionedProductStateMachine prodotto è stato fornito.

  1. Accedi alla Console di gestione AWS, quindi apri la console AWS Step Functions.

  2. Nel riquadro di navigazione a sinistra, scegli Macchine a stati.

  3. ScegliManageProvisionedProductStateMachine.

  4. Nell'elenco Esecuzioni, inserite l'ID del prodotto assegnato per individuare l'esecuzione.

    Nota: i nomi dei bucket di backend dei file di stato iniziano con. sc-terraform-engine-state-

  5. Verifica che tutte le risorse richieste siano state create nell'account.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Eliminare i prodotti forniti.

  1. Accedi alla Console di gestione AWS come utente con le autorizzazioni per distribuire il prodotto Service Catalog.

  2. Apri la console AWS Service Catalog.

  3. Nella barra di navigazione a sinistra, scegli Provisioned products.

  4. Seleziona il prodotto che hai creato.

  5. Nell'elenco Azioni, scegli Termina.

  6. Nella casella di testo di conferma, inserisciterminate, quindi scegli Termina il prodotto fornito.

  7. Ripeti questi passaggi per terminare tutti i prodotti forniti.

DevOps ingegnere

Rimuovi AWS Service Catalog Engine per Terraform.

  1. Accedi alla Console di gestione AWS come utente con autorizzazioni amministrative.

  2. Apri la console Amazon S3.

  3. Nel pannello di navigazione, scegli Bucket.

  4. Seleziona il sc-terraform-engine-logging-XXXX bucket.

  5. Scegli Vuoto.

  6. Ripeti i passaggi da 4 a 5 per i seguenti bucket:

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. Apri la CloudFormation console AWS e verifica di trovarti nella regione AWS corretta.

  8. Nella barra di navigazione a sinistra, scegli Stacks.

  9. SelezionaSAM-TRE, quindi scegli Elimina. Attendi che lo stack sia stato eliminato.

  10. SelezionaBootstrap-TRE, quindi scegli Elimina. Attendi che lo stack sia stato eliminato.

Amministratore AWS

Risorse correlate

Documentazione AWS

Documentazione Terraform

Informazioni aggiuntive

Politica di accesso

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }

Policy di trust

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }