> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurazione della VPC di Azure

> Guida alla configurazione di Devin nella tua VPC di Azure

<div id="devin-azure-vpc-deployment-guide">
  # **Guida alla distribuzione di Devin in Azure VPC**
</div>

Questa guida descrive il processo per distribuire Devin all'interno del tuo ambiente Azure Virtual Private Cloud (VPC), consentendo l'accesso alle risorse protette dal firewall aziendale.

<Tabs>
  <Tab title="Configurazione semplice (con Terraform)">
    ## Distribuzione con Terraform (consigliata)

    La distribuzione con Terraform è l'approccio consigliato per configurare Devin nella tua VPC Azure. Questo metodo automatizzato garantisce un provisioning dell'infrastruttura coerente e ripetibile, con il minimo di configurazione manuale.

    <Frame>
      <img src="https://mintcdn.com/cognitionai/EwxwHovo_Hmecwcd/images/azure-terraform-workflow.png?fit=max&auto=format&n=EwxwHovo_Hmecwcd&q=85&s=3acc8606313a5652fd9984942cc67e92" alt="Flusso di lavoro della distribuzione con Terraform" width="2272" height="1278" data-path="images/azure-terraform-workflow.png" />
    </Frame>

    ### Prerequisiti

    Prima di iniziare il processo di distribuzione con Terraform, assicurati di disporre di:

    * Una VPC configurata per Devin (puoi usare una VPC esistente o crearne una nuova)
    * Un account Azure con autorizzazioni per:
      * creare macchine virtuali
      * creare account di archiviazione nella tua regione
    * Un account Azure in grado di supportare istanze con almeno 70 CPU virtuali
    * Terraform (versione 1.0 o successiva) installato

    ### Processo di distribuzione passo per passo

    <Steps>
      <Step title="Raccogliere le informazioni sull'ambiente Azure">
        Raccogli le seguenti informazioni, che saranno necessarie per la configurazione di Terraform:

        * ID sottoscrizione Azure (formato GUID)
        * ID VPC (nome della Virtual Network)
        * Due nomi di subnet:
          * subnet-1
          * subnet-2

        **Comandi Azure CLI utili:**

        ```bash theme={null}
        # Elenca le tue Virtual Network
        az network vnet list --query "[].{Name:name, ResourceGroup:resourceGroup}" -o table

        # Elenca le subnet in una specifica Virtual Network
        az network vnet subnet list --vnet-name <your-vnet-name> --resource-group <your-resource-group> --query "[].{Name:name, AddressPrefix:addressPrefix}" -o table
        ```
      </Step>

      <Step title="Configurare l'accesso del firewall">
        <Tabs>
          <Tab title="Firewall dei dispositivi utente">
            Assicurati che i tuoi sistemi di sicurezza endpoint (dispositivi utente che accederanno a Devin) consentano l'accesso a:

            * \*.devin.ai
            * \*.devinenterprise.com
            * \*.devinapps.com
          </Tab>

          <Tab title="Firewall della VPC">
            Assicurati che i gruppi di sicurezza della tua VPC consentano l'accesso a:

            * frp-server-0.devin.ai
            * static.devin.ai
            * api.devin.ai
          </Tab>
        </Tabs>

        <Frame>
          <img src="https://mintcdn.com/cognitionai/SST7qBOGO28X2sVc/images/azure-waf.png?fit=max&auto=format&n=SST7qBOGO28X2sVc&q=85&s=3417b815ca3e89a0702b772879fe803a" alt="Configurazione del firewall Azure" width="3440" height="1618" data-path="images/azure-waf.png" />
        </Frame>
      </Step>

      <Step title="Ottenere la configurazione Terraform e il token di autenticazione">
        Contatta Cognition per ricevere:

        1. Un token di autenticazione per eseguire il pull dell'immagine dell'hypervisor
        2. I file di configurazione Terraform personalizzati per il tuo ambiente

        Una volta che avrai condiviso le informazioni sul tuo ambiente (dallo Step 1), ti forniremo queste risorse.
      </Step>

      <Step title="Eseguire lo script Terraform">
        Possiamo pianificare una chiamata per eseguire questo step insieme. Il processo prevede:

        1. Estrarre i file di configurazione Terraform in una directory sulla tua macchina locale:
           ```bash theme={null}
           mkdir -p ~/devin-terraform && cd ~/devin-terraform
           # Estrai i file ricevuti da Cognition
           ```

        2. Inizializzare l'ambiente Terraform:
           ```bash theme={null}
           terraform init
           ```

        3. Verificare le modifiche di infrastruttura pianificate:
           ```bash theme={null}
           terraform plan
           ```

        4. Applicare la configurazione per effettuare il provisioning dell'infrastruttura:
           ```bash theme={null}
           terraform apply
           ```

        5. Confermare le modifiche quando richiesto.

        <Note>
          Gli script Terraform configureranno tutti i componenti necessari, incluse macchine virtuali, account di archiviazione, gruppi di sicurezza, ruoli IAM e la registrazione dell'hypervisor.
        </Note>
      </Step>

      <Step title="Avviare la prima sessione con Devin">
        Dopo che lo script Terraform è stato completato con successo, lavoreremo insieme per:

        1. Verificare che le risorse siano state create nel tuo portale Azure
        2. Eseguire una prima sessione con Devin per verificare la connettività ai servizi richiesti
        3. Diagnosticare e risolvere eventuali problemi con il supporto del team Cognition
      </Step>
    </Steps>
  </Tab>

  <Tab title="Configurazione avanzata (manuale)">
    ## Distribuzione Manuale

    Se il deployment di Terraform non è possibile nel vostro ambiente, questa sezione descrive i passaggi manuali necessari per effettuare il provisioning dell'infrastruttura.

    ### Requisiti di rete

    La configurazione manuale dei componenti di rete è obbligatoria. Per assistenza, consultare le risorse fornite.

    ### Passaggi per il Deployment

    <Steps>
      <Step title="Concedi il consenso di amministratore all'app Devin Enterprise">
        Apri il seguente URL nel browser:

        ```
        https://login.microsoftonline.com/organizations/adminconsent?client_id=854d72e1-0257-44f3-9df1-4ed0cc8b89a7
        ```

        <Warning>
          Assicurati di selezionare il profilo Azure che dispone delle autorizzazioni di amministratore Entra ID (Azure AD).
          In caso contrario verrai reindirizzato alla seguente pagina:

          <img src="https://mintcdn.com/cognitionai/a0js040y87FuBerW/images/Azure-VPC/declined-entra-app.png?fit=max&auto=format&n=a0js040y87FuBerW&q=85&s=2915965b97950758797a70f23a7d1d74" alt="Entra-Approval" width="3410" height="1644" data-path="images/Azure-VPC/declined-entra-app.png" />
        </Warning>

        Puoi verificare queste autorizzazioni con il seguente comando:

        ```
        az account show
        az ad user get-member-groups --id <user@example.com> --security-enabled-only
        ```

        Una volta concesso il consenso, procedi con i passaggi seguenti. Puoi verificarlo controllando le applicazioni nel tuo tenant di Azure.

        ```
        az ad sp list --filter "appId eq '854d72e1-0257-44f3-9df1-4ed0cc8b89a7'" --query "[].{Name:displayName, AppId:appId, ObjectId:id}"
        ```
      </Step>

      <Step title="Configurazione delle istanze per l'esecuzione delle VM">
        Devin richiede un'istanza host per eseguire **macchine virtuali isolate** per ogni sessione.

        #### **Requisiti dell'istanza**

        | Requirement          | Details                                                                              |
        | :------------------- | :----------------------------------------------------------------------------------- |
        | **Instance Type**    | Istanze che supportano la virtualizzazione (`Standard_L80as_v3`)                     |
        | **Operating System** | Ubuntu 24.04                                                                         |
        | **Instance Sizing**  | - 2 vCPU, 8GB RAM, 128GB Storage  <br /> - 8 vCPU, 32GB RAM, 128GB Storage           |
        | **Note**             | La dimensione dell'istanza determina il numero massimo di sessioni Devin simultanee. |
        | **Recommendation**   | Consigliamo `Standard_L80as_v3` come configurazione di base.                         |

        <Tip>
          Puoi scalare **orizzontalmente** aggiungendo più istanze host per aumentare la capacità di Devin.
        </Tip>

        #### **Regole del Security Group**

        | **Configuration**           | **Details**                                           |
        | :-------------------------- | :---------------------------------------------------- |
        | **VPC Setup**               | Configura la VPC e le regole del Security Group       |
        | **Required Firewall Rules** | **Accesso Internet in uscita sulla porta 443 verso:** |
        |                             | `frp-server-0.devin.ai`                               |
        |                             | `static.devin.ai`                                     |
        |                             | `api.devin.ai`                                        |

        <Warning>
          L'accesso generale a Internet è **fortemente consigliato**, ma non obbligatorio.
        </Warning>
      </Step>

      <Step title="Configurare l'archiviazione per le VM">
        Quando le **sessioni di Devin** vengono sospese, il loro stato viene **compresso e archiviato**.

        #### **2.1 Creare un Azure Storage Account**

        1. Nel **portale di Azure**, cerca e seleziona **Storage Accounts**.
        2. Fai clic su **+ Create**.
        3. Imposta i seguenti dettagli:
           * **Subscription**: seleziona la tua sottoscrizione
           * **Resource Group**: seleziona il resource group
           * **Storage Account Name**: inserisci

             ```
             devin${CUSTOMER_NAME}${REGION}
             ```

             *(Sostituisci `${CUSTOMER_NAME}` e `${REGION}` con i valori effettivi)*
           * **Region**: seleziona l’area geografica preferita
           * **Performance**: Standard
           * **Redundancy**: Zone-Redundant Storage (**ZRS**)
        4. Fai clic su **Review + Create**, quindi su **Create**.

                   <img src="https://mintcdn.com/cognitionai/a0js040y87FuBerW/images/Azure-VPC/createstorageaccount.png?fit=max&auto=format&n=a0js040y87FuBerW&q=85&s=0091acc3a90e3237079010eb728c3e52" alt="Customer-Data" width="1620" height="1698" data-path="images/Azure-VPC/createstorageaccount.png" />

        #### **2.2 Configurare l’accesso allo Storage Account e il CORS**

        1. Una volta creato, vai al tuo **Storage Account** → **Settings** → **Resource Sharing (CORS)**.
        2. Aggiungi una riga con i seguenti valori:
           * **Allowed Origins**: `*`
           * **Allowed Methods**: `GET`
           * **Allowed Headers**: `*`
        3. Fai clic su **Save**.
        4. Vai alla sezione **Access Control (IAM)**.
        5. Fai clic su **+ Add** e seleziona **Add role assignment**.
        6. Seleziona il ruolo **Storage Blob Data Contributor**.
        7. Assegna l’accesso a **User, group, or service principal**.
        8. Seleziona la Managed Identity creata nel passaggio successivo.
        9. Fai clic su **Review + assign**.
                   <img src="https://mintcdn.com/cognitionai/a0js040y87FuBerW/images/Azure-VPC/devincuststoragetest.png?fit=max&auto=format&n=a0js040y87FuBerW&q=85&s=e74d1f66db520817119051d8454f548b" alt="Devin-Storage-Identity" width="2826" height="1584" data-path="images/Azure-VPC/devincuststoragetest.png" />

        #### **2.3 Creare una Managed Identity**

        1. Nel **portale di Azure**, vai su **Managed Identities** e fai clic su **+ Create**.
        2. Imposta i seguenti dettagli:
           * **Subscription**: seleziona la tua sottoscrizione
           * **Resource Group**: seleziona il resource group in cui sono state create le **VM di Devin**
           * **Region**: seleziona l’area geografica in cui si trovano le **VM di Devin**
           * **Name**: `devin-vm-identity`
                     <img src="https://mintcdn.com/cognitionai/a0js040y87FuBerW/images/Azure-VPC/createazureusermanagedidentity.png?fit=max&auto=format&n=a0js040y87FuBerW&q=85&s=2debc3bb2185dd40ec7f7070a0ed2b03" alt="Customer-Data" width="3454" height="1516" data-path="images/Azure-VPC/createazureusermanagedidentity.png" />
        3. Fai clic su **Review + Assign**.
        4. Vai alla pagina della risorsa delle **VM di Devin** create in precedenza e, nella barra laterale, fai clic su **Security** → **Identity**.
        5. Seleziona la scheda **User Assigned** e fai clic su **Add User Assigned Managed Identity**.
        6. Cerca `devin-vm-identity` e fai clic su **Add**.
        7. Ripeti i passaggi **4–6** per ogni **nuova VM** creata.

                   <img src="https://mintcdn.com/cognitionai/a0js040y87FuBerW/images/Azure-VPC/managed-identity-vm.png?fit=max&auto=format&n=a0js040y87FuBerW&q=85&s=e47e9870c0db65b580f87ead5b20f080" alt="VM-identity" width="2282" height="1624" data-path="images/Azure-VPC/managed-identity-vm.png" />

        <Warning>
          Se stai configurando un set di scalabilità di VM, dovrai andare in "Security" --> "Identity" e non in IAM.
        </Warning>

        <Note>
          Una volta create queste risorse, fornisci a Cognition:

          * Il tuo **Azure Subscription ID**
          * Il **nome dello Storage Account**
          * La **Virtual Network e le Subnet** per il deployment
          * Il **nome del Network Security Group**
          * Eventuali **tag** per le risorse correlate a Devin
        </Note>
      </Step>

      <Step title="Registrare l'host runner">
        Esegui il comando seguente:

        ```bash theme={null}
        curl -sSL https://api.devin.ai/hypervisor/setup?token=AUTH_TOKEN -o setup.sh && bash setup.sh
        ```

        <Note>
          Ti forniremo l'**AUTH\_TOKEN** separatamente. Quando la configurazione sarà completa, **Devin** sarà pronto per avviare sessioni nel tuo ambiente **VPC**.
        </Note>

        <Warning>
          Assicurati che la tua macchina virtuale non abbia un'identità di sistema predefinita. Inoltre, non deve richiedere un TTY o l'uso di sudo in modalità interattiva; contatta il team Cognition se lo richiede.
        </Warning>
      </Step>

      <Step title="Firewall: Requisiti">
        Se i dispositivi degli utenti sono protetti da un firewall, aggiungi alla allowlist i seguenti URL:

        * `*.devin.ai`
        * `*.devinenterprise.com`
        * `*.devinapps.com`
                  <br />

        **Esempio di regola Azure WAF**

        <img src="https://mintcdn.com/cognitionai/SST7qBOGO28X2sVc/images/azure-waf.png?fit=max&auto=format&n=SST7qBOGO28X2sVc&q=85&s=3417b815ca3e89a0702b772879fe803a" alt="Azure-Firewall" width="3440" height="1618" data-path="images/azure-waf.png" />

        <img src="https://mintcdn.com/cognitionai/SST7qBOGO28X2sVc/images/azure-waf-home.png?fit=max&auto=format&n=SST7qBOGO28X2sVc&q=85&s=53aa1da36ca67c8c9507e2e029ecd430" alt="Azure-Home-Firewall" width="3436" height="1514" data-path="images/azure-waf-home.png" />
      </Step>

      <Step title="Checklist finale">
        Assicurati di aver completato e verificato quanto segue:

        * [ ] Concesso il consenso dell'amministratore all'app Devin Enterprise.
        * [ ] Configurato le istanze host necessarie e verificato il dimensionamento delle istanze.
        * [ ] Creato e configurato l'Azure Storage Account con convenzioni di denominazione appropriate.
        * [ ] Configurato CORS e IAM per lo Storage Account.
        * [ ] Creata e assegnata la Managed Identity a tutte le VM Devin interessate.
        * [ ] Registrato correttamente l'Host Runner.
        * [ ] Verificato le regole del firewall sia sui dispositivi degli utenti sia all'interno della VPC.

        Dopo la verifica, condividi le informazioni richieste (ID della sottoscrizione, nome dello storage account, dettagli di rete, ecc.) con il team di Cognition.
      </Step>
    </Steps>
  </Tab>
</Tabs>
