1. What are the cloud infrastructure services and IaaS solutions available on Exoscale that comply with European data sovereignty regulations in TypeScript


    Exoscale is a cloud service provider which focuses specifically on providing services that comply with European data sovereignty regulations. When you are looking to deploy infrastructure on Exoscale using Pulumi, you will interact with a number of different services that they provide.

    The most common services you might use include:

    • Compute instances (VMs): Virtual machines which can be used to run applications and services.
    • Network configurations: This involves setting up networks and related settings such as ACLs and firewall rules.
    • Databases: Managed database services to support applications.
    • Storage solutions: Options for storing and managing data.

    Below is a TypeScript program using Pulumi to create a basic Exoscale cloud infrastructure consisting of a compute instance within a network, and a public SSH key for access. This setup is within the scope of IaaS and follows the data sovereignty regulations as Exoscale is a Swiss company operating in European datacenters.

    import * as exoscale from "@pulumi/exoscale"; // Create an SSH key resource to access the Exoscale instances securely const sshKey = new exoscale.SSHKey("my-key", { name: "my-deployment-key", publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...", // Replace with your actual SSH public key }); // Create a network that your VMs will use to communicate const network = new exoscale.Network("my-network", { name: "my-vpc-network", zone: "ch-dk-2", // A zone in Switzerland, choose the zone appropriate for your sovereignty needs displayText: "My VPC Network", }); // Create a compute instance (VM) const server = new exoscale.ComputeInstance("my-server", { name: "my-instance", zone: "ch-dk-2", // Ensure this is the same zone as your network for compatibility type: "medium", // The type of the instance, adjust as needed templateId: "<template-id>", // Use an appropriate template ID for your VM diskSize: 10, // The disk size in GB sshKey: sshKey.name, networkInterfaces: [{ networkId: network.id, ipAddress: "", // Assign a private IP address }], userData: `#cloud-config`, // Replace with any startup scripts you need }); // Output the public IP for SSH access export const ipAddress = server.publicIp;

    The above script is a basic declaration of what you would write to set up a new environment on Exoscale. Here's what it does:

    • SSH Key (SSHKey): It creates a public SSH key which is necessary for securely accessing the compute instances.
    • Network (Network): Sets up a new network where your VMs will be able to communicate with each other.
    • Compute Instance (ComputeInstance): Launches a new VM within the specified zone and network, attaches the SSH key for access, and defines the instance type and disk size.

    Replace the placeholder values (e.g., <template-id> and the SSH public key) with your actual details. The zone field has been set to ch-dk-2 which is one of Exoscale's data centers in Switzerland. This assumes you are considering Switzerland's data laws to comply with European data sovereignty, but you should choose the Exoscale zone that aligns with your specific compliance needs.

    Remember that to use the capabilities shown above, you'll need to have Pulumi installed, have an account with Exoscale, and configure the Exoscale provider with your credentials. Pulumi will automate the deployment and operations of the above infrastructure on Exoscale.

    For more information on using Exoscale with Pulumi and details on the library, you can visit:

    To run the Pulumi program, save it in a file with a .ts suffix (e.g., index.ts), ensure you have the @pulumi/exoscale package installed, and execute it using pulumi up. Remember to review the preview that Pulumi provides before confirming the action. This will deploy the infrastructure as coded above.