Multy adalah alat open-source yang membuat infrastruktur Anda portabel menggunakan API cloud-agnostik. Anda menulis konfigurasi cloud-agnostik Anda sekali dan multy menyebarkannya ke awan yang Anda pilih.
Dengan multy, Anda tidak perlu khawatir tentang bagaimana sumber daya berperilaku berbeda di penyedia awan yang berbeda. Kami abstrak nuansa setiap awan sehingga memindahkan infrastruktur Anda di antara awan dilakukan dengan hanya mengubah parameter cloud .
Mari kita coba menggunakan mesin virtual sederhana ke dalam AWS dan Azure menggunakan penyedia multy terraform
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 "
} Dengan menggunakan API multy cloud-agnostik, kita dapat dengan mudah mengubah parameter cloud untuk memindahkan sumber daya dari satu cloud ke cloud lainnya.
Jika kita menggunakan ini menggunakan penyedia cloud terraform masing -masing, pertama -tama kita perlu memahami bagaimana sumber daya seperti aws_vpc dan azurerm_virtual_network berperilaku dan bagaimana perbedaannya. Maka kita perlu mendefinisikan konfigurasi infrastruktur yang sama dua kali, satu untuk AWS dan lainnya untuk 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 "
}Dengan multy, Anda menulis sekali, dan menggunakan di mana saja .
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
Buat akun dengan AWS atau Azure dan paparkan kredensial otentikasi melalui variabel lingkungan
Tulis file konfigurasi Anda, misalnya file bernama main.tf dengan konten berikut:
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 "
} Jalankan terraform init dan kemudian terraform apply
Jalankan terraform destroy
Untuk panduan yang lebih rinci, lihat Panduan Memulai Resmi kami.
Kami menyukai kontributor! Jika Anda tertarik untuk berkontribusi, lihat panduan berkontribusi kami.
Bergabunglah dengan saluran Discord kami untuk berpartisipasi dalam diskusi langsung atau meminta dukungan.
Tinjauan Umum Repo: Ikhtisar.md
Repo penyedia terraform: https://github.com/multycloud/terraform-provider-multy
Saluran Perselisihan: https://discord.gg/rgakxy4tcz
Lihatlah peta jalan kami untuk mengetahui fitur terbaru yang dirilis dan apa yang kami fokuskan pada jangka pendek dan panjang. Anda juga dapat memilih fitur tertentu yang Anda inginkan atau berpartisipasi dalam diskusi.
Multy lahir setelah menyadari betapa sulitnya menjalankan infrastruktur yang sama di berbagai awan. Sementara penyedia seperti AWS dan Azure berbagi serangkaian layanan inti yang sama, perbedaan kecil dalam cara kerja setiap layanan membuatnya sulit untuk mengkonfigurasi infrastruktur Anda untuk dijalankan dengan cara yang sama.
Ini adalah masalah yang ingin ditangani oleh Multy. Kami membuat antarmuka tunggal untuk menggunakan sumber daya yang memiliki perilaku yang sama terlepas dari penyedia cloud.
Multy tersedia sebagai alat gratis dan open-source, sehingga Anda dapat mengunduhnya secara langsung dan menjalankannya secara lokal.
Kami juga menawarkan solusi terkelola yang meng -host server untuk Anda. Managed Multy saat ini ditawarkan sebagai layanan gratis. Anda dapat meminta kunci API dengan mengunjungi situs web kami.
Sementara Terraform dan penyedianya sangat bagus untuk menyebarkan sumber daya apa pun ke dalam cloud apa pun, itu menempatkan semua beban pada tim infrastruktur ketika datang untuk memahami setiap penyedia dan mendefinisikan sumber daya. Fleksibilitas ini dapat dilihat sebagai keuntungan, namun, ketika datang ke multi-cloud, tim-tim yang sangat memperlambat ini yang ingin bergerak cepat dengan penyebaran.
Dengan mengabstraksi sumber daya umum di seluruh penyedia cloud utama, pengguna dapat menggunakan sumber daya yang sama di AWS dan Azure tanpa menulis ulang kode infrastruktur apa pun.
Sangat! Tujuannya dengan multy adalah untuk memungkinkan Anda memanfaatkan layanan yang dikelola cloud dan tetap bebas untuk memindahkan infrastruktur Anda. Tidak semua sumber daya akan didukung, tetapi kami bertujuan untuk mendukung sumber daya terkelola yang paling populer seperti database yang dikelola, penyimpanan objek, dan lemari besi.
Beri tahu kami layanan apa yang ingin Anda dukung dengan membuat masalah pada bagian masalah.
Multy adalah alat open-source yang dapat dijalankan secara lokal dan gratis. Jika pada titik tertentu Anda ingin pindah multy, Anda dapat mengekspor konfigurasi infrastruktur Anda sebagai terraform dan menggunakannya secara mandiri.
Repositori ini tersedia di bawah Apache 2.0.