{"id":49092,"date":"2023-04-04T13:04:45","date_gmt":"2024-01-05T22:19:02","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/"},"modified":"2024-04-29T21:52:35","modified_gmt":"2024-04-29T13:52:35","slug":"%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09"},"content":{"rendered":"<p>\u4ee5\u524d\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002<\/p>\n<h1>\u6267\u884c\u7684\u5185\u5bb9<\/h1>\n<p>-\u5efa\u7acb\u865a\u62df\u673a\u548c\u76f8\u5173\u8d44\u6e90\u3002<br \/>\n-\u5c1d\u8bd5\u4f7f\u7528\u53d8\u91cf\u3002<br \/>\n-\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u66f4\u6539terraform\u7248\u672c\uff080.12.9\uff09\uff0c\u56e0\u6b64\u901a\u8fc7tfenv\u8fdb\u884c\u7ba1\u7406\u3002<br \/>\n-\u5c06terraform.tfstate\u4fdd\u5b58\u5230Azure\u5b58\u50a8\u8d26\u6237\u4e2d\u8fdb\u884c\u66f4\u6539\u3002<\/p>\n<h1>tfenv\u662f\u4ec0\u4e48<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u7ba1\u7406Terraform\u7248\u672c\u7684\u8f6f\u4ef6\u3002<br \/>\n\u8be6\u7ec6\u4fe1\u606f\u8bf7\u53c2\u8003\u4e0b\u6587\u3002<\/p>\n<h1>\u4f7f\u7528tfenv\u8fdb\u884c\u7ba1\u7406\uff08\u4ece\u5378\u8f7dterraform\u5230\u5b89\u88c5tfenv\u548c\u5b89\u88c5terraform\uff09\u3002<\/h1>\n<pre class=\"post-pre\"><code>% brew uninstall terraform\r\nUninstalling \/usr\/local\/Cellar\/terraform\/0.12.18... (6 files, 50.9MB)\r\n\r\n% brew install tfenv\r\n\r\n==&gt; Downloading https:\/\/github.com\/tfutils\/tfenv\/archive\/v1.0.2.tar.gz\r\n==&gt; Downloading from https:\/\/codeload.github.com\/tfutils\/tfenv\/tar.gz\/v1.0.2\r\n#=#=#\r\n?  \/usr\/local\/Cellar\/tfenv\/1.0.2: 20 files, 29.2KB, built in 4 seconds\r\n\r\n% tfenv install 0.12.9\r\n[INFO] Installing Terraform v0.12.9\r\n[INFO] Downloading release tarball from https:\/\/releases.hashicorp.com\/terraform\/0.12.9\/terraform_0.12.9_darwin_amd64.zip\r\n######################################################################################################################################################################################################################################################### 100.0%\r\n[INFO] Downloading SHA hash file from https:\/\/releases.hashicorp.com\/terraform\/0.12.9\/terraform_0.12.9_SHA256SUMS\r\ntfenv: tfenv-install: [WARN] No keybase install found, skipping OpenPGP signature verification\r\nArchive:  tfenv_download.aQegFa\/terraform_0.12.9_darwin_amd64.zip\r\n  inflating: \/usr\/local\/Cellar\/tfenv\/1.0.2\/versions\/0.12.9\/terraform\r\n[INFO] Installation of terraform v0.12.9 successful\r\n[INFO] Switching to v0.12.9\r\n[INFO] Switching completed\r\nmasaakihamada@masaakinoMacBook-Pro tf-test %\r\nmasaakihamada@masaakinoMacBook-Pro tf-test %\r\nmasaakihamada@masaakinoMacBook-Pro tf-test %\r\nmasaakihamada@masaakinoMacBook-Pro tf-test % terraform --version\r\nTerraform v0.12.9\r\n+ provider.azurerm v1.39.0\r\n<\/code><\/pre>\n<h1>tfstate\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u8be5\u6587\u4ef6\u63cf\u8ff0\u4e86\u5b9e\u9645\u8d44\u6e90\u7684\u72b6\u6001\u3002<br \/>\n\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5b83\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5e76\u4e14\u53ef\u4ee5\u9009\u62e9\u4fdd\u5b58\u5728\u8fdc\u7a0b\u3002<br \/>\n\u57fa\u672c\u4e0a\uff0c\u6211\u4eec\u8ba4\u4e3a\u5e94\u8be5\u5728\u56e2\u961f\u4e2d\u534f\u4f5c\uff0c\u56e0\u6b64\u51b3\u5b9a\u5c06\u5176\u4fdd\u5b58\u5728\u8fdc\u7a0b\uff08Azure Storage Account\uff09\u3002<\/p>\n<blockquote><p>\u8fd9\u4e2a\u72b6\u6001\u9ed8\u8ba4\u5b58\u50a8\u5728\u540d\u4e3a&#8221;terraform.tfstate&#8221;\u7684\u672c\u5730\u6587\u4ef6\u4e2d\uff0c\u4f46\u4e5f\u53ef\u4ee5\u8fdc\u7a0b\u5b58\u50a8\uff0c\u5bf9\u4e8e\u56e2\u961f\u73af\u5883\u66f4\u6709\u6548\u3002<\/p>\n<p>Terraform\u4f7f\u7528\u672c\u5730\u72b6\u6001\u6765\u521b\u5efa\u8ba1\u5212\u5e76\u5bf9\u57fa\u7840\u67b6\u6784\u8fdb\u884c\u66f4\u6539\u3002\u5728\u4efb\u4f55\u64cd\u4f5c\u4e4b\u524d\uff0cTerraform\u90fd\u4f1a\u8fdb\u884c\u5237\u65b0\uff0c\u4ee5\u66f4\u65b0\u72b6\u6001\u4e0e\u771f\u5b9e\u7684\u57fa\u7840\u67b6\u6784\u3002<\/p><\/blockquote>\n<h1>\u4e8b\u524d\u51c6\u5907\u8fdc\u7a0b\u7ba1\u7406tfstate\u3002<\/h1>\n<p>\u9700\u8981\u4ee5\u4e0b\u5185\u5bb9\uff1a<br \/>\n&#8211; \u521b\u5efaAzure\u5b58\u50a8\u5e10\u6237\u3002<br \/>\n&#8211; \u5c06\u8bbf\u95ee\u5bc6\u94a5\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<p>\u521b\u5efaAzure\u5b58\u50a8\u5e10\u6237<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">#!\/bin\/bash<\/span>\r\n\r\n<span class=\"nv\">RESOURCE_GROUP_NAME<\/span><span class=\"o\">=<\/span>tstate\r\n<span class=\"nv\">STORAGE_ACCOUNT_NAME<\/span><span class=\"o\">=<\/span>tstate<span class=\"nv\">$RANDOM<\/span>\r\n<span class=\"nv\">CONTAINER_NAME<\/span><span class=\"o\">=<\/span>tstate\r\n\r\n<span class=\"c\"># Create resource group<\/span>\r\naz group create <span class=\"nt\">--name<\/span> <span class=\"nv\">$RESOURCE_GROUP_NAME<\/span> <span class=\"nt\">--location<\/span> japaneast\r\n\r\n<span class=\"c\"># Create storage account<\/span>\r\naz storage account create <span class=\"nt\">--resource-group<\/span> <span class=\"nv\">$RESOURCE_GROUP_NAME<\/span> <span class=\"nt\">--name<\/span> <span class=\"nv\">$STORAGE_ACCOUNT_NAME<\/span> <span class=\"nt\">--sku<\/span> Standard_LRS <span class=\"nt\">--encryption-services<\/span> blob\r\n\r\n<span class=\"c\"># Get storage account key<\/span>\r\n<span class=\"nv\">ACCOUNT_KEY<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az storage account keys list <span class=\"nt\">--resource-group<\/span> <span class=\"nv\">$RESOURCE_GROUP_NAME<\/span> <span class=\"nt\">--account-name<\/span> <span class=\"nv\">$STORAGE_ACCOUNT_NAME<\/span> <span class=\"nt\">--query<\/span> <span class=\"o\">[<\/span>0].value <span class=\"nt\">-o<\/span> tsv<span class=\"si\">)<\/span>\r\n\r\n<span class=\"c\"># Create blob container<\/span>\r\naz storage container create <span class=\"nt\">--name<\/span> <span class=\"nv\">$CONTAINER_NAME<\/span> <span class=\"nt\">--account-name<\/span> <span class=\"nv\">$STORAGE_ACCOUNT_NAME<\/span> <span class=\"nt\">--account-key<\/span> <span class=\"nv\">$ACCOUNT_KEY<\/span>\r\n\r\n<span class=\"nb\">echo<\/span> <span class=\"s2\">\"storage_account_name: <\/span><span class=\"nv\">$STORAGE_ACCOUNT_NAME<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"nb\">echo<\/span> <span class=\"s2\">\"container_name: <\/span><span class=\"nv\">$CONTAINER_NAME<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"nb\">echo<\/span> <span class=\"s2\">\"access_key: <\/span><span class=\"nv\">$ACCOUNT_KEY<\/span><span class=\"s2\">\"<\/span>\r\n<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c<\/p>\n<pre class=\"post-pre\"><code>~~~~\u7701\u7565~~~~~~\r\nstorage_account_name: tstate12763\r\ncontainer_name: tstate\r\naccess_key: **********************************\r\n<\/code><\/pre>\n<p>\u5c06\u8bbf\u95ee\u5bc6\u94a5\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code>% export ARM_ACCESS_KEY=\"**********************************\"\r\n% env | grep ARM_ACCESS_KEY\r\nARM_ACCESS_KEY=**********************************\r\n<\/code><\/pre>\n<p>\u5982\u679c\u9700\u8981\u6bcf\u6b21\u52a0\u8f7d\uff0c\u8bf7\u5c06\u5176\u8bbe\u7f6e\u5728.bashrc\u6216\u5176\u4ed6\u5730\u65b9\u3002<\/p>\n<h1>\u5b9a\u4e49\u6587\u4ef6\uff08backend.tf\uff09<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u8fdc\u7a0b\u7ba1\u7406tfstate\u7684\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">terraform<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">backend<\/span> <span class=\"s2\">\"azurerm\"<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">resource_group_name<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"tstate\"<\/span>\r\n    <span class=\"nx\">storage_account_name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"tstate12763\"<\/span>\r\n    <span class=\"nx\">container_name<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"tstate\"<\/span>\r\n    <span class=\"nx\">key<\/span>                  <span class=\"p\">=<\/span> <span class=\"s2\">\"terraform.tfstate\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u5b9a\u4e49\u6587\u4ef6(vars.tf)<\/h1>\n<p>\u53ef\u4ee5\u58f0\u660e\u4e00\u4e2a\u540d\u4e3aconfig\u7684\u53d8\u91cf\u3002<br \/>\n\u901a\u5e38\u4f1a\u4f7f\u7528\u9ed8\u8ba4\u503c\uff0c\u4f46\u4e5f\u53ef\u4ee5\u5728terraform plan\u6216terraform apply\u65f6\u901a\u8fc7\u9009\u9879\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">variable<\/span> <span class=\"s2\">\"resource_prefix\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"testprefix\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"nx\">variable<\/span> <span class=\"s2\">\"location\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"japaneast\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u4e3b\u8981.tf\u6587\u4ef6\u7684\u5b9a\u4e49\u6587\u4ef6<\/h1>\n<p>\u8981\u521b\u5efa\u7684\u6587\u4ef6\u5982\u4e0b\u6240\u793a<\/p>\n<p>&#8211; \u8d44\u6e90\u7ec4<br \/>\n&#8211; \u865a\u62df\u7f51\u7edc<br \/>\n&#8211; \u5b50\u7f51<br \/>\n&#8211; \u7f51\u7edc\u5b89\u5168\u7ec4<br \/>\n&#8211; \u7f51\u7edc\u63a5\u53e3<br \/>\n&#8211; \u865a\u62df\u673a<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">provider<\/span> <span class=\"s2\">\"azurerm\"<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"=1.39.0\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create a resource group<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_resource_group\"<\/span> <span class=\"s2\">\"rg\"<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">name<\/span>     <span class=\"p\">=<\/span> <span class=\"s2\">\"myTFResourceGroup\"<\/span>\r\n    <span class=\"nx\">location<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"japaneast\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create a virtual network<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_virtual_network\"<\/span> <span class=\"s2\">\"vnet\"<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">name<\/span>                <span class=\"p\">=<\/span> <span class=\"s2\">\"myTFVnet\"<\/span>\r\n    <span class=\"nx\">address_space<\/span>       <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"10.0.0.0\/16\"<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"nx\">location<\/span>            <span class=\"p\">=<\/span> <span class=\"nx\">var<\/span><span class=\"err\">.<\/span><span class=\"nx\">location<\/span>\r\n    <span class=\"nx\">resource_group_name<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_resource_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">rg<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create subnet<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_subnet\"<\/span> <span class=\"s2\">\"subnet\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>                 <span class=\"p\">=<\/span> <span class=\"s2\">\"myTFSubnet\"<\/span>\r\n  <span class=\"nx\">resource_group_name<\/span>  <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_resource_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">rg<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n  <span class=\"nx\">virtual_network_name<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_virtual_network<\/span><span class=\"err\">.<\/span><span class=\"nx\">vnet<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n  <span class=\"nx\">address_prefix<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"10.0.1.0\/24\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create public IP<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_public_ip\"<\/span> <span class=\"s2\">\"publicip\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>                <span class=\"p\">=<\/span> <span class=\"s2\">\"${var.resource_prefix}TFPublicIP\"<\/span>\r\n  <span class=\"nx\">location<\/span>            <span class=\"p\">=<\/span> <span class=\"nx\">var<\/span><span class=\"err\">.<\/span><span class=\"nx\">location<\/span>\r\n  <span class=\"nx\">resource_group_name<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_resource_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">rg<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n  <span class=\"nx\">allocation_method<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"Static\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create Network Security Group and rule<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_network_security_group\"<\/span> <span class=\"s2\">\"nsg\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>                <span class=\"p\">=<\/span> <span class=\"s2\">\"myTFNSG\"<\/span>\r\n  <span class=\"nx\">location<\/span>            <span class=\"p\">=<\/span> <span class=\"nx\">var<\/span><span class=\"err\">.<\/span><span class=\"nx\">location<\/span>\r\n  <span class=\"nx\">resource_group_name<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_resource_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">rg<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n\r\n  <span class=\"nx\">security_rule<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">name<\/span>                       <span class=\"p\">=<\/span> <span class=\"s2\">\"SSH\"<\/span>\r\n    <span class=\"nx\">priority<\/span>                   <span class=\"p\">=<\/span> <span class=\"mi\">1001<\/span>\r\n    <span class=\"nx\">direction<\/span>                  <span class=\"p\">=<\/span> <span class=\"s2\">\"Inbound\"<\/span>\r\n    <span class=\"nx\">access<\/span>                     <span class=\"p\">=<\/span> <span class=\"s2\">\"Allow\"<\/span>\r\n    <span class=\"nx\">protocol<\/span>                   <span class=\"p\">=<\/span> <span class=\"s2\">\"Tcp\"<\/span>\r\n    <span class=\"nx\">source_port_range<\/span>          <span class=\"p\">=<\/span> <span class=\"s2\">\"*\"<\/span>\r\n    <span class=\"nx\">destination_port_range<\/span>     <span class=\"p\">=<\/span> <span class=\"s2\">\"22\"<\/span>\r\n    <span class=\"nx\">source_address_prefix<\/span>      <span class=\"p\">=<\/span> <span class=\"s2\">\"*\"<\/span>\r\n    <span class=\"nx\">destination_address_prefix<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"*\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create network interface<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_network_interface\"<\/span> <span class=\"s2\">\"nic\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>                      <span class=\"p\">=<\/span> <span class=\"s2\">\"myNIC\"<\/span>\r\n  <span class=\"nx\">location<\/span>                  <span class=\"p\">=<\/span> <span class=\"nx\">var<\/span><span class=\"err\">.<\/span><span class=\"nx\">location<\/span>\r\n  <span class=\"nx\">resource_group_name<\/span>       <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_resource_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">rg<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n  <span class=\"nx\">network_security_group_id<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_network_security_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">nsg<\/span><span class=\"err\">.<\/span><span class=\"nx\">id<\/span>\r\n\r\n  <span class=\"nx\">ip_configuration<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">name<\/span>                          <span class=\"p\">=<\/span> <span class=\"s2\">\"myNICConfg\"<\/span>\r\n    <span class=\"nx\">subnet_id<\/span>                     <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_subnet<\/span><span class=\"err\">.<\/span><span class=\"nx\">subnet<\/span><span class=\"err\">.<\/span><span class=\"nx\">id<\/span>\r\n    <span class=\"nx\">private_ip_address_allocation<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"dynamic\"<\/span>\r\n    <span class=\"nx\">public_ip_address_id<\/span>          <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_public_ip<\/span><span class=\"err\">.<\/span><span class=\"nx\">publicip<\/span><span class=\"err\">.<\/span><span class=\"nx\">id<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Create a Linux virtual machine<\/span>\r\n<span class=\"nx\">resource<\/span> <span class=\"s2\">\"azurerm_virtual_machine\"<\/span> <span class=\"s2\">\"vm\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>                  <span class=\"p\">=<\/span> <span class=\"s2\">\"myTFVM\"<\/span>\r\n  <span class=\"nx\">location<\/span>              <span class=\"p\">=<\/span> <span class=\"nx\">var<\/span><span class=\"err\">.<\/span><span class=\"nx\">location<\/span>\r\n  <span class=\"nx\">resource_group_name<\/span>   <span class=\"p\">=<\/span> <span class=\"nx\">azurerm_resource_group<\/span><span class=\"err\">.<\/span><span class=\"nx\">rg<\/span><span class=\"err\">.<\/span><span class=\"nx\">name<\/span>\r\n  <span class=\"nx\">network_interface_ids<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">azurerm_network_interface<\/span><span class=\"err\">.<\/span><span class=\"nx\">nic<\/span><span class=\"err\">.<\/span><span class=\"nx\">id<\/span><span class=\"p\">]<\/span>\r\n  <span class=\"nx\">vm_size<\/span>               <span class=\"p\">=<\/span> <span class=\"s2\">\"Standard_DS1_v2\"<\/span>\r\n\r\n  <span class=\"nx\">storage_os_disk<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">name<\/span>              <span class=\"p\">=<\/span> <span class=\"s2\">\"myOsDisk\"<\/span>\r\n    <span class=\"nx\">caching<\/span>           <span class=\"p\">=<\/span> <span class=\"s2\">\"ReadWrite\"<\/span>\r\n    <span class=\"nx\">create_option<\/span>     <span class=\"p\">=<\/span> <span class=\"s2\">\"FromImage\"<\/span>\r\n    <span class=\"nx\">managed_disk_type<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"Premium_LRS\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"nx\">storage_image_reference<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">publisher<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"Canonical\"<\/span>\r\n    <span class=\"nx\">offer<\/span>     <span class=\"p\">=<\/span> <span class=\"s2\">\"UbuntuServer\"<\/span>\r\n    <span class=\"nx\">sku<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"16.04.0-LTS\"<\/span>\r\n    <span class=\"nx\">version<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"latest\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"nx\">os_profile<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">computer_name<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"myTFVM\"<\/span>\r\n    <span class=\"nx\">admin_username<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"plankton\"<\/span>\r\n    <span class=\"nx\">admin_password<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"Password1234!\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"nx\">os_profile_linux_config<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">disable_password_authentication<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">false<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u786e\u8ba4\u8981\u521b\u5efa\u7684\u8d44\u6e90-\u521b\u5efa<\/h1>\n<pre class=\"post-pre\"><code>% terraform plan\r\nAcquiring state lock. This may take a few moments...\r\nRefreshing Terraform state in-memory prior to plan...\r\nThe refreshed state will be used to calculate this plan, but will not be\r\npersisted to local or remote state storage.\r\n\r\n~~~\u7701\u7565~~~\r\n\r\nPlan: 7 to add, 0 to change, 0 to destroy.\r\n\r\n------------------------------------------------------------------------\r\n\r\nNote: You didn't specify an \"-out\" parameter to save this plan, so Terraform\r\ncan't guarantee that exactly these actions will be performed if\r\n\"terraform apply\" is subsequently run.\r\n\r\n%\r\n\r\n % terraform apply\r\nAcquiring state lock. This may take a few moments...\r\n\r\nAn execution plan has been generated and is shown below.\r\nResource actions are indicated with the following symbols:\r\n  + create\r\n\r\n~~~\u7701\u7565~~~\r\n\r\nPlan: 7 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes    \u203byes\u3092\u5165\u529b\u3057Enter\r\n\r\nApply complete! Resources: 7 added, 0 changed, 0 destroyed.\r\n\r\n<\/code><\/pre>\n<p>\u7533\u8bf7\u5df2\u5b8c\u6210\uff01<\/p>\n<h1>\u767b\u5f55\u786e\u8ba4\u5df2\u521b\u5efa\u7684\u865a\u62df\u673a\u3002<\/h1>\n<p>\u83b7\u53d6IP\u5730\u5740<\/p>\n<pre class=\"post-pre\"><code>% az vm list-ip-addresses --query \"[].virtualMachine[].{Name:name, PublicIp:network.publicIpAddresses[0].ipAddress, PrivateIp:network.privateIpAddresses[0]}\" -o table -g myTFResourceGroup\r\nName    PublicIp        PrivateIp\r\n------  --------------  -----------\r\nmyTFVM  52.140.240.152  10.0.1.4\r\n<\/code><\/pre>\n<p>\u767b\u5f55\u5230\u76ee\u6807\u4e3b\u673a<\/p>\n<pre class=\"post-pre\"><code>% ssh plankton@52.140.240.152\r\nThe authenticity of host '52.140.240.152 (52.140.240.152)' can't be established.\r\nECDSA key fingerprint is SHA256:AmCpQpiGo9TYY65wKZKHcNYMIPKGwxg2UZaxPCXEpsY.\r\nAre you sure you want to continue connecting (yes\/no)? yes\r\nWarning: Permanently added '52.140.240.152' (ECDSA) to the list of known hosts.\r\nplankton@52.140.240.152's password:\r\nWelcome to Ubuntu 16.04.6 LTS (GNU\/Linux 4.15.0-1066-azure x86_64)\r\n\r\n * Documentation:  https:\/\/help.ubuntu.com\r\n * Management:     https:\/\/landscape.canonical.com\r\n * Support:        https:\/\/ubuntu.com\/advantage\r\n\r\n0 packages can be updated.\r\n0 updates are security updates.\r\n\r\n\r\n\r\nThe programs included with the Ubuntu system are free software;\r\nthe exact distribution terms for each program are described in the\r\nindividual files in \/usr\/share\/doc\/*\/copyright.\r\n\r\nUbuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by\r\napplicable law.\r\n\r\nTo run a command as administrator (user \"root\"), use \"sudo &lt;command&gt;\".\r\nSee \"man sudo_root\" for details.\r\n\r\nplankton@myTFVM:~$\r\n<\/code><\/pre>\n<p>\u6574\u7406\u6536\u62fe<\/p>\n<pre class=\"post-pre\"><code>% terraform destroy\r\n\r\n\r\nPlan: 0 to add, 0 to change, 7 to destroy.\r\n\r\nDo you really want to destroy all resources?\r\n  Terraform will destroy all your managed infrastructure, as shown above.\r\n  There is no undo. Only 'yes' will be accepted to confirm.\r\n\r\n  Enter a value: yes\r\n\r\nDestroy complete! Resources: 7 destroyed.\r\n\r\n% terraform show\r\n\r\n% \r\n\r\n\r\n<\/code><\/pre>\n<p>\u5220\u9664\u5b8c\u6210<\/p>\n<h1>\u8bf7\u53c2\u8003<\/h1>\n<p>\u571f\u58e4\u6784\u5efa\u5b98\u65b9\u6587\u4ef6<br \/>\n\u571f\u58e4\u5165\u95e8\u6307\u5357<br \/>\n\u571f\u58e4Azure\u63d0\u4f9b\u8005<br \/>\n\u571f\u58e4\u540e\u7aef<br \/>\n\u521b\u5efaAzure\u5b58\u50a8\u5e10\u6237<br \/>\n\u83b7\u53d6\u865a\u62df\u673a\u7684IP\u5730\u5740<br \/>\n\u5173\u4e8etfstate\u7684\u8bf4\u660e<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u524d\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002 \u6267\u884c\u7684\u5185\u5bb9 -\u5efa\u7acb\u865a\u62df\u673a\u548c\u76f8\u5173\u8d44\u6e90\u3002 -\u5c1d\u8bd5\u4f7f\u7528\u53d8\u91cf\u3002 -\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u66f4\u6539terraf [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-49092","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm\u03b1\uff09\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09\" \/>\n<meta property=\"og:description\" content=\"\u4ee5\u524d\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002 \u6267\u884c\u7684\u5185\u5bb9 -\u5efa\u7acb\u865a\u62df\u673a\u548c\u76f8\u5173\u8d44\u6e90\u3002 -\u5c1d\u8bd5\u4f7f\u7528\u53d8\u91cf\u3002 -\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u66f4\u6539terraf [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm\u03b1\uff09\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-05T22:19:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T13:52:35+00:00\" \/>\n<meta name=\"author\" content=\"\u5b87, \u534e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5b87, \u534e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/\",\"name\":\"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-01-05T22:19:02+00:00\",\"dateModified\":\"2024-04-29T13:52:35+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\",\"name\":\"\u5b87, \u534e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"caption\":\"\u5b87, \u534e\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm\u03b1\uff09\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09","og_description":"\u4ee5\u524d\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002 \u6267\u884c\u7684\u5185\u5bb9 -\u5efa\u7acb\u865a\u62df\u673a\u548c\u76f8\u5173\u8d44\u6e90\u3002 -\u5c1d\u8bd5\u4f7f\u7528\u53d8\u91cf\u3002 -\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u66f4\u6539terraf [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u5728azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm\u03b1\uff09\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-01-05T22:19:02+00:00","article_modified_time":"2024-04-29T13:52:35+00:00","author":"\u5b87, \u534e","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u5b87, \u534e","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/","name":"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-01-05T22:19:02+00:00","dateModified":"2024-04-29T13:52:35+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Terraform\u5728Azure\u4e0a\u5efa\u7acb\u865a\u62df\u673a\uff082\u4e2avm+\u03b1\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458","name":"\u5b87, \u534e","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","caption":"\u5b87, \u534e"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e5%9c%a8azure%e4%b8%8a%e5%bb%ba%e7%ab%8b%e8%99%9a%e6%8b%9f%e6%9c%ba%ef%bc%882%e4%b8%aavm%ce%b1%ef%bc%89%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=49092"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49092\/revisions"}],"predecessor-version":[{"id":87855,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49092\/revisions\/87855"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=49092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=49092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=49092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}