Fornisci un prodotto Terraform 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à.

Fornisci un prodotto Terraform AWS Service Catalog utilizzando un repository di codice

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

Ambiente: PoC o pilota

Tecnologie: infrastruttura; DevOps

Carico di lavoro: tutti gli altri carichi di lavoro

AWSservizi: AWS Service Catalog; Amazon EC2

Riepilogo

AWS Service Catalog supporta il provisioning self-service con governance per le configurazioni HashiCorp Terraform. Se utilizzi Terraform, puoi utilizzare Service Catalog come strumento unico per organizzare, governare e distribuire le tue configurazioni Terraform su larga scala. AWS 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 utenti e il tagging. Account AWS 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 AWS le risorse 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 aggiungervi AWS Launch Wizard prodotti utilizzando Terraform.

Di seguito sono riportati i vantaggi di questa soluzione:

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

  • È possibile configurare una connessione al repository in Service Catalog, ad esempio a GitHub o GitLab. È possibile apportare modifiche al prodotto direttamente tramite il repository.

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

Prerequisiti e limitazioni

Prerequisiti

Architettura

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 AWS le risorse utilizzando la configurazione Terraform. Possono scegliere quale versione del prodotto distribuire.

Strumenti

Servizi AWS

  • AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

  • AWS Service Catalogti aiuta a gestire centralmente i cataloghi dei servizi IT approvati. 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.

Deposito 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 migliori pratiche relative alla concessione dei privilegi minimi e alla sicurezza nella documentazione AWS Identity and Access Management ()IAM.

Epiche

AttivitàDescrizioneCompetenze richieste

(Facoltativo) Installa Docker.

Se desideri eseguire AWS Lambda le funzioni 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 AWS Service Catalog motore per Terraform.

  1. Immettere 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. Vai alla directory principale del repository clonato.

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

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

    Il valore Regione AWS impostato nel profilo predefinito non viene utilizzato durante l'installazione automatizzata. Al contrario, si fornisce la regione quando si esegue questo comando.

DevOps ingegnere, AWS amministratore
AttivitàDescrizioneCompetenze richieste

Crea una connessione al GitHub repository.

  1. Accedi a AWS Management Console, quindi apri la console Developer Tools. Puoi accedere alla console Developer Tools scegliendo un servizio come AWS CodePipeline 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.

AWSamministratore
AttivitàDescrizioneCompetenze richieste

Crea il prodotto Service Catalog.

  1. Apri la AWS Service Catalog console.

  2. Vai alla sezione Amministrazione, quindi scegli 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 creata 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.

AWSamministratore

Crea un portfolio.

  1. Apri la AWS Service Catalog console.

  2. Vai alla sezione Amministrazione, quindi scegli Portafogli.

  3. Scegli Crea portfolio.

  4. Immetti uno dei seguenti valori:

    • Portfolio name (Nome portafoglio) - Sample terraform

    • Descrizione del portafoglio: Sample portfolio for Terraform configurations

    • Proprietario: le tue informazioni di contatto, ad esempio un indirizzo e-mail

  5. Scegli Create (Crea) .

AWSamministratore

Aggiungi il prodotto Terraform al portafoglio.

  1. Apri la AWS Service Catalog console.

  2. Vai alla sezione Amministrazione, quindi scegli 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.

AWSamministratore

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. Scegliete l'JSONopzione.

  5. Inserisci la JSON politica di esempio in Politica di accesso nella sezione Informazioni aggiuntive di questo modello.

  6. Scegli Next (Successivo).

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

  8. Scegli Create Policy (Crea policy).

AWSamministratore

Crea una politica di fiducia personalizzata.

  1. Apri la IAMconsole.

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

  3. Selezionare Create role (Crea ruolo).

  4. In Tipo di entità affidabile, scegli Politica di attendibilità personalizzata.

  5. Nell'editor delle JSON politiche, inserisci la JSON politica di esempio in Politica di fiducia nella sezione Informazioni aggiuntive di questo modello.

  6. Scegli Next (Successivo).

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

  8. Scegli Next (Successivo).

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

    Importante: il nome del ruolo deve iniziare conSCLaunch.

  10. Scegliere Crea ruolo.

AWSamministratore

Aggiungi un vincolo di lancio al prodotto Service Catalog.

  1. Accedi AWS Management Console come utente con autorizzazioni amministrative.

  2. Apri la AWS Service Catalog console.

  3. Nel riquadro di navigazione, scegli Portafogli.

  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 ruolo, immettete. SCLaunch-product

  9. Seleziona CREATE.

AWSamministratore

Concedi l'accesso al prodotto.

  1. Apri la AWS Service Catalog console.

  2. Nel riquadro di navigazione, scegli Portafogli.

  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.

AWSamministratore

Avvia il prodotto.

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

  2. Apri la AWS Service Catalog console.

  3. Nel riquadro 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 AWS Step Functions stati 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 prodotto è ManageProvisionedProductStateMachine stato fornito.

  1. Accedere a AWS Management Console, quindi aprire la AWS Step Functions console.

  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 AWS Management Console come utente con le autorizzazioni per distribuire il prodotto Service Catalog.

  2. Apri la AWS Service Catalog console.

  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 il AWS Service Catalog motore per Terraform.

  1. Accedi AWS Management Console come utente con autorizzazioni amministrative.

  2. Apri la console Amazon Simple Storage Service (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 AWS CloudFormation console, quindi verifica di essere nella posizione corretta. Regione AWS

  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.

AWSamministratore

Risorse correlate

AWS documentazione

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*" ] } } } ] }