AWS 提供了一个命令来将快照从一个区域复制到另一个区域,但 Azure 不直接从其 CLI 提供此功能。
参考:https ://docs.aws.amazon.com/cli/latest/reference/ec2/copy-snapshot.html
例子:
aws ec2 copy-snapshot \
--region us-east-1 \
--source-region us-west-2 \
--source-snapshot-id snap-066877671789bd71b \
--description "This is my copied snapshot."
Azure 解决方案:
第 1 步 - 在目标位置创建存储帐户
az storage account create --name $account_name \
--resource-group $resource_group \
--location $target_location
第 2 步 - 从第 1 步存储帐户获取存储密钥
注意:注意 Azure 如何将“storage_account”更改为“account_account”。
az storage account keys list --resource-group $resource_group \
--account-name $account_name \
--query '[].value' \
--output tsv
第 3 步 - 在位于目标位置的新创建的存储帐户中创建一个容器
az storage container create --name $container_name
--resource-group $resource_group \
--account-key $account_key \
--account-name $account_name
第 4 步 - 授予对您自己的快照的访问权限
这对我来说很奇怪。您必须让自己访问自己的快照。您还必须设置对自己的赠款的有效期。
duration="7200"
az snapshot grant-access --resource-group $resource_group \
--name $snapshot_id \
--duration-in-seconds $duration \
--query [accessSas] \
--output tsv
第 5 步 - 使用 SAS 将快照复制到存储帐户中的容器
“destination_blob”是快照的名称,其末尾附加了“.vhd”。
destination_blob="$snapshot_id"".vhd"
az storage blob copy start --destination-blob "$destination_blob" \
--destination-container "$container_name" \
--account-key "$account_key" \
--account-name "$account_name" \
--source-uri "$sas"
第 6 步 - 等待
继续运行,直到输出显示“成功”。
az storage blob show --name "$destination_blob" \
--container-name "$container_name" \
--account-key "$account_key" \
--account-name "$account_name" \
--query '[properties.copy.status]' \
--output tsv
第 7 步 - 获取您的订阅 ID
az account show --query 'id' --output tsv
第 8 步 - 创建快照 Azure 不允许您拥有同名但位于不同区域的快照。因此,不幸的是,您将不得不更新名称。
target_snapshot_id="$snapshot_id""_copy"
az snapshot create --name $target_snapshot_id \
--resource-group $resource_group \
--location $target_location \
--source "https://${account_name}.blob.core.windows.net/${container_name}/${destination_blob}" \
--source-storage-account-id "/subscriptions/${subscription_id}/resourceGroups/${resource_group}/providers/Microsoft.Storage/storageAccounts/${account_name}"
第 9 步 - 清理
az storage account delete --resource-group $resource_group \
--name $account_name \
--yes