Multy ist ein Open-Source-Tool, mit dem Ihre Infrastruktur mithilfe einer Cloud-Agnostic-API tragbar macht. Sie schreiben Ihre Cloud-Agnostic-Konfiguration einmal und multy wird sie für die von Ihnen ausgewählten Wolken bereitgestellt.
Mit Multy müssen Sie sich keine Sorgen darüber machen, wie sich Ressourcen in den verschiedenen Wolkenanbietern unterschiedlich verhalten. Wir werden die Nuancen jeder Cloud so abstrahieren, dass das Verschieben Ihrer Infrastruktur zwischen Wolken durchgeführt wird, indem einfach der cloud -Parameter geändert wird.
Versuchen wir, eine einfache virtuelle Maschine mit dem Multy Terraform -Anbieter in AWS und Azure einzusetzen
variable "clouds" {
type = set ( string )
default = [ " aws " , " azure " ]
}
resource "multy_virtual_network" "vn" {
for_each = var . clouds
cloud = each . key
name = " multy_vn "
cidr_block = " 10.0.0.0/16 "
location = " eu_west_1 "
}
resource "multy_subnet" "subnet" {
for_each = var . clouds
name = " multy_subnet "
cidr_block = " 10.0.10.0/24 "
virtual_network_id = multy_virtual_network . vn [ each . key ] . id
}
resource "multy_virtual_machine" "vm" {
for_each = var . clouds
name = " test_vm "
size = " general_micro "
image_reference = {
os = " ubuntu "
version = " 20.04 "
}
subnet_id = multy_subnet . subnet [ each . key ] . id
cloud = each . key
location = " eu_west_1 "
} Durch die Verwendung der Multy Cloud-Agnostic-API können wir einfach den cloud Parameter ändern, um eine Ressource von einer Cloud in eine andere zu verschieben.
Wenn wir dies mit den jeweiligen Cloud -Terraform -Anbietern bereitstellen würden, müssten wir zunächst verstehen, wie Ressourcen wie aws_vpc und azurerm_virtual_network verhalten und wie sie sich unterscheiden. Dann müssten wir die gleiche Infrastrukturkonfiguration zweimal definieren, einen für AWS und eine für Azure.
// terraform: 190 lines
resource "aws_iam_instance_profile" "multy_vm_ube3b_r10" {
name = " multy_vm_ube3b_r10-vm-role "
role = aws_iam_role . multy_vm_ube3b_r10 . name
provider = " aws.eu-west-1 "
}
resource "aws_iam_role" "multy_vm_ube3b_r10" {
tags = { " Name " = " test_vm " }
name = " multy_vm_ube3b_r10-vm-role "
assume_role_policy = " { " Statement " :[{ " Action " :[ " sts:AssumeRole " ], " Effect " : " Allow " , " Principal " :{ " Service " : " ec2.amazonaws.com " }}], " Version " : " 2012-10-17 " } "
provider = " aws.eu-west-1 "
}
data "aws_ami" "multy_vm_ube3b_r10" {
owners = [ " 099720109477 " ]
most_recent = true
filter {
name = " name "
values = [ " ubuntu*-20.04-amd64-server-* " ]
}
filter {
name = " root-device-type "
values = [ " ebs " ]
}
filter {
name = " virtualization-type "
values = [ " hvm " ]
}
provider = " aws.eu-west-1 "
}
resource "aws_instance" "multy_vm_ube3b_r10" {
tags = { " Name " = " test_vm " }
ami = data . aws_ami . multy_vm_ube3b_r10 . id
instance_type = " t2.micro "
subnet_id = aws_subnet . multy_vn_ube3b_r8-1 . id
iam_instance_profile = aws_iam_instance_profile . multy_vm_ube3b_r10 . id
provider = " aws.eu-west-1 "
}
resource "azurerm_network_interface" "multy_vm_ube3b_r9" {
resource_group_name = azurerm_resource_group . vm-nkum-rg . name
name = " test_vm "
location = " northeurope "
ip_configuration {
name = " internal "
private_ip_address_allocation = " Dynamic "
subnet_id = azurerm_subnet . multy_vn_ube3b_r7 . id
primary = true
}
}
resource "random_password" "multy_vm_ube3b_r9" {
length = 16
special = true
upper = true
lower = true
number = true
}
resource "azurerm_linux_virtual_machine" "multy_vm_ube3b_r9" {
resource_group_name = azurerm_resource_group . vm-nkum-rg . name
name = " test_vm "
location = " northeurope "
size = " Standard_B1s "
network_interface_ids = [ azurerm_network_interface . multy_vm_ube3b_r9 . id ]
os_disk {
caching = " None "
storage_account_type = " Standard_LRS "
}
admin_username = " adminuser "
admin_password = random_password . multy_vm_ube3b_r9 . result
source_image_reference {
publisher = " Canonical "
offer = " 0001-com-ubuntu-server-focal "
sku = " 20_04-lts "
version = " latest "
}
disable_password_authentication = false
identity {
type = " SystemAssigned "
}
computer_name = " testvm "
zone = " 1 "
}
resource "aws_vpc" "multy_vn_ube3b_r4" {
tags = { " Name " = " multy_vn " }
cidr_block = " 10.0.0.0/16 "
enable_dns_hostnames = true
provider = " aws.eu-west-1 "
}
resource "aws_internet_gateway" "multy_vn_ube3b_r4" {
tags = { " Name " = " multy_vn " }
vpc_id = aws_vpc . multy_vn_ube3b_r4 . id
provider = " aws.eu-west-1 "
}
resource "aws_default_security_group" "multy_vn_ube3b_r4" {
tags = { " Name " = " multy_vn " }
vpc_id = aws_vpc . multy_vn_ube3b_r4 . id
ingress {
protocol = " -1 "
from_port = 0
to_port = 0
self = true
}
egress {
protocol = " -1 "
from_port = 0
to_port = 0
self = true
}
provider = " aws.eu-west-1 "
}
resource "aws_vpc" "multy_vn_ube3b_r5" {
tags = { " Name " = " multy_vn " }
cidr_block = " 10.0.0.0/16 "
enable_dns_hostnames = true
provider = " aws.eu-west-1 "
}
resource "aws_internet_gateway" "multy_vn_ube3b_r5" {
tags = { " Name " = " multy_vn " }
vpc_id = aws_vpc . multy_vn_ube3b_r5 . id
provider = " aws.eu-west-1 "
}
resource "aws_default_security_group" "multy_vn_ube3b_r5" {
tags = { " Name " = " multy_vn " }
vpc_id = aws_vpc . multy_vn_ube3b_r5 . id
ingress {
protocol = " -1 "
from_port = 0
to_port = 0
self = true
}
egress {
protocol = " -1 "
from_port = 0
to_port = 0
self = true
}
provider = " aws.eu-west-1 "
}
resource "azurerm_virtual_network" "multy_vn_ube3b_r6" {
resource_group_name = azurerm_resource_group . vn-nkum-rg . name
name = " multy_vn "
location = " northeurope "
address_space = [ " 10.0.0.0/16 " ]
}
resource "azurerm_route_table" "multy_vn_ube3b_r6" {
resource_group_name = azurerm_resource_group . vn-nkum-rg . name
name = " multy_vn "
location = " northeurope "
route {
name = " local "
address_prefix = " 0.0.0.0/0 "
next_hop_type = " VnetLocal "
}
}
resource "azurerm_subnet" "multy_vn_ube3b_r7" {
resource_group_name = azurerm_resource_group . vn-nkum-rg . name
name = " multy_subnet "
address_prefixes = [ " 10.0.10.0/24 " ]
virtual_network_name = azurerm_virtual_network . multy_vn_ube3b_r6 . name
}
resource "azurerm_subnet_route_table_association" "multy_vn_ube3b_r7" {
subnet_id = azurerm_subnet . multy_vn_ube3b_r7 . id
route_table_id = azurerm_route_table . multy_vn_ube3b_r6 . id
}
resource "aws_subnet" "multy_vn_ube3b_r8-1" {
tags = { " Name " = " multy_subnet-1 " }
cidr_block = " 10.0.10.0/25 "
vpc_id = aws_vpc . multy_vn_ube3b_r5 . id
availability_zone = " eu-west-1a "
provider = " aws.eu-west-1 "
}
resource "aws_subnet" "multy_vn_ube3b_r8-2" {
tags = { " Name " = " multy_subnet-2 " }
cidr_block = " 10.0.10.128/26 "
vpc_id = aws_vpc . multy_vn_ube3b_r5 . id
availability_zone = " eu-west-1b "
provider = " aws.eu-west-1 "
}
resource "aws_subnet" "multy_vn_ube3b_r8-3" {
tags = { " Name " = " multy_subnet-3 " }
cidr_block = " 10.0.10.192/26 "
vpc_id = aws_vpc . multy_vn_ube3b_r5 . id
availability_zone = " eu-west-1c "
provider = " aws.eu-west-1 "
}
resource "azurerm_resource_group" "vm-nkum-rg" {
name = " vm-nkum-rg "
location = " northeurope "
}
resource "azurerm_resource_group" "vn-nkum-rg" {
name = " vn-nkum-rg "
location = " northeurope "
}Mit Multy schreiben Sie einmal und stellen überall ein .
brew tap hashicorp/tap && brew install hashicorp/tap/terraformchoco install terraform sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
Erstellen Sie ein Konto mit AWS oder Azure und legen Sie seine Authentifizierungsanmeldeinformationen über Umgebungsvariablen frei
Schreiben Sie Ihre Konfigurationsdatei, z. B. eine Datei namens main.tf mit dem folgenden Inhalt:
terraform {
required_providers {
multy = {
source = " multycloud/multy "
}
}
}
provider "multy" {
aws = {} # this will look for aws credentials
}
resource "multy_virtual_network" "vn" {
cloud = " aws "
name = " multy_vn "
cidr_block = " 10.0.0.0/16 "
location = " eu_west_1 "
} Führen Sie terraform init und dann terraform apply
terraform destroy
Ein detaillierterer Leitfaden finden Sie in unserem offiziellen Erste -Start -Leitfaden.
Wir lieben Mitwirkende! Wenn Sie einen Beitrag leisten möchten, werfen Sie einen Blick auf unseren beitragenden Leitfaden.
Schließen Sie sich unserem Discord -Kanal an, um an Live -Diskussionen teilzunehmen oder um Unterstützung zu bitten.
Repo -Übersicht: Übersicht.md
Terraform Provider Repo: https://github.com/multycloud/terraform-provider-multy
Discord Channel: https://discord.gg/rgakxy4tcz
Schauen Sie sich unsere Roadmap an, um die neuesten veröffentlichten Funktionen zu kennen und auf kurze und langfristige Konzentration. Sie können auch für eine bestimmte Funktion stimmen, die Sie möchten oder an den Diskussionen teilnehmen.
Multy wurde geboren, nachdem er erkannt hatte, wie schwierig es ist, dieselbe Infrastruktur über mehrere Wolken hinweg zu führen. Während Anbieter wie AWS und Azure die gleichen Kerndienste teilen, erschweren die kleinen Unterschiede in der Art und Weise, wie jeder Dienst funktioniert, es schwierig, Ihre Infrastruktur so zu konfigurieren, dass sie auf die gleiche Weise ausgeführt werden.
Dies ist das Problem, das Multy angehen will. Wir haben eine einzelne Schnittstelle erstellt, um Ressourcen bereitzustellen, die unabhängig vom Cloud -Anbieter das gleiche Verhalten haben.
Multy ist als kostenloses und Open-Source-Tool erhältlich, sodass Sie es direkt herunterladen und lokal ausführen können.
Wir bieten auch eine verwaltete Lösung an, die den Server für Sie hostet. Managed Multy wird derzeit als kostenloser Service angeboten. Sie können einen API -Schlüssel anfordern, indem Sie unsere Website besuchen.
Während Terraform und seine Anbieter hervorragend für die Einführung einer Ressource in eine Cloud für die Einführung der Infrastrukturteams beim Verständnis jedes Anbieters und der Definition der Ressourcen eröffnet werden. Diese Flexibilität kann jedoch als Vorteil angesehen werden. Wenn es um Multi-Cloud geht, verlangsamt dies die Teams, die sich mit den Bereitstellungen schnell bewegen möchten.
Durch die Zusammenfassung der gemeinsamen Ressourcen zwischen großen Cloud-Anbietern können Benutzer dieselben Ressourcen für AWS und Azure bereitstellen, ohne einen Infrastrukturcode neu zu schreiben.
Absolut! Das Ziel bei Multy ist es, Ihnen die Nutzung von Cloud -Managed -Diensten zu ermöglichen und Ihre Infrastruktur zu verschieben. Nicht jede Ressource wird unterstützt, aber wir möchten die beliebtesten verwalteten Ressourcen wie verwaltete Datenbanken, Objektspeicher und Tresor unterstützen.
Lassen Sie uns wissen, welche Dienste Sie unterstützt werden möchten, indem Sie ein Problem im Abschnitt "Themen" erstellen.
Multy ist ein Open-Source-Tool, das lokal und kostenlos ausgeführt werden kann. Wenn Sie irgendwann Multy abziehen möchten, können Sie Ihre Infrastrukturkonfiguration als Terraform exportieren und unabhängig verwenden.
Dieses Repository ist unter Apache 2.0 verfügbar.