Comment provisionner une gouttelette Digitalocean à l'aide de Powershell 7
PowerShell est un shell et un langage de programmation en croissance rapide qui est désormais multiplateforme et simple à utiliser. En combinant PowerShell avec l'API DigitalOcean, nous pouvons rapidement provisionner des ressources, telles que des machines virtuelles, appelées Droplets, à partir de scripts de fonctions.
Dans cet article, nous explorons comment tirer parti de l'API REST DigitalOcean avec PowerShell pour déployer une droplet dans l'environnement existant.
Sommaire
Installation de PowerShell Core
Si vous exécutez un système Windows, vous pouvez disposer de la version précédente de PowerShell connue sous le nom de Windows PowerShell. Si vous avez Linux, vous devrez installer PowerShell pour vous assurer que nous pouvons exécuter les commandes et les scripts nécessaires. Suivez ce lien pour obtenir des instructions sur la façon de procéder.
https://github.com/PowerShell/PowerShell/tree/master/docs/learning-powershell
L'un des avantages de PowerShell 7 est qu'il peut être installé côte à côte sur les systèmes Windows et n'affectera pas l'environnement Windows PowerShell existant. De cette façon, il est facile de démarrer et de ne casser aucun script existant.
Créer des clés d'API à partir de DigitalOcean
Pour que Terraform communique avec DigitalOcean, nous devons générer des clés API à utiliser avec le fournisseur DigitalOcean. Les étapes suivantes expliquent comment créer une nouvelle clé API spécifiquement pour une utilisation avec Terraform. Vous pouvez utiliser d'autres clés API, mais il est recommandé de ne pas réutiliser les clés, si possible, pour désactiver facilement l'accès si nécessaire.
- Connectez-vous au panneau de contrôle DigitalOcean.
- Accédez à la section API.
- Cliquez sur «Générer un nouveau jeton».
- Saisissez un nom de jeton et accordez-lui les privilèges de lecture et d'écriture.
- Copiez la clé API, car vous ne la verrez plus. Nous l'utiliserons ensuite pour Terraform.
API REST de DigitalOcean
De nombreuses informations se trouvent dans la documentation de l'API REST de DigitalOcean, mais nous nous concentrons sur les appels d'authentification et de création de gouttelettes. Pour s'authentifier, nous avons besoin des éléments suivants, tirés de la documentation. Cela se fait via OAuth, qui remplace un nom d'utilisateur et un mot de passe. Ce jeton doit donc être bien protégé car il permettra un accès complet à un compte DigitalOcean. Les en-têtes suivants sont nécessaires pour une authentification correcte:
Authorization: Bearer digitaloceanapitoken
Content-Type: application/json
Sans ces en-têtes, l'API ne pourra pas s'authentifier et elle ne comprendra pas non plus comment analyser les données entrant.
Création de la configuration JSON
Dans cet exemple, nous mettons à disposition une simple ressource de droplet. Nous voulons utiliser leur plan disponible le moins cher dans le NYC1
centre de données et ajoutez quelques options qui rendront la gouttelette plus flexible à utiliser à l'avenir.
- Image de gouttelette:
ubuntu-18.04-x64
Parce que nous devons transmettre notre configuration via JSON, nous pouvons formater en utilisant ce qui suit:
$JSON = @{
"name" = "test-web-vm"
"region" = "nyc1"
"size" = "s-1vcpu-1gb"
"image" = "ubuntu-18-04-x64"
"ipv6" = $true
"private_networking" = $true
"monitoring" = $true
} | ConvertTo-JSON -Compress
Les commandes supplémentaires que nous ajoutons ici concernent la surveillance, ipv6 et les réseaux privés. La surveillance signifie que vous disposerez de mesures, telles que le processeur et la mémoire, à partir de la console cloud DigitalOcean. Vous pouvez ensuite définir des alertes sur ces mesures, ce qui est très utile pour l'avenir. IPv6 signifie que votre gouttelette sera accessible à partir d'IPv6, ce qui aide à pérenniser vos gouttelettes. Enfin, le réseautage privé signifie que votre gouttelette recevra un 10.x.x.x
adresse accessible par d'autres gouttelettes mais pas par l'internet public.
Il existe une autre capacité très utile: les données utilisateur. Pour Linux, cela vous permet d'exécuter certaines commandes sur l'approvisionnement de la machine virtuelle, telles que la mise à jour des packages. Nous pouvons inclure ce droit dans la configuration JSON, en ajoutant cet attribut sur:
$JSON = @{
"name" = "test-web-vm"
"region" = "nyc1"
"size" = "s-1vcpu-1gb"
"image" = "ubuntu-18-04-x64"
"ipv6" = $true
"private_networking" = $true
"monitoring" = $true
"user_data" = "#cloud-confignpackage_update: truenpackage_upgrade: true"
} | ConvertTo-JSON -Compress
Lorsque vous remplissez une configuration utilisateur, vous remarquerez peut-être qu'elle peut sembler un peu étrange. Vous devez faire attention aux sauts de ligne et aux guillemets doubles pour éviter de casser la configuration JSON.
Provisionnement de la gouttelette
Maintenant que nous avons créé notre configuration, nous allons déployer la droplet. Pour ce faire, nous devons simplement exécuter l'applet de commande Invoke-RestMethod
dans PowerShell en utilisant notre configuration:
$JSON = @{
"name" = "test-web-vm"
"region" = "nyc1"
"size" = "s-1vcpu-1gb"
"image" = "ubuntu-18-04-x64"
"ipv6" = true
"private_networking" = true
"monitoring" = true
"user_data" = "#cloud-confignpackage_update: truenpackage_upgrade: true"
} | ConvertTo-JSON -Compress
$Params = @{
"URI" = "https://api.digitalocean.com/v2/droplets"
"Method" = "POST"
"Body" = $JSON
"Authentication" = "OAuth"
"Token" = ('digitaloceanapitoken' | ConvertTo-SecureString -AsPlainText)
"ErrorAction" = 'Stop'
"Headers" = @{
"Content-Type" = "application/json"
}
}
Invoke-RestMethod @Params
Après cela, nous devrions obtenir un message de réussite de la console, avec un code retour de 200 qui indique que la création de gouttelettes a réussi.
Après être entré dans la console, vous constaterez que le droplet apparaît maintenant comme prévu avec toutes les options de configuration définies. La création peut prendre quelques instants, mais l'une des caractéristiques de DigitalOcean est la vitesse de création de Droplet.
Options additionelles
Il y a quelques options supplémentaires que vous voudrez peut-être appliquer, selon les circonstances. Voici quelques paramètres qui peuvent rendre le déploiement d'une gouttelette encore plus facile:
Il est recommandé de ne pas autoriser l'accès SSH direct à l'aide d'un root
mot de passe. Par conséquent, fournir des clés SSH lors du provisionnement est une méthode beaucoup plus sécurisée. DigitalOcean propose des sauvegardes, moyennant un coût, et vous pouvez l'activer à partir d'un appel API. De plus, les volumes DigitalOcean peuvent être attachés à une gouttelette pour permettre le stockage de blocs mobiles. Enfin, le balisage vous permet de classer et d'appliquer certaines stratégies, telles que les pare-feu à une droplet.
Emballer
Comme vous pouvez le constater en combinant PowerShell avec l'API DigitalOcean, nous pouvons rapidement et facilement provisionner une droplet. Au fur et à mesure que vous lisez la documentation, vous constaterez peut-être que vous pouvez faire beaucoup plus pour que cela fonctionne efficacement et vous permettre d'intégrer PowerShell dans vos configurations.