{"id":35006,"date":"2024-09-25T15:24:51","date_gmt":"2024-09-25T08:24:51","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/25\/a-beginners-guide-to-terraform\/"},"modified":"2024-09-25T15:24:51","modified_gmt":"2024-09-25T08:24:51","slug":"a-beginners-guide-to-terraform","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/25\/a-beginners-guide-to-terraform\/","title":{"rendered":"H\u01b0\u1edbng d\u1eabn Terraform cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u"},"content":{"rendered":"<p><a href=\"https:\/\/www.terraform.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Terraform<\/a>&nbsp;c\u1ee7a HashiCorp l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u1ed1i h\u1ee3p cho ph\u00e9p b\u1ea1n th\u1ec3 hi\u1ec7n c\u00e1c phi\u00ean b\u1ea3n Linode v\u00e0 c\u00e1c t\u00e0i nguy\u00ean kh\u00e1c b\u1eb1ng m\u00e3 khai b\u00e1o b\u00ean trong c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh, thay v\u00ec t\u1ea1o th\u1ee7 c\u00f4ng c\u00e1c t\u00e0i nguy\u00ean \u0111\u00f3 th\u00f4ng qua Linode Manager ho\u1eb7c API. Th\u1ef1c h\u00e0nh n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng M\u00e3<\/em>&nbsp;v\u00e0 Terraform l\u00e0 m\u1ed9t v\u00ed d\u1ee5 ph\u1ed5 bi\u1ebfn v\u1ec1 ph\u01b0\u01a1ng ph\u00e1p n\u00e0y. Quy tr\u00ecnh l\u00e0m vi\u1ec7c c\u01a1 b\u1ea3n khi s\u1eed d\u1ee5ng Terraform l\u00e0:<\/p>\n<ol>\n<li>Vi\u1ebft c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n trong \u0111\u00f3 b\u1ea1n khai b\u00e1o c\u00e1c th\u00e0nh ph\u1ea7n c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng m\u00e0 b\u1ea1n mu\u1ed1n t\u1ea1o.<\/li>\n<li>Y\u00eau c\u1ea7u Terraform ph\u00e2n t\u00edch c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n v\u00e0 sau \u0111\u00f3 t\u1ea1o c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng t\u01b0\u01a1ng \u1ee9ng.<\/li>\n<\/ol>\n<p>Nhi\u1ec7m v\u1ee5 ch\u00ednh c\u1ee7a Terraform l\u00e0 t\u1ea1o, s\u1eeda \u0111\u1ed5i v\u00e0 h\u1ee7y m\u00e1y ch\u1ee7 v\u00e0 c\u00e1c t\u00e0i nguy\u00ean kh\u00e1c. Terraform th\u01b0\u1eddng kh\u00f4ng c\u1ea5u h\u00ecnh ph\u1ea7n m\u1ec1m m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n. C\u1ea5u h\u00ecnh ph\u1ea7n m\u1ec1m c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1eb1ng c\u00e1c t\u1eadp l\u1ec7nh m\u00e0 b\u1ea1n&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#provisioners\">t\u1ea3i l\u00ean v\u00e0 th\u1ef1c thi tr\u00ean m\u00e1y ch\u1ee7 m\u1edbi c\u1ee7a m\u00ecnh<\/a>&nbsp;ho\u1eb7c th\u00f4ng qua c\u00e1c c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh ho\u1eb7c tri\u1ec3n khai container.<\/p>\n<h2 id=\"the-linode-provider\">Nh\u00e0 cung c\u1ea5p Linode<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#the-linode-provider\"><\/a><\/h2>\n<p>Terraform l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u1ed1i h\u1ee3p chung c\u00f3 th\u1ec3 giao ti\u1ebfp v\u1edbi m\u1ed9t s\u1ed1 n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y kh\u00e1c nhau. C\u00e1c t\u00edch h\u1ee3p n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>nh\u00e0 cung c\u1ea5p<\/em>&nbsp;. Nh\u00e0 cung c\u1ea5p Terraform cho Linode \u0111\u00e3&nbsp;<a href=\"https:\/\/blog.linode.com\/2018\/10\/30\/now-available-linode-terraform-provider\/\" target=\"_blank\" rel=\"noreferrer noopener\">ch\u00ednh th\u1ee9c \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh<\/a>&nbsp;v\u00e0o th\u00e1ng 10 n\u0103m 2018.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Nh\u00e0 cung c\u1ea5p Linode d\u1ef1a tr\u00ean&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/api\/\">APIv4<\/a>&nbsp;c\u1ee7a Linode , do \u0111\u00f3 c\u1ea7n c\u00f3 m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp API \u0111\u1ec3 s\u1eed d\u1ee5ng. Xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-build-your-infrastructure-using-terraform-and-linode\/\">S\u1eed d\u1ee5ng Terraform \u0111\u1ec3 cung c\u1ea5p m\u00f4i tr\u01b0\u1eddng Linode<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft h\u01b0\u1edbng d\u1eabn v\u1ec1 c\u00e1ch nh\u1eadn m\u00e3 th\u00f4ng b\u00e1o API v\u00e0 c\u00e0i \u0111\u1eb7t Terraform v\u00e0 nh\u00e0 cung c\u1ea5p Linode tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n.<\/p>\n<p>Nh\u00e0 cung c\u1ea5p Linode c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o c\u00e1c phi\u00ean b\u1ea3n Linode, H\u00ecnh \u1ea3nh, b\u1ea3n ghi mi\u1ec1n, Kh\u1ed1i l\u01b0u tr\u1eef kh\u1ed1i, StackScript v\u00e0 c\u00e1c t\u00e0i nguy\u00ean kh\u00e1c.&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a nh\u00e0 cung c\u1ea5p Linode<\/a>&nbsp;c\u1ee7a Terraform n\u00eau chi ti\u1ebft t\u1eebng t\u00e0i nguy\u00ean c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: <a href=\"https:\/\/github.com\/linode\/terraform-provider-linode\" target=\"_blank\" rel=\"noreferrer noopener\">Nh\u00e0 cung c\u1ea5p Linode c\u1ee7a Terraform<\/a>&nbsp;\u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt v\u00e0 hi\u1ec7n y\u00eau c\u1ea7u Terraform phi\u00ean b\u1ea3n 0.12 tr\u1edf l\u00ean. \u0110\u1ec3 t\u00ecm hi\u1ec3u c\u00e1ch n\u00e2ng c\u1ea5p an to\u00e0n l\u00ean Terraform phi\u00ean b\u1ea3n 0.12 tr\u1edf l\u00ean, h\u00e3y xem&nbsp;<a href=\"https:\/\/www.terraform.io\/upgrade-guides\/0-12.html\" target=\"_blank\" rel=\"noreferrer noopener\">t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Terraform<\/a>&nbsp;. Xem&nbsp;<a href=\"https:\/\/github.com\/hashicorp\/terraform\/blob\/v0.12.0\/CHANGELOG.md\" target=\"_blank\" rel=\"noreferrer noopener\">nh\u1eadt k\u00fd thay \u0111\u1ed5i c\u1ee7a Terraform v0.12<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7 c\u00e1c t\u00ednh n\u0103ng m\u1edbi v\u00e0 ghi ch\u00fa v\u1ec1 s\u1ef1 kh\u00f4ng t\u01b0\u01a1ng th\u00edch c\u1ee7a phi\u00ean b\u1ea3n.<\/p>\n<h2 id=\"infrastructure-as-code\">C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng nh\u01b0 M\u00e3<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#infrastructure-as-code\"><\/a><\/h2>\n<p>Vi\u1ec7c Terraform th\u1ec3 hi\u1ec7n t\u00e0i nguy\u00ean c\u1ee7a b\u1ea1n trong c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng M\u00e3<\/em>&nbsp;(IAC). Nh\u1eefng l\u1ee3i \u00edch c\u1ee7a ph\u01b0\u01a1ng ph\u00e1p n\u00e0y v\u00e0 vi\u1ec7c s\u1eed d\u1ee5ng Terraform bao g\u1ed3m:<\/p>\n<ul>\n<li><strong>Ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n.<\/strong>&nbsp;V\u00ec t\u00e0i nguy\u00ean c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c khai b\u00e1o trong m\u00e3, b\u1ea1n c\u00f3 th\u1ec3 theo d\u00f5i c\u00e1c thay \u0111\u1ed5i \u0111\u1ed1i v\u1edbi m\u00e3 \u0111\u00f3 theo th\u1eddi gian trong c\u00e1c h\u1ec7 th\u1ed1ng ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n nh\u01b0 Git.<\/li>\n<li><strong>Gi\u1ea3m thi\u1ec3u l\u1ed7i c\u1ee7a con ng\u01b0\u1eddi.<\/strong>&nbsp;Ph\u00e2n t\u00edch c\u1ee7a Terraform v\u1ec1 c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n s\u1ebd t\u1ea1o ra c\u00f9ng m\u1ed9t k\u1ebft qu\u1ea3 m\u1ed7i l\u1ea7n t\u1ea1o t\u00e0i nguy\u00ean \u0111\u00e3 khai b\u00e1o c\u1ee7a b\u1ea1n. Ngo\u00e0i ra, vi\u1ec7c y\u00eau c\u1ea7u Terraform \u00e1p d\u1ee5ng c\u00f9ng m\u1ed9t c\u1ea5u h\u00ecnh nhi\u1ec1u l\u1ea7n s\u1ebd kh\u00f4ng d\u1eabn \u0111\u1ebfn vi\u1ec7c t\u1ea1o th\u00eam t\u00e0i nguy\u00ean, v\u00ec Terraform theo d\u00f5i c\u00e1c thay \u0111\u1ed5i m\u00e0 n\u00f3 th\u1ef1c hi\u1ec7n theo th\u1eddi gian.<\/li>\n<li><strong>C\u1ed9ng t\u00e1c t\u1ed1t h\u01a1n gi\u1eefa c\u00e1c th\u00e0nh vi\u00ean trong nh\u00f3m.&nbsp;<\/strong><a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#backends\">C\u00e1c ch\u01b0\u01a1ng tr\u00ecnh ph\u1ee5 tr\u1ee3<\/a>&nbsp;c\u1ee7a Terraform&nbsp;cho ph\u00e9p nhi\u1ec1u th\u00e0nh vi\u00ean trong nh\u00f3m l\u00e0m vi\u1ec7c an to\u00e0n tr\u00ean c\u00f9ng m\u1ed9t c\u1ea5u h\u00ecnh Terraform c\u00f9ng l\u00fac.<\/li>\n<\/ul>\n<h3 id=\"hashicorp-configuration-language\">Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#hashicorp-configuration-language\"><\/a><\/h3>\n<p>C\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a Terraform c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng&nbsp;<a href=\"https:\/\/github.com\/hashicorp\/hcl\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp<\/em><\/a>&nbsp;(HCL) ho\u1eb7c JSON. HCL l\u00e0 ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh do HashiCorp bi\u00ean so\u1ea1n \u0111\u1ec3 s\u1eed d\u1ee5ng v\u1edbi c\u00e1c s\u1ea3n ph\u1ea9m c\u1ee7a m\u00ecnh v\u00e0 \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 con ng\u01b0\u1eddi c\u00f3 th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c v\u00e0 th\u00e2n thi\u1ec7n v\u1edbi m\u00e1y. B\u1ea1n n\u00ean s\u1eed d\u1ee5ng HCL thay v\u00ec JSON cho c\u00e1c tri\u1ec3n khai Terraform c\u1ee7a m\u00ecnh.<\/p>\n<p>C\u00e1c ph\u1ea7n ti\u1ebfp theo s\u1ebd minh h\u1ecda c\u00e1c kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i c\u1ee7a Terraform v\u1edbi c\u00e1c v\u00ed d\u1ee5 \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng HCL. \u0110\u1ec3 c\u00f3 \u0111\u00e1nh gi\u00e1 \u0111\u1ea7y \u0111\u1ee7 h\u01a1n v\u1ec1 c\u00fa ph\u00e1p HCL, h\u00e3y xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/\">Gi\u1edbi thi\u1ec7u v\u1ec1 Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp (HCL)<\/a>&nbsp;.<\/p>\n<h3 id=\"resources\">T\u00e0i nguy\u00ean<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#resources\"><\/a><\/h3>\n<p>Sau \u0111\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 \u0111\u01a1n gi\u1ea3n v\u1ec1 c\u1ea5u h\u00ecnh Terraform ho\u00e0n ch\u1ec9nh trong HCL:<\/p>\n<pre class=\"wp-block-code\"><code>terraform {\n  required_providers {\n    linode = {\n      source = \"linode\/linode\"\n      version = \"1.16.0\"\n    }\n  }\n}\n\nprovider \"linode\" {\n    token = \"your-linode-api-token\"\n}\n\nresource \"linode_instance\" \"example_instance\" {\n    label = \"example_instance_label\"\n    image = \"linode\/ubuntu18.04\"\n    region = \"us-central\"\n    type = \"g6-standard-1\"\n    authorized_keys = &#91;\"ssh-rsa AAAA...Gw== user@example.local\"]\n    root_pass = \"your-root-password\"\n}<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Kh\u00f3a SSH trong v\u00ed d\u1ee5 n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eaft b\u1edbt \u0111\u1ec3 ng\u1eafn g\u1ecdn h\u01a1n.<\/p>\n<p>T\u1ec7p Terraform m\u1eabu n\u00e0y, v\u1edbi ph\u1ea7n m\u1edf r\u1ed9ng t\u1ec7p Terraform&nbsp;<code>.tf<\/code>, bi\u1ec3u di\u1ec5n vi\u1ec7c t\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n Linode duy nh\u1ea5t c\u00f3 nh\u00e3n&nbsp;<code>example_instance_label<\/code>. T\u1ec7p v\u00ed d\u1ee5 n\u00e0y \u0111\u01b0\u1ee3c th\u00eam ti\u1ec1n t\u1ed1 l\u00e0 m\u1ed9t&nbsp;<code>provider<\/code>kh\u1ed1i b\u1eaft bu\u1ed9c, kh\u1ed1i n\u00e0y thi\u1ebft l\u1eadp nh\u00e0 cung c\u1ea5p Linode v\u00e0 b\u1ea1n ph\u1ea3i li\u1ec7t k\u00ea \u1edf \u0111\u00e2u \u0111\u00f3 trong c\u1ea5u h\u00ecnh c\u1ee7a m\u00ecnh.<\/p>\n<p>Kh\u1ed1i&nbsp;<code>provider<\/code>\u0111\u01b0\u1ee3c theo sau b\u1edfi m\u1ed9t khai b\u00e1o&nbsp;<em>t\u00e0i nguy\u00ean<\/em>&nbsp;. Khai b\u00e1o t\u00e0i nguy\u00ean t\u01b0\u01a1ng \u1ee9ng v\u1edbi c\u00e1c th\u00e0nh ph\u1ea7n c\u1ee7a c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng Linode c\u1ee7a b\u1ea1n: Linode instances, Block Storage Volumes, v.v.<\/p>\n<p>T\u00e0i nguy\u00ean c\u00f3 th\u1ec3 ch\u1ea5p nh\u1eadn c\u00e1c \u0111\u1ed1i s\u1ed1&nbsp;<code>region<\/code>v\u00e0&nbsp;<code>type<\/code>l\u00e0 c\u00e1c \u0111\u1ed1i s\u1ed1 b\u1eaft bu\u1ed9c cho&nbsp;<code>linode_instance<\/code>t\u00e0i nguy\u00ean. M\u1eadt kh\u1ea9u g\u1ed1c ph\u1ea3i \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh cho m\u1ecdi Linode, nh\u01b0ng&nbsp;<code>root_pass<\/code>\u0111\u1ed1i s\u1ed1 Terraform l\u00e0 t\u00f9y ch\u1ecdn; n\u1ebfu kh\u00f4ng ch\u1ec9 \u0111\u1ecbnh, m\u1eadt kh\u1ea9u ng\u1eabu nhi\u00ean s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Chu\u1ed7i&nbsp;<code>example_instance<\/code>theo sau&nbsp;<code>linode_instance<\/code>khai b\u00e1o lo\u1ea1i t\u00e0i nguy\u00ean l\u00e0 t\u00ean Terraform d\u00e0nh cho t\u00e0i nguy\u00ean. B\u1ea1n kh\u00f4ng th\u1ec3 khai b\u00e1o nhi\u1ec1u h\u01a1n m\u1ed9t t\u00e0i nguy\u00ean Terraform c\u00f3 c\u00f9ng t\u00ean v\u00e0 lo\u1ea1i t\u00e0i nguy\u00ean.\u0110\u1ed1i&nbsp;<code>label<\/code>s\u1ed1 ch\u1ec9 \u0111\u1ecbnh nh\u00e3n cho phi\u00ean b\u1ea3n Linode trong Linode Manager. T\u00ean n\u00e0y \u0111\u1ed9c l\u1eadp v\u1edbi t\u00ean Terraform cho t\u00e0i nguy\u00ean (m\u1eb7c d\u00f9 b\u1ea1n c\u00f3 th\u1ec3 g\u00e1n c\u00f9ng m\u1ed9t gi\u00e1 tr\u1ecb cho c\u1ea3 hai). T\u00ean Terraform ch\u1ec9 \u0111\u01b0\u1ee3c ghi l\u1ea1i trong&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#state\">tr\u1ea1ng th\u00e1i<\/a>&nbsp;c\u1ee7a Terraform v\u00e0 kh\u00f4ng \u0111\u01b0\u1ee3c truy\u1ec1n \u0111\u1ebfn API Linode. Nh\u00e3n cho c\u00e1c phi\u00ean b\u1ea3n Linode trong c\u00f9ng m\u1ed9t t\u00e0i kho\u1ea3n Linode ph\u1ea3i l\u00e0 duy nh\u1ea5t.<\/p>\n<h3 id=\"data-sources\">Ngu\u1ed3n d\u1eef li\u1ec7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#data-sources\"><\/a><\/h3>\n<p>Trong Terraform, ngu\u1ed3n d\u1eef li\u1ec7u \u0111\u1ea1i di\u1ec7n cho c\u00e1c gi\u00e1 tr\u1ecb ch\u1ec9 \u0111\u1ecdc c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c truy xu\u1ea5t v\u00e0 sau \u0111\u00f3 s\u1eed d\u1ee5ng \u1edf n\u01a1i kh\u00e1c trong c\u1ea5u h\u00ecnh Terraform. S\u1eed d\u1ee5ng Linode Provider cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng truy c\u1eadp v\u00e0o m\u1ed9t s\u1ed1&nbsp;<a href=\"https:\/\/registry.terraform.io\/providers\/linode\/linode\/latest\/docs\/data-sources\/account\" target=\"_blank\" rel=\"noreferrer noopener\">Ngu\u1ed3n d\u1eef li\u1ec7u c\u1ee5 th\u1ec3 c\u1ee7a Linode<\/a>&nbsp;c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho m\u1ee5c \u0111\u00edch n\u00e0y.<\/p>\n<p>Ngu\u1ed3n d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c truy c\u1eadp b\u1eb1ng c\u00e1ch khai b\u00e1o m\u1ed9t&nbsp;<code>data<\/code>kh\u1ed1i ch\u1ee9a b\u1ea5t k\u1ef3 th\u00f4ng tin n\u00e0o \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u. Sau khi kh\u1ed1i d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c khai b\u00e1o, ngu\u1ed3n d\u1eef li\u1ec7u cung c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o m\u1ed9t s\u1ed1 thu\u1ed9c t\u00ednh c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c g\u1ecdi nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ee7a c\u1ea5u h\u00ecnh terraform. Trong v\u00ed d\u1ee5 d\u01b0\u1edbi \u0111\u00e2y,&nbsp;<code>linode_account<\/code>ngu\u1ed3n d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c g\u1ecdi trong&nbsp;<code>data<\/code>kh\u1ed1i v\u00e0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng sau \u0111\u00f3 trong&nbsp;<code>output<\/code>kh\u1ed1i \u0111\u1ec3 xu\u1ea5t&nbsp;<code>email<\/code>thu\u1ed9c t\u00ednh:<\/p>\n<pre class=\"wp-block-code\"><code>...\ndata \"linode_account\" \"account\" {}\n\noutput \"linode_account_email\" {\n        value = \"${data.linode_account.account.email}\"\n}<\/code><\/pre>\n<h3 id=\"dependencies\">Ph\u1ee5 thu\u1ed9c<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#dependencies\"><\/a><\/h3>\n<p>T\u00e0i nguy\u00ean Terraform c\u00f3 th\u1ec3 ph\u1ee5 thu\u1ed9c l\u1eabn nhau. Khi m\u1ed9t t\u00e0i nguy\u00ean ph\u1ee5 thu\u1ed9c v\u00e0o t\u00e0i nguy\u00ean kh\u00e1c, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o sau t\u00e0i nguy\u00ean m\u00e0 n\u00f3 ph\u1ee5 thu\u1ed9c, ngay c\u1ea3 khi n\u00f3 \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea tr\u01b0\u1edbc t\u00e0i nguy\u00ean kh\u00e1c trong t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n.<\/p>\n<p>\u0110o\u1ea1n m\u00e3 sau \u0111\u00e2y m\u1edf r\u1ed9ng v\u00ed d\u1ee5 tr\u01b0\u1edbc. N\u00f3 khai b\u00e1o m\u1ed9t t\u00ean mi\u1ec1n m\u1edbi v\u1edbi b\u1ea3n ghi A nh\u1eafm m\u1ee5c ti\u00eau \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 IP c\u1ee7a phi\u00ean b\u1ea3n Linode:<\/p>\n<pre class=\"wp-block-code\"><code>terraform {\n...\n}\n\nprovider \"linode\" {\n    # ...\n}\n\nresource \"linode_instance\" \"example_instance\" {\n    # ...\n}\n\nresource \"linode_domain\" \"example_domain\" {\n    domain = \"example.com\"\n    soa_email = \"example@example.com\"\n    type = \"master\"\n}\n\nresource \"linode_domain_record\" \"example_domain_record\" {\n    domain_id = linode_domain.example_domain.id\n    name = \"www\"\n    record_type = \"A\"\n    target = linode_instance.example_instance.ip_address\n}<\/code><\/pre>\n<p>B\u1ea3n ghi mi\u1ec1n&nbsp;<code>domain_id<\/code>v\u00e0 \u0111\u1ed1i s\u1ed1 s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#interpolation\">c\u00fa ph\u00e1p n\u1ed9i suy<\/a><code>target<\/code>&nbsp;c\u1ee7a HCL&nbsp;\u0111\u1ec3 l\u1ea5y ID c\u1ee7a t\u00e0i nguy\u00ean mi\u1ec1n v\u00e0 IP c\u1ee7a phi\u00ean b\u1ea3n Linode. Terraform t\u1ea1o ra s\u1ef1&nbsp;<em>ph\u1ee5 thu\u1ed9c ng\u1ea7m \u0111\u1ecbnh<\/em>&nbsp;v\u00e0o t\u00e0i nguy\u00ean&nbsp;v\u00e0&nbsp;cho t\u00e0i&nbsp;nguy\u00ean. Do \u0111\u00f3, b\u1ea3n ghi mi\u1ec1n s\u1ebd kh\u00f4ng \u0111\u01b0\u1ee3c t\u1ea1o cho \u0111\u1ebfn khi phi\u00ean b\u1ea3n Linode v\u00e0 t\u00ean mi\u1ec1n \u0111\u01b0\u1ee3c t\u1ea1o.<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#interpolation\"><\/a><code>example_instanceexample_domainexample_domain_record<\/code><\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u0169ng c\u00f3 th\u1ec3 khai b\u00e1o&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/configuration\/resources.html#explicit-dependencies\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c ph\u1ee5 thu\u1ed9c r\u00f5 r\u00e0ng .<\/a><\/p>\n<h3 id=\"input-variables\">Bi\u1ebfn \u0111\u1ea7u v\u00e0o<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#input-variables\"><\/a><\/h3>\n<p>V\u00ed d\u1ee5 tr\u01b0\u1edbc \u0111\u00f3 \u0111\u00e3 m\u00e3 h\u00f3a c\u1ee9ng d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m trong c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n, bao g\u1ed3m m\u00e3 th\u00f4ng b\u00e1o API v\u00e0 m\u1eadt kh\u1ea9u g\u1ed1c c\u1ee7a b\u1ea1n. \u0110\u1ec3 tr\u00e1nh th\u1ef1c h\u00e0nh n\u00e0y, Terraform cho ph\u00e9p b\u1ea1n cung c\u1ea5p c\u00e1c gi\u00e1 tr\u1ecb cho c\u00e1c \u0111\u1ed1i s\u1ed1 t\u00e0i nguy\u00ean c\u1ee7a m\u00ecnh trong&nbsp;<em>c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o<\/em>&nbsp;. C\u00e1c bi\u1ebfn n\u00e0y \u0111\u01b0\u1ee3c khai b\u00e1o v\u00e0 tham chi\u1ebfu trong c\u1ea5u h\u00ecnh Terraform c\u1ee7a b\u1ea1n (s\u1eed d\u1ee5ng c\u00fa ph\u00e1p n\u1ed9i suy) v\u00e0 c\u00e1c gi\u00e1 tr\u1ecb cho c\u00e1c bi\u1ebfn \u0111\u00f3 \u0111\u01b0\u1ee3c g\u00e1n trong m\u1ed9t t\u1ec7p ri\u00eang.<\/p>\n<p>Bi\u1ebfn \u0111\u1ea7u v\u00e0o c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho d\u1eef li\u1ec7u kh\u00f4ng nh\u1ea1y c\u1ea3m. C\u00e1c t\u1ec7p v\u00ed d\u1ee5 sau s\u1ebd s\u1eed d\u1ee5ng c\u00e1c bi\u1ebfn cho c\u00e1c \u0111\u1ed1i s\u1ed1&nbsp;<code>token<\/code>v\u00e0 nh\u1ea1y c\u1ea3m v\u00e0 c\u00e1c \u0111\u1ed1i s\u1ed1&nbsp;v\u00e0&nbsp;<code>root_pass<\/code>kh\u00f4ng nh\u1ea1y c\u1ea3m&nbsp;:<code>authorized_keysregion<\/code><\/p>\n<pre class=\"wp-block-code\"><code>terraform {\n  required_providers {\n    linode = {\n      source = \"linode\/linode\"\n      version = \"1.16.0\"\n    }\n  }\n}\n\nprovider \"linode\" {\n    token = var.token\n}\n\nresource \"linode_instance\" \"example_instance\" {\n    label = \"example_instance_label\"\n    image = \"linode\/ubuntu18.04\"\n    region = var.region\n    type = \"g6-standard-1\"\n    authorized_keys = &#91;var.ssh_key]\n    root_pass = var.root_pass\n}\n\nvariable \"token\" {}\nvariable \"root_pass\" {}\nvariable \"ssh_key\" {}\nvariable \"region\" {\n  default = \"us-southeast\"\n}<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>token = \"your-linode-api-token\"\nroot_pass = \"your-root-password\"\nssh_key = \"ssh-rsa AAAA...Gw== user@example.local\"<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: \u0110\u1eb7t t\u1ea5t c\u1ea3 c\u00e1c t\u1ec7p c\u1ee7a d\u1ef1 \u00e1n Terraform v\u00e0o c\u00f9ng m\u1ed9t th\u01b0 m\u1ee5c. Terraform s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea3i c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn \u0111\u1ea7u v\u00e0o t\u1eeb b\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o c\u00f3 t\u00ean&nbsp;<code>terraform.tfvars<\/code>ho\u1eb7c k\u1ebft th\u00fac b\u1eb1ng&nbsp;<code>.auto.tfvars<\/code>.<\/p>\n<p>Bi\u1ebfn&nbsp;<code>region<\/code>kh\u00f4ng \u0111\u01b0\u1ee3c g\u00e1n gi\u00e1 tr\u1ecb c\u1ee5 th\u1ec3, do \u0111\u00f3 n\u00f3 s\u1ebd s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh \u0111\u01b0\u1ee3c cung c\u1ea5p trong khai b\u00e1o bi\u1ebfn. Xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#input-variables\">Gi\u1edbi thi\u1ec7u v\u1ec1 Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft th\u00f4ng tin chi ti\u1ebft h\u01a1n v\u1ec1 c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o.<\/p>\n<h2 id=\"terraform-cli\">Giao di\u1ec7n d\u00f2ng l\u1ec7nh Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#terraform-cli\"><\/a><\/h2>\n<p>B\u1ea1n t\u01b0\u01a1ng t\u00e1c v\u1edbi Terraform th\u00f4ng qua giao di\u1ec7n d\u00f2ng l\u1ec7nh c\u1ee7a n\u00f3. Sau khi b\u1ea1n \u0111\u00e3 t\u1ea1o c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh trong d\u1ef1 \u00e1n Terraform c\u1ee7a m\u00ecnh, b\u1ea1n c\u1ea7n ch\u1ea1y l\u1ec7nh&nbsp;<code>init<\/code>t\u1eeb th\u01b0 m\u1ee5c c\u1ee7a d\u1ef1 \u00e1n:<\/p>\n<pre class=\"wp-block-code\"><code>terraform init\n<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y s\u1ebd t\u1ea3i xu\u1ed1ng plugin nh\u00e0 cung c\u1ea5p Linode v\u00e0 th\u1ef1c hi\u1ec7n c\u00e1c h\u00e0nh \u0111\u1ed9ng kh\u00e1c c\u1ea7n thi\u1ebft \u0111\u1ec3 kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y l\u1ec7nh n\u00e0y nhi\u1ec1u l\u1ea7n, nh\u01b0ng nh\u00ecn chung b\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ea1y l\u1ea1i n\u1ebfu b\u1ea1n th\u00eam m\u1ed9t nh\u00e0 cung c\u1ea5p kh\u00e1c v\u00e0o d\u1ef1 \u00e1n c\u1ee7a m\u00ecnh.<\/p>\n<h3 id=\"plan-and-apply\">L\u00ean k\u1ebf ho\u1ea1ch v\u00e0 \u00e1p d\u1ee5ng<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#plan-and-apply\"><\/a><\/h3>\n<p>Sau khi b\u1ea1n \u0111\u00e3 khai b\u00e1o t\u00e0i nguy\u00ean c\u1ee7a m\u00ecnh trong c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh, b\u1ea1n t\u1ea1o ch\u00fang b\u1eb1ng c\u00e1ch ch\u1ea1y&nbsp;<code>apply<\/code>l\u1ec7nh Terraform t\u1eeb th\u01b0 m\u1ee5c d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n. Tuy nhi\u00ean, b\u1ea1n n\u00ean lu\u00f4n x\u00e1c minh r\u1eb1ng Terraform s\u1ebd t\u1ea1o t\u00e0i nguy\u00ean theo c\u00e1ch b\u1ea1n mong \u0111\u1ee3i tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 thay \u0111\u1ed5i th\u1ef1c t\u1ebf n\u00e0o \u0111\u1ed1i v\u1edbi c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n. \u0110\u1ec3 th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y, tr\u01b0\u1edbc ti\u00ean b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y&nbsp;<code>plan<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>terraform plan\n<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y s\u1ebd t\u1ea1o b\u00e1o c\u00e1o n\u00eau chi ti\u1ebft nh\u1eefng h\u00e0nh \u0111\u1ed9ng m\u00e0 Terraform s\u1ebd th\u1ef1c hi\u1ec7n \u0111\u1ec3 thi\u1ebft l\u1eadp t\u00e0i nguy\u00ean Linode c\u1ee7a b\u1ea1n.<\/p>\n<p>N\u1ebfu b\u1ea1n h\u00e0i l\u00f2ng v\u1edbi b\u00e1o c\u00e1o n\u00e0y, h\u00e3y ch\u1ea1y&nbsp;<code>apply<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>terraform apply\n<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y s\u1ebd y\u00eau c\u1ea7u b\u1ea1n x\u00e1c nh\u1eadn r\u1eb1ng b\u1ea1n mu\u1ed1n ti\u1ebfp t\u1ee5c. Khi Terraform ho\u00e0n t\u1ea5t vi\u1ec7c \u00e1p d\u1ee5ng c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n, n\u00f3 s\u1ebd hi\u1ec3n th\u1ecb b\u00e1o c\u00e1o v\u1ec1 nh\u1eefng h\u00e0nh \u0111\u1ed9ng \u0111\u00e3 th\u1ef1c hi\u1ec7n.<\/p>\n<h3 id=\"state\">T\u00ecnh tr\u1ea1ng<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#state\"><\/a><\/h3>\n<p>Khi Terraform ph\u00e2n t\u00edch v\u00e0 \u00e1p d\u1ee5ng c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n, n\u00f3 s\u1ebd t\u1ea1o ra m\u1ed9t bi\u1ec3u di\u1ec5n n\u1ed9i b\u1ed9 c\u1ee7a c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng m\u00e0 n\u00f3 \u0111\u00e3 t\u1ea1o v\u00e0 s\u1eed d\u1ee5ng n\u00f3 \u0111\u1ec3 theo d\u00f5i nh\u1eefng thay \u0111\u1ed5i \u0111\u00e3 th\u1ef1c hi\u1ec7n. Th\u00f4ng tin&nbsp;<em>tr\u1ea1ng th\u00e1i<\/em>&nbsp;n\u00e0y \u0111\u01b0\u1ee3c ghi l\u1ea1i trong JSON trong m\u1ed9t t\u1ec7p c\u1ee5c b\u1ed9 \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean theo m\u1eb7c \u0111\u1ecbnh, nh\u01b0ng n\u00f3 c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef trong&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#backends\">c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh ph\u1ee5 tr\u1ee3<\/a><code>terraform.tfstate<\/code>&nbsp;kh\u00e1c&nbsp;.<\/p>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: D\u1eef li\u1ec7u c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng nh\u1ea1y c\u1ea3m c\u1ee7a b\u1ea1n (nh\u01b0 m\u1eadt kh\u1ea9u v\u00e0 m\u00e3 th\u00f4ng b\u00e1o) \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb d\u01b0\u1edbi d\u1ea1ng v\u0103n b\u1ea3n thu\u1ea7n t\u00fay trong&nbsp;<code>terraform.tfstate<\/code>t\u1ec7p c\u1ee7a b\u1ea1n. Xem l\u1ea1i&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/secrets-management-with-terraform\/#how-to-manage-your-state-file\">Qu\u1ea3n l\u00fd b\u00ed m\u1eadt v\u1edbi Terraform<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft h\u01b0\u1edbng d\u1eabn v\u1ec1 c\u00e1ch b\u1ea3o m\u1eadt c\u00e1c b\u00ed m\u1eadt n\u00e0y.<\/p>\n<h3 id=\"other-commands\">C\u00e1c l\u1ec7nh kh\u00e1c<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#other-commands\"><\/a><\/h3>\n<p>C\u00f3 c\u00e1c l\u1ec7nh h\u1eefu \u00edch kh\u00e1c, nh\u01b0&nbsp;<code>terraform show<\/code>, b\u00e1o c\u00e1o phi\u00ean b\u1ea3n c\u00f3 th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c c\u1ee7a tr\u1ea1ng th\u00e1i Terraform c\u1ee7a b\u1ea1n. Danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/commands\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c l\u1ec7nh Terraform<\/a>&nbsp;c\u00f3 trong t\u00e0i li\u1ec7u Terraform ch\u00ednh th\u1ee9c.<\/p>\n<h2 id=\"provisioners\">Ng\u01b0\u1eddi cung c\u1ea5p<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#provisioners\"><\/a><\/h2>\n<p>Ngo\u00e0i c\u00e1c khai b\u00e1o t\u00e0i nguy\u00ean, c\u1ea5u h\u00ecnh Terraform c\u00f3 th\u1ec3 bao g\u1ed3m&nbsp;<em>provisioner<\/em>&nbsp;. B\u1ea1n khai b\u00e1o provisioner \u0111\u1ec3 ch\u1ea1y c\u00e1c t\u1eadp l\u1ec7nh v\u00e0 l\u1ec7nh trong m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n c\u1ee5c b\u1ed9 ho\u1eb7c tr\u00ean c\u00e1c m\u00e1y ch\u1ee7 do Terraform qu\u1ea3n l\u00fd. C\u00e1c h\u00e0nh \u0111\u1ed9ng n\u00e0y \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n khi b\u1ea1n \u00e1p d\u1ee5ng c\u1ea5u h\u00ecnh Terraform c\u1ee7a m\u00ecnh.<\/p>\n<p>V\u00ed d\u1ee5 sau \u0111\u00e2y t\u1ea3i l\u00ean m\u1ed9t t\u1eadp l\u1ec7nh thi\u1ebft l\u1eadp v\u00e0o m\u1ed9t phi\u00ean b\u1ea3n Linode m\u1edbi t\u1ea1o v\u00e0 sau \u0111\u00f3 th\u1ef1c thi n\u00f3. M\u1eabu n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 kh\u1edfi \u0111\u1ed9ng phi\u00ean b\u1ea3n m\u1edbi ho\u1eb7c ghi danh n\u00f3 v\u00e0o qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh:<\/p>\n<pre class=\"wp-block-code\"><code>resource \"linode_instance\" \"example_instance\" {\n  # ...\n\n  connection {\n      type     = \"ssh\"\n      user     = \"root\"\n      password = var.root_pass\n      host     = self.ip_address\n  }\n\n  provisioner \"file\" {\n      source      = \"setup_script.sh\"\n      destination = \"\/tmp\/setup_script.sh\"\n  }\n\n  provisioner \"remote-exec\" {\n    inline = &#91;\n      \"chmod +x \/tmp\/setup_script.sh\",\n      \"\/tmp\/setup_script.sh\",\n    ]\n  }\n}<\/code><\/pre>\n<p>Khi m\u1ed9t \u0111\u01a1n v\u1ecb cung c\u1ea5p \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh, \u0111\u01a1n v\u1ecb \u0111\u00f3 c\u0169ng ph\u1ea3i bao g\u1ed3m vi\u1ec7c b\u1ed5 sung m\u1ed9t&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/language\/resources\/provisioners\/connection.html\" target=\"_blank\" rel=\"noreferrer noopener\">kh\u1ed1i k\u1ebft n\u1ed1i<\/a>&nbsp;l\u1ed3ng trong kh\u1ed1i t\u00e0i nguy\u00ean \u0111\u1ec3 m\u00f4 t\u1ea3 c\u00e1ch Terraform s\u1ebd k\u1ebft n\u1ed1i v\u1edbi t\u00e0i nguy\u00ean t\u1eeb xa.<\/p>\n<p>H\u1ea7u h\u1ebft c\u00e1c provisioner \u0111\u01b0\u1ee3c khai b\u00e1o b\u00ean trong m\u1ed9t khai b\u00e1o t\u00e0i nguy\u00ean. Khi nhi\u1ec1u provisioner \u0111\u01b0\u1ee3c khai b\u00e1o b\u00ean trong m\u1ed9t t\u00e0i nguy\u00ean, ch\u00fang \u0111\u01b0\u1ee3c th\u1ef1c thi theo th\u1ee9 t\u1ef1 \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea. \u0110\u1ec3 bi\u1ebft danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/provisioners\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c provisioner<\/a>&nbsp;, h\u00e3y xem t\u00e0i li\u1ec7u Terraform ch\u00ednh th\u1ee9c.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Linode&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/r\/stackscript.html\" target=\"_blank\" rel=\"noreferrer noopener\">StackScripts<\/a>&nbsp;c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 thi\u1ebft l\u1eadp m\u1ed9t phi\u00ean b\u1ea3n Linode m\u1edbi. M\u1ed9t \u0111i\u1ec3m kh\u00e1c bi\u1ec7t gi\u1eefa vi\u1ec7c s\u1eed d\u1ee5ng StackScripts v\u00e0 c\u00e1c&nbsp;<code>file<\/code>provisioner&nbsp;<code>remote-exec<\/code>l\u00e0 c\u00e1c provisioner \u0111\u00f3 s\u1ebd ch\u1ea1y v\u00e0 ho\u00e0n t\u1ea5t \u0111\u1ed3ng b\u1ed9 tr\u01b0\u1edbc khi Terraform ti\u1ebfp t\u1ee5c \u00e1p d\u1ee5ng k\u1ebf ho\u1ea1ch c\u1ee7a b\u1ea1n, trong khi StackScript s\u1ebd ch\u1ea1y song song trong khi Terraform t\u1ea1o ph\u1ea7n c\u00f2n l\u1ea1i c\u1ee7a c\u00e1c t\u00e0i nguy\u00ean c\u00f2n l\u1ea1i c\u1ee7a b\u1ea1n. Do \u0111\u00f3, Terraform c\u00f3 th\u1ec3 ho\u00e0n t\u1ea5t \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh tr\u01b0\u1edbc khi StackScript ch\u1ea1y xong.<\/p>\n<h2 id=\"modules\">C\u00e1c m\u00f4-\u0111un<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#modules\"><\/a><\/h2>\n<p>Terraform cho ph\u00e9p b\u1ea1n s\u1eafp x\u1ebfp c\u1ea5u h\u00ecnh c\u1ee7a m\u00ecnh th\u00e0nh c\u00e1c c\u1ea5u tr\u00fac c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>m\u00f4-\u0111un<\/em>&nbsp;. \u0110i\u1ec1u n\u00e0y h\u1eefu \u00edch n\u1ebfu b\u1ea1n c\u1ea7n t\u1ea1o nhi\u1ec1u phi\u00ean b\u1ea3n c\u1ee7a c\u00f9ng m\u1ed9t c\u1ee5m m\u00e1y ch\u1ee7. Xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/\">T\u1ea1o M\u00f4-\u0111un Terraform<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 vi\u1ec7c t\u1ea1o v\u00e0 s\u1eed d\u1ee5ng m\u00f4-\u0111un.<\/p>\n<h2 id=\"backends\">Ph\u1ea7n cu\u1ed1i<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#backends\"><\/a><\/h2>\n<p><a href=\"https:\/\/www.terraform.io\/docs\/backends\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Theo m\u1eb7c \u0111\u1ecbnh, Terraform duy tr\u00ec tr\u1ea1ng th\u00e1i c\u1ee7a n\u00f3 trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n. Terraform c\u0169ng h\u1ed7 tr\u1ee3 l\u01b0u tr\u1eef tr\u1ea1ng th\u00e1i c\u1ee7a b\u1ea1n trong c\u00e1c backend<\/em><\/a>&nbsp;kh\u00f4ng c\u1ee5c b\u1ed9&nbsp;. C\u00e1c l\u1ee3i \u00edch c\u1ee7a vi\u1ec7c \u0111\u01b0a tr\u1ea1ng th\u00e1i c\u1ee7a b\u1ea1n v\u00e0o m\u1ed9t backend kh\u00e1c bao g\u1ed3m:<\/p>\n<ul>\n<li><strong>C\u1ed9ng t\u00e1c t\u1ed1t h\u01a1n v\u1edbi nh\u00f3m c\u1ee7a b\u1ea1n.<\/strong>&nbsp;Backend cho ph\u00e9p b\u1ea1n chia s\u1ebb c\u00f9ng tr\u1ea1ng th\u00e1i v\u1edbi c\u00e1c th\u00e0nh vi\u00ean kh\u00e1c trong nh\u00f3m c\u00f3 quy\u1ec1n truy c\u1eadp v\u00e0o backend.<\/li>\n<li><strong>B\u1ea3o m\u1eadt t\u1ed1t h\u01a1n.<\/strong>&nbsp;Th\u00f4ng tin tr\u1ea1ng th\u00e1i \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef v\u00e0 truy xu\u1ea5t t\u1eeb \u200b\u200bph\u1ea7n ph\u1ee5 tr\u1ee3 ch\u1ec9 \u0111\u01b0\u1ee3c l\u01b0u trong b\u1ed9 nh\u1edb tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n.<\/li>\n<li><strong>Ho\u1ea1t \u0111\u1ed9ng t\u1eeb xa.<\/strong>&nbsp;Khi l\u00e0m vi\u1ec7c v\u1edbi c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng l\u1edbn,&nbsp;<code>terraform apply<\/code>c\u00f3 th\u1ec3 m\u1ea5t nhi\u1ec1u th\u1eddi gian \u0111\u1ec3 ho\u00e0n th\u00e0nh. M\u1ed9t s\u1ed1 backend cho ph\u00e9p b\u1ea1n ch\u1ea1y&nbsp;<code>apply<\/code>t\u1eeb xa, thay v\u00ec tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<p>C\u00e1c&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/backends\/types\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">lo\u1ea1i ch\u01b0\u01a1ng tr\u00ecnh ph\u1ee5 tr\u1ee3 c\u00f3 s\u1eb5n<\/a>&nbsp;\u0111\u01b0\u1ee3c li\u1ec7t k\u00ea trong t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Terraform.<\/p>\n<h2 id=\"importing\">Nh\u1eadp kh\u1ea9u<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#importing\"><\/a><\/h2>\n<p>C\u00f3 th\u1ec3 nh\u1eadp c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng Linode \u0111\u01b0\u1ee3c t\u1ea1o b\u00ean ngo\u00e0i Terraform v\u00e0o g\u00f3i Terraform c\u1ee7a b\u1ea1n. Xem l\u1ea1i&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/import-existing-infrastructure-to-terraform\/\">Nh\u1eadp c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng hi\u1ec7n c\u00f3 v\u00e0o Terraform<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft h\u01b0\u1edbng d\u1eabn v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y.<\/p>\n<h2 id=\"next-steps\">C\u00e1c b\u01b0\u1edbc ti\u1ebfp theo<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/#next-steps\"><\/a><\/h2>\n<p>\u0110\u1ec3 b\u1eaft \u0111\u1ea7u c\u00e0i \u0111\u1eb7t Terraform v\u00e0 t\u1ea1o d\u1ef1 \u00e1n \u0111\u1ea7u ti\u00ean, h\u00e3y \u0111\u1ecdc h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-build-your-infrastructure-using-terraform-and-linode\/\">S\u1eed d\u1ee5ng Terraform \u0111\u1ec3 cung c\u1ea5p m\u00f4i tr\u01b0\u1eddng Linode<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Terraform<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-terraform\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Terraform&nbsp;c\u1ee7a HashiCorp l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u1ed1i h\u1ee3p cho ph\u00e9p b\u1ea1n th\u1ec3 hi\u1ec7n c\u00e1c phi\u00ean b\u1ea3n Linode v\u00e0 c\u00e1c t\u00e0i nguy\u00ean kh\u00e1c b\u1eb1ng m\u00e3 khai b\u00e1o b\u00ean trong c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh, thay v\u00ec t\u1ea1o th\u1ee7 c\u00f4ng c\u00e1c t\u00e0i nguy\u00ean \u0111\u00f3 th\u00f4ng qua Linode Manager ho\u1eb7c API. Th\u1ef1c h\u00e0nh n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;C\u01a1 s\u1edf h\u1ea1<\/p>\n","protected":false},"author":1,"featured_media":36163,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[126],"tags":[],"class_list":["post-35006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-terraform"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=35006"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36163"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}