{"id":35008,"date":"2024-09-25T15:45:52","date_gmt":"2024-09-25T08:45:52","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/25\/create-a-terraform-module\/"},"modified":"2024-09-25T15:45:52","modified_gmt":"2024-09-25T08:45:52","slug":"create-a-terraform-module","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/25\/create-a-terraform-module\/","title":{"rendered":"T\u1ea1o m\u1ed9t Terraform Module"},"content":{"rendered":"<p>Terraform l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u1ed1i h\u1ee3p ph\u1ed5 bi\u1ebfn c\u1ee7a&nbsp;<a href=\"https:\/\/www.hashicorp.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">HashiCorp<\/a>&nbsp;. C\u00f4ng c\u1ee5 n\u00e0y \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00e2y d\u1ef1ng, duy tr\u00ec v\u00e0 t\u1ea1o phi\u00ean b\u1ea3n c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng m\u1ed9t c\u00e1ch an to\u00e0n. C\u00e1c m\u00f4-\u0111un Terraform cho ph\u00e9p b\u1ea1n t\u1ed5 ch\u1ee9c m\u00e3 c\u1ea5u h\u00ecnh t\u1ed1t h\u01a1n v\u00e0 l\u00e0m cho m\u00e3 c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng.<\/p>\n<p>Trong h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n s\u1ebd t\u1ea1o m\u1ed9t m\u00f4-\u0111un&nbsp;<em>Linode StackScripts<\/em>&nbsp;. M\u00f4-\u0111un n\u00e0y s\u1ebd tri\u1ec3n khai m\u1ed9t phi\u00ean b\u1ea3n Linode t\u1eeb m\u1ed9t StackScript m\u00e0 b\u1ea1n s\u1ebd t\u1ea1o. M\u00f4-\u0111un n\u00e0y s\u1ebd bao g\u1ed3m c\u00e1c m\u00f4-\u0111un l\u1ed3ng nhau chia t\u00e1ch c\u00e1c t\u00e0i nguy\u00ean c\u1ea7n thi\u1ebft gi\u1eefa&nbsp;<em>m\u00f4-\u0111un g\u1ed1c<\/em>&nbsp;, m\u1ed9t&nbsp;<code>linode_instance<\/code>m\u00f4-\u0111un v\u00e0 m\u1ed9t&nbsp;<code>stackscripts<\/code>m\u00f4-\u0111un.<\/p>\n<h2 id=\"terraform-modules\">M\u00f4-\u0111un Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#terraform-modules\"><\/a><\/h2>\n<h3 id=\"what-is-a-terraform-module\">M\u00f4-\u0111un Terraform l\u00e0 g\u00ec?<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#what-is-a-terraform-module\"><\/a><\/h3>\n<p>V\u1ec1 m\u1eb7t ch\u00ednh th\u1ee9c, m\u1ed9t m\u00f4-\u0111un Terraform ch\u1ee9a nhi\u1ec1u t\u00e0i nguy\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u1edbi nhau, nh\u01b0ng n\u1ebfu b\u1ea1n nh\u00ecn v\u00e0o m\u1ed9t m\u00f4-\u0111un, \u0111\u00f3 l\u00e0 m\u1ed9t th\u01b0 m\u1ee5c c\u00f3 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh Terraform \u0111\u01b0\u1ee3c ch\u1ee9a b\u00ean trong. C\u00e1c m\u00f4-\u0111un c\u00f3 th\u1ec3 t\u1ea1o ra c\u00e1c b\u1ea3n t\u00f3m t\u1eaft nh\u1eb9 \u0111\u1ec3 c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 theo ki\u1ebfn \u200b\u200btr\u00fac c\u1ee7a n\u00f3, tr\u00e1i ng\u01b0\u1ee3c v\u1edbi c\u00e1c thu\u1eadt ng\u1eef tr\u1ef1c ti\u1ebfp c\u1ee7a c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng v\u1eadt l\u00fd. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 l\u01b0u tr\u1eef c\u00e1c m\u00f4-\u0111un Terraform c\u1ee7a m\u00ecnh tr\u00ean c\u00e1c d\u1ecbch v\u1ee5 ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n t\u1eeb xa, nh\u01b0 Git, \u0111\u1ec3 nh\u1eefng ng\u01b0\u1eddi kh\u00e1c s\u1eed d\u1ee5ng.&nbsp;<a href=\"https:\/\/registry.terraform.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Terraform Module Registry<\/a>&nbsp;l\u01b0u tr\u1eef c\u00e1c m\u00f4-\u0111un c\u1ed9ng \u0111\u1ed3ng m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng l\u1ea1i cho c\u00e1c c\u1ea5u h\u00ecnh Terraform c\u1ee7a ri\u00eang m\u00ecnh ho\u1eb7c b\u1ea1n c\u00f3 th\u1ec3 xu\u1ea5t b\u1ea3n c\u00e1c m\u00f4-\u0111un c\u1ee7a ri\u00eang m\u00ecnh \u0111\u1ec3 c\u1ed9ng \u0111\u1ed3ng Terraform s\u1eed d\u1ee5ng. \u0110\u1ecdc&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/language\/modules\/develop\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">ph\u1ea7n &#8220;M\u00f4-\u0111un&#8221;<\/a>&nbsp;c\u1ee7a T\u00e0i li\u1ec7u ng\u00f4n ng\u1eef Terraform \u0111\u01b0\u1ee3c \u0111\u1ec1 xu\u1ea5t \u0111\u1ec3 bi\u1ebft th\u00eam chi ti\u1ebft.<\/p>\n<h3 id=\"how-do-i-create-a-terraform-module\">L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 t\u1ea1o M\u00f4-\u0111un Terraform?<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#how-do-i-create-a-terraform-module\"><\/a><\/h3>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y bao g\u1ed3m vi\u1ec7c t\u1ea1o m\u1ed9t m\u00f4-\u0111un Terraform \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 tri\u1ec3n khai m\u1ed9t phi\u00ean b\u1ea3n Linode. Tuy nhi\u00ean, n\u1ebfu b\u1ea1n v\u1eabn c\u00f2n th\u1eafc m\u1eafc, HashiCorp \u0111\u00e3 \u0111\u0103ng m\u1ed9t&nbsp;<a href=\"https:\/\/learn.hashicorp.com\/collections\/terraform\/modules\" target=\"_blank\" rel=\"noreferrer noopener\">lo\u1ea1t h\u01b0\u1edbng d\u1eabn v\u1ec1 c\u00e1c m\u00f4-\u0111un Terraform<\/a>&nbsp;tr\u00ean HashiCorp Learn v\u00e0&nbsp;<a href=\"https:\/\/learn.hashicorp.com\/tutorials\/terraform\/module-create?in=terraform\/modules\" target=\"_blank\" rel=\"noreferrer noopener\">ph\u1ea7n &#8220;X\u00e2y d\u1ef1ng m\u1ed9t m\u00f4-\u0111un&#8221;<\/a>&nbsp;\u0111\u01b0\u1ee3c t\u00ednh th\u1eddi gian ch\u1ec9 m\u1ea5t kho\u1ea3ng 15 ph\u00fat. Ch\u00fang t\u00f4i khuy\u00ean b\u1ea1n n\u00ean tham gia b\u00e0i h\u1ecdc \u0111\u00f3 \u0111\u1ec3 t\u00ecm hi\u1ec3u th\u00eam.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#before-you-begin\"><\/a><\/h2>\n<p>1.C\u00e0i \u0111\u1eb7t Terraform tr\u00ean m\u00e1y t\u00ednh c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n b\u1eb1ng c\u00e1c b\u01b0\u1edbc t\u00ecm th\u1ea5y trong ph\u1ea7n&nbsp;<strong>C\u00e0i \u0111\u1eb7t Terraform<\/strong>&nbsp;c\u1ee7a h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-build-your-infrastructure-using-terraform-and-linode\/#install-terraform\">S\u1eed d\u1ee5ng Terraform \u0111\u1ec3 cung c\u1ea5p m\u00f4i tr\u01b0\u1eddng Linode<\/a>&nbsp;. Th\u01b0 m\u1ee5c d\u1ef1 \u00e1n Terraform c\u1ee7a b\u1ea1n ph\u1ea3i \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean l\u00e0&nbsp;<code>linode_stackscripts<\/code>.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: <a href=\"https:\/\/github.com\/terraform-providers\/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<p>2.Terraform y\u00eau c\u1ea7u m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp API. L\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/api\/get-started\/#get-an-access-token\">B\u1eaft \u0111\u1ea7u v\u1edbi API Linode<\/a>&nbsp;\u0111\u1ec3 l\u1ea5y m\u00e3 th\u00f4ng b\u00e1o.<\/p>\n<p>3.Ho\u00e0n th\u00e0nh c\u00e1c b\u01b0\u1edbc trong ph\u1ea7n&nbsp;<strong>C\u1ea5u h\u00ecnh Git<\/strong>&nbsp;c\u1ee7a h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-configure-git\/#configure-git\">B\u1eaft \u0111\u1ea7u v\u1edbi Git<\/a>&nbsp;.<\/p>\n<p>4.Xem l\u1ea1i&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-a-wordpress-site-using-terraform-and-linode-stackscripts\/\">Tri\u1ec3n khai trang web WordPress b\u1eb1ng Terraform v\u00e0 StackScripts<\/a>&nbsp;\u0111\u1ec3 l\u00e0m quen v\u1edbi t\u00e0i nguy\u00ean StackScript c\u1ee7a nh\u00e0 cung c\u1ea5p Linode.<\/p>\n<h2 id=\"standard-terraform-module-structure\">C\u1ea5u tr\u00fac m\u00f4-\u0111un Terraform chu\u1ea9n<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#standard-terraform-module-structure\"><\/a><\/h2>\n<p>C\u1ea5u tr\u00fac m\u00f4-\u0111un chu\u1ea9n c\u1ee7a Terraform cung c\u1ea5p h\u01b0\u1edbng d\u1eabn v\u1ec1 b\u1ed1 c\u1ee5c t\u1ec7p v\u00e0 th\u01b0 m\u1ee5c cho c\u00e1c m\u00f4-\u0111un c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng. N\u1ebfu b\u1ea1n mu\u1ed1n c\u00f4ng khai m\u00f4-\u0111un c\u1ee7a m\u00ecnh v\u1edbi c\u1ed9ng \u0111\u1ed3ng Terraform, b\u1ed1 c\u1ee5c \u0111\u01b0\u1ee3c \u0111\u1ec1 xu\u1ea5t cho ph\u00e9p Terraform t\u1ea1o t\u00e0i li\u1ec7u v\u00e0 l\u1eadp ch\u1ec9 m\u1ee5c c\u00e1c m\u00f4-\u0111un cho&nbsp;<a href=\"https:\/\/registry.terraform.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Terraform Module Registry<\/a>&nbsp;.<\/p>\n<ul>\n<li>Y\u00eau c\u1ea7u c\u1ea5u tr\u00fac m\u00f4-\u0111un ch\u00ednh l\u00e0 ph\u1ea3i c\u00f3 m\u1ed9t&nbsp;<em>m\u00f4-\u0111un g\u1ed1c<\/em>&nbsp;. M\u00f4-\u0111un g\u1ed1c l\u00e0 th\u01b0 m\u1ee5c ch\u1ee9a c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh Terraform \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng mong mu\u1ed1n c\u1ee7a b\u1ea1n. C\u00e1c t\u1ec7p n\u00e0y cung c\u1ea5p \u0111i\u1ec3m v\u00e0o b\u1ea5t k\u1ef3 m\u00f4-\u0111un l\u1ed3ng nhau n\u00e0o m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng.<\/li>\n<li>B\u1ea5t k\u1ef3 m\u00f4-\u0111un n\u00e0o c\u0169ng ph\u1ea3i bao g\u1ed3m \u00edt nh\u1ea5t a&nbsp;<code>main.tf<\/code>, a&nbsp;<code>variables.tf<\/code>v\u00e0 m\u1ed9t&nbsp;<code>outputs.tf<\/code>t\u1ec7p. Quy \u01b0\u1edbc \u0111\u1eb7t t\u00ean n\u00e0y \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb nh\u01b0ng kh\u00f4ng b\u1eaft bu\u1ed9c.\n<ul>\n<li>N\u1ebfu s\u1eed d\u1ee5ng c\u00e1c m\u00f4-\u0111un l\u1ed3ng nhau \u0111\u1ec3 chia nh\u1ecf c\u00e1c t\u00e0i nguy\u00ean c\u1ea7n thi\u1ebft c\u1ee7a c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng,&nbsp;<code>main.tf<\/code>t\u1ec7p s\u1ebd ch\u1ee9a t\u1ea5t c\u1ea3 c\u00e1c kh\u1ed1i m\u00f4-\u0111un c\u1ee7a b\u1ea1n v\u00e0 b\u1ea5t k\u1ef3 t\u00e0i nguy\u00ean c\u1ea7n thi\u1ebft n\u00e0o kh\u00f4ng c\u00f3 trong c\u00e1c m\u00f4-\u0111un l\u1ed3ng nhau c\u1ee7a b\u1ea1n.&nbsp;<code>main.tf<\/code>T\u1ec7p m\u00f4-\u0111un \u0111\u01a1n gi\u1ea3n, kh\u00f4ng c\u00f3 b\u1ea5t k\u1ef3 m\u00f4-\u0111un l\u1ed3ng nhau n\u00e0o, s\u1ebd khai b\u00e1o t\u1ea5t c\u1ea3 c\u00e1c t\u00e0i nguy\u00ean trong t\u1ec7p n\u00e0y.<\/li>\n<li>C\u00e1c t\u1ec7p&nbsp;<code>variables.tf<\/code>v\u00e0&nbsp;<code>outputs.tf<\/code>ch\u1ee9a c\u00e1c khai b\u00e1o bi\u1ebfn \u0111\u1ea7u v\u00e0o v\u00e0 bi\u1ebfn \u0111\u1ea7u ra. T\u1ea5t c\u1ea3 c\u00e1c bi\u1ebfn v\u00e0 \u0111\u1ea7u ra ph\u1ea3i bao g\u1ed3m m\u00f4 t\u1ea3.<\/li>\n<\/ul>\n<\/li>\n<li>N\u1ebfu s\u1eed d\u1ee5ng c\u00e1c m\u00f4-\u0111un l\u1ed3ng nhau, ch\u00fang ph\u1ea3i n\u1eb1m trong th\u01b0 m\u1ee5c con c\u1ee7a m\u00f4-\u0111un g\u1ed1c c\u00f3 t\u00ean l\u00e0&nbsp;<code>modules\/<\/code>.<\/li>\n<li>N\u1ebfu c\u00e1c m\u00f4-\u0111un c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef tr\u00ean Module Registry c\u1ee7a Terraform, c\u00e1c m\u00f4-\u0111un g\u1ed1c v\u00e0 b\u1ea5t k\u1ef3 m\u00f4-\u0111un l\u1ed3ng nhau n\u00e0o c\u0169ng ph\u1ea3i ch\u1ee9a m\u1ed9t&nbsp;<code>README.MD<\/code>t\u1ec7p c\u00f3 m\u00f4 t\u1ea3 gi\u1ea3i th\u00edch m\u1ee5c \u0111\u00edch s\u1eed d\u1ee5ng d\u1ef1 ki\u1ebfn \u200b\u200bc\u1ee7a m\u00f4-\u0111un.<\/li>\n<li>B\u1ea1n c\u00f3 th\u1ec3 cung c\u1ea5p v\u00ed d\u1ee5 trong th\u01b0 m\u1ee5c con c\u00f3 t\u00ean&nbsp;<code>examples<\/code>l\u00e0 th\u01b0 m\u1ee5c m\u00f4-\u0111un g\u1ed1c.<\/li>\n<\/ul>\n<h2 id=\"create-the-linode-stackscripts-module\">T\u1ea1o m\u00f4-\u0111un Linode StackScripts<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#create-the-linode-stackscripts-module\"><\/a><\/h2>\n<p>M\u00f4-\u0111un Linode StackScripts s\u1ebd bao g\u1ed3m hai m\u00f4-\u0111un l\u1ed3ng nhau chia t\u00e1ch c\u00e1c t\u00e0i nguy\u00ean c\u1ea7n thi\u1ebft gi\u1eefa&nbsp;<strong>m\u00f4-\u0111un g\u1ed1c<\/strong>&nbsp;, m\u1ed9t&nbsp;<code>linodes<\/code>m\u00f4-\u0111un v\u00e0 m\u1ed9t&nbsp;<code>stackscripts<\/code>m\u00f4-\u0111un. Khi b\u1ea1n ho\u00e0n t\u1ea5t vi\u1ec7c t\u1ea1o t\u1ea5t c\u1ea3 c\u00e1c t\u1ec7p Terraform c\u1ea7n thi\u1ebft, c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c c\u1ee7a b\u1ea1n s\u1ebd tr\u00f4ng nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>linode_stackscripts\/\n\u251c\u2500\u2500 main.tf\n\u251c\u2500\u2500 outputs.tf\n\u251c\u2500\u2500 secrets.tfvars\n\u251c\u2500\u2500 terraform\n\u251c\u2500\u2500 terraform.tfvars\n\u251c\u2500\u2500 variables.tf\n\u2514\u2500\u2500 modules\/\n    \u251c\u2500\u2500 linodes\/\n    |   \u251c\u2500\u2500 main.tf\n    \u2502   \u251c\u2500\u2500 variables.tf\n    \u2502   \u2514\u2500\u2500 outputs.tf\n    \u2514\u2500\u2500 stackscripts\/\n        \u251c\u2500\u2500 main.tf\n        \u251c\u2500\u2500 variables.tf\n        \u2514\u2500\u2500 outputs.tf<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Th\u01b0 m\u1ee5c c\u1ee7a b\u1ea1n&nbsp;<code>linode_stackscripts<\/code>c\u00f3 th\u1ec3 ch\u1ee9a c\u00e1c t\u1ec7p kh\u00e1c li\u00ean quan \u0111\u1ebfn qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t Terraform m\u00e0 b\u1ea1n \u0111\u00e3 ho\u00e0n t\u1ea5t tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u c\u00e1c b\u01b0\u1edbc trong h\u01b0\u1edbng d\u1eabn n\u00e0y.<\/p>\n<h3 id=\"create-the-linodes-module\">T\u1ea1o Module Linodes<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#create-the-linodes-module\"><\/a><\/h3>\n<p>Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd t\u1ea1o&nbsp;<code>linodes<\/code>m\u00f4-\u0111un ch\u1ecbu tr\u00e1ch nhi\u1ec7m t\u1ea1o phi\u00ean b\u1ea3n Linode c\u1ee7a b\u1ea1n. M\u00f4-\u0111un n\u00e0y ch\u1ee9a m\u1ed9t&nbsp;<code>main.tf<\/code>t\u1ec7p v\u00e0&nbsp;<code>variables.tf<\/code>c\u00e1c&nbsp;<code>outputs.tf<\/code>t\u1ec7p t\u01b0\u01a1ng \u1ee9ng.<\/p>\n<p>1.N\u1ebfu th\u01b0 m\u1ee5c d\u1ef1 \u00e1n Terraform c\u1ee7a b\u1ea1n ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean&nbsp;<code>linode_stackscripts<\/code>, h\u00e3y \u0111\u1ed5i t\u00ean th\u01b0 m\u1ee5c \u0111\u00f3 tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u v\u00e0 di chuy\u1ec3n v\u00e0o th\u01b0 m\u1ee5c \u0111\u00f3:<\/p>\n<pre class=\"wp-block-code\"><code>mv terraform linode_stackscripts\ncd linode_stackscripts<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa:B\u1ea1n c\u00f3 th\u1ec3 c\u1ea7n ph\u1ea3i ch\u1ec9nh s\u1eeda&nbsp;<code>~\/.profile<\/code>th\u01b0 m\u1ee5c \u0111\u1ec3 \u0111\u01b0a&nbsp;<code>~\/linode_stackscripts<\/code>th\u01b0 m\u1ee5c \u0111\u00f3 v\u00e0o PATH. echo &#8216;xu\u1ea5t PATH=&#8221;$PATH:$HOME\/linode_stackscripts&#8221;&#8216; \u00bb ~\/.profile ngu\u1ed3n ~\/.profile<\/p>\n<p>2.T\u1ea1o c\u00e1c th\u01b0 m\u1ee5c con&nbsp;<code>modules<\/code>v\u00e0&nbsp;<code>linodes<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir -p modules\/linodes\n<\/code><\/pre>\n<p>3.S\u1eed d\u1ee5ng tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n \u01b0a th\u00edch c\u1ee7a b\u1ea1n, t\u1ea1o m\u1ed9t&nbsp;<code>main.tf<\/code>t\u1ec7p c\u00f3&nbsp;<code>modules\/linodes\/<\/code>c\u00e1c t\u00e0i nguy\u00ean sau:<\/p>\n<pre class=\"wp-block-code\"><code>locals {\n    key = var.key\n}\n\nresource \"linode_sshkey\" \"main_key\" {\n    label = var.key_label\n    ssh_key = chomp(file(local.key))\n}\n\nresource \"linode_instance\" \"linode_id\" {\n    image = var.image\n    label = var.label\n    region = var.region\n    type = var.type\n    authorized_keys = &#91; linode_sshkey.main_key.ssh_key ]\n    root_pass = var.root_pass\n    stackscript_id = var.stackscript_id\n    stackscript_data = {\n       \"my_password\" = var.stackscript_data&#91;\"my_password\"]\n       \"my_userpubkey\" = var.stackscript_data&#91;\"my_userpubkey\"]\n       \"my_hostname\" = var.stackscript_data&#91;\"my_hostname\"]\n       \"my_username\" = var.stackscript_data&#91;\"my_username\"]\n    }\n}<\/code><\/pre>\n<p>T\u1ec7p n\u00e0y&nbsp;<code>main.tf<\/code>khai b\u00e1o m\u1ed9t&nbsp;<code>linode_instance<\/code>t\u00e0i nguy\u00ean tri\u1ec3n khai Linode b\u1eb1ng StackScript. L\u01b0u \u00fd r\u1eb1ng t\u1ea5t c\u1ea3 c\u00e1c gi\u00e1 tr\u1ecb \u0111\u1ed1i s\u1ed1 \u0111\u1ec1u s\u1eed d\u1ee5ng c\u00fa ph\u00e1p n\u1ed9i suy \u0111\u1ec3 truy c\u1eadp c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn. Ti\u1ebfp theo, b\u1ea1n s\u1ebd khai b\u00e1o c\u00e1c bi\u1ebfn v\u00e0 cung c\u1ea5p c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn trong&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p c\u1ee7a m\u00f4-\u0111un g\u1ed1c. S\u1eed d\u1ee5ng c\u00e1c t\u1ec7p ri\u00eang bi\u1ec7t \u0111\u1ec3 khai b\u00e1o v\u00e0 g\u00e1n bi\u1ebfn s\u1ebd tham s\u1ed1 h\u00f3a c\u00e1c c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n v\u00e0 cho ph\u00e9p ch\u00fang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u1ea1i d\u01b0\u1edbi d\u1ea1ng c\u00e1c m\u00f4-\u0111un.<\/p>\n<p>Ch\u00fang ta h\u00e3y xem x\u00e9t k\u1ef9 h\u01a1n t\u1eebng kh\u1ed1i trong&nbsp;<code>main.tf<\/code>t\u1ec7p c\u1ea5u h\u00ecnh.<\/p>\n<pre class=\"wp-block-code\"><code>locals {\n    key = var.key\n}\n\nresource \"linode_sshkey\" \"main_key\" {\n    label = var.key_label\n    ssh_key = chomp(file(local.key))\n}<\/code><\/pre>\n<ul>\n<li>\u0110o\u1ea1n th\u01a1 n\u00e0y&nbsp;<code>locals<\/code>khai b\u00e1o m\u1ed9t bi\u1ebfn c\u1ee5c b\u1ed9&nbsp;<code>key<\/code>c\u00f3 gi\u00e1 tr\u1ecb s\u1ebd \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi m\u1ed9t bi\u1ebfn \u0111\u1ea7u v\u00e0o.<\/li>\n<li>T\u00e0i&nbsp;<code>linode_sshkey<\/code>nguy\u00ean s\u1ebd t\u1ea1o Kh\u00f3a SSH Linode \u0111\u01b0\u1ee3c li\u00ean k\u1ebft v\u1edbi t\u00e0i kho\u1ea3n Linode c\u1ee7a b\u1ea1n. C\u00e1c kh\u00f3a n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u1ea1i cho c\u00e1c l\u1ea7n tri\u1ec3n khai Linode trong t\u01b0\u01a1ng lai sau khi t\u00e0i nguy\u00ean \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.&nbsp;<code>ssh_key = chomp(file(local.key))<\/code>s\u1eed d\u1ee5ng h\u00e0m t\u00edch h\u1ee3p c\u1ee7a Terraform&nbsp;<code>file()<\/code>\u0111\u1ec3 cung c\u1ea5p \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p c\u1ee5c b\u1ed9 \u0111\u1ebfn v\u1ecb tr\u00ed kh\u00f3a SSH c\u00f4ng khai. V\u1ecb tr\u00ed c\u1ee7a \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p l\u00e0 gi\u00e1 tr\u1ecb c\u1ee7a bi\u1ebfn c\u1ee5c b\u1ed9&nbsp;<code>key<\/code>.&nbsp;<code>chomp()<\/code>H\u00e0m t\u00edch h\u1ee3p s\u1ebd x\u00f3a c\u00e1c d\u00f2ng m\u1edbi theo sau kh\u1ecfi kh\u00f3a SSH.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>resource \"linode_instance\" \"linode_id\" {\n    image = var.image\n    label = var.label\n    region = var.region\n    type = var.type\n    authorized_keys = &#91; linode_sshkey.main_key.ssh_key ]\n    root_pass = var.root_pass\n    stackscript_id = var.stackscript_id\n    stackscript_data = {\n       \"my_password\" = var.stackscript_data&#91;\"my_password\"]\n       \"my_userpubkey\" = var.stackscript_data&#91;\"my_userpubkey\"]\n       \"my_hostname\" = var.stackscript_data&#91;\"my_hostname\"]\n       \"my_username\" = var.stackscript_data&#91;\"my_username\"]\n    }\n}<\/code><\/pre>\n<p>T\u00e0i&nbsp;<code>linode_instance<\/code>nguy\u00ean t\u1ea1o ra m\u1ed9t phi\u00ean b\u1ea3n Linode v\u1edbi c\u00e1c \u0111\u1ed1i s\u1ed1 \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea. Vui l\u00f2ng l\u01b0u \u00fd th\u00f4ng tin sau:<\/p>\n<p>\u0110\u1ed1i&nbsp;<code>authorized_keys<\/code>s\u1ed1 s\u1eed d\u1ee5ng kh\u00f3a c\u00f4ng khai SSH do&nbsp;<code>linode_sshkey<\/code>t\u00e0i nguy\u00ean cung c\u1ea5p trong kh\u1ed5 tr\u01b0\u1edbc. \u0110\u1ed1i s\u1ed1 n\u00e0y mong \u0111\u1ee3i gi\u00e1 tr\u1ecb ki\u1ec3u danh s\u00e1ch, do \u0111\u00f3 gi\u00e1 tr\u1ecb ph\u1ea3i \u0111\u01b0\u1ee3c bao trong d\u1ea5u ngo\u1eb7c.<\/p>\n<p>\u0110\u1ec3 s\u1eed d\u1ee5ng Linode StackScript hi\u1ec7n c\u00f3, b\u1ea1n ph\u1ea3i s\u1eed d\u1ee5ng&nbsp;<code>stackscript_id<\/code>\u0111\u1ed1i s\u1ed1 v\u00e0 cung c\u1ea5p ID h\u1ee3p l\u1ec7 l\u00e0m gi\u00e1 tr\u1ecb. M\u1ed7i StackScript \u0111\u01b0\u1ee3c g\u00e1n m\u1ed9t ID duy nh\u1ea5t khi t\u1ea1o. Sau \u0111\u00f3 trong h\u01b0\u1edbng d\u1eabn, b\u1ea1n s\u1ebd t\u1ea1o StackScript c\u1ee7a ri\u00eang m\u00ecnh v\u00e0 hi\u1ec3n th\u1ecb ID c\u1ee7a n\u00f3 d\u01b0\u1edbi d\u1ea1ng bi\u1ebfn \u0111\u1ea7u ra \u0111\u1ec3 s\u1eed d\u1ee5ng ID c\u1ee7a n\u00f3 \u0111\u1ec3 tri\u1ec3n khai phi\u00ean b\u1ea3n Linode c\u1ee7a b\u1ea1n.<\/p>\n<p>StackScripts h\u1ed7 tr\u1ee3 d\u1eef li\u1ec7u do ng\u01b0\u1eddi d\u00f9ng \u0111\u1ecbnh ngh\u0129a. \u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 StackScript c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng th\u1ebb&nbsp;<code>UDF<\/code>\u0111\u1ec3 t\u1ea1o bi\u1ebfn c\u00f3 gi\u00e1 tr\u1ecb ph\u1ea3i do ng\u01b0\u1eddi d\u00f9ng c\u1ee7a t\u1eadp l\u1ec7nh cung c\u1ea5p. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng t\u00f9y ch\u1ec9nh h\u00e0nh vi c\u1ee7a StackScript tr\u00ean c\u01a1 s\u1edf m\u1ed7i l\u1ea7n tri\u1ec3n khai. B\u1ea5t k\u1ef3&nbsp;<code>UDF<\/code>bi\u1ebfn b\u1eaft bu\u1ed9c n\u00e0o c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a b\u1eb1ng&nbsp;<code>stackscript_data<\/code>\u0111\u1ed1i s\u1ed1.<\/p>\n<p>4.T\u1ea1o&nbsp;<code>variables.tf<\/code>t\u1ec7p \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u00e1c bi\u1ebfn b\u1eaft bu\u1ed9c c\u1ee7a t\u00e0i nguy\u00ean c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>variable \"key\" {\n  description = \"Public SSH Key's path.\"\n}\n\nvariable \"key_label\" {\n  description = \"new SSH key label\"\n}\n\nvariable \"image\" {\n  description = \"Image to use for Linode instance\"\n  default = \"linode\/ubuntu18.04\"\n}\n\nvariable \"label\" {\n  description = \"The Linode's label is for display purposes only, but must be unique.\"\n  default = \"default-linode\"\n}\n\nvariable \"region\" {\n  description = \"The region where your Linode will be located.\"\n  default = \"us-east\"\n}\n\nvariable \"type\" {\n  description = \"Your Linode's plan type.\"\n  default = \"g6-standard-1\"\n}\n\nvariable \"authorized_keys\" {\n  description = \"SSH Keys to use for the Linode.\"\n  type = \"list\"\n}\n\nvariable \"root_pass\" {\n  description = \"Your Linode's root user's password.\"\n}\n\nvariable \"stackscript_id\" {\n  description = \"StackScript ID.\"\n}\n\nvariable \"stackscript_data\" {\n  description = \"Map of required StackScript UDF data.\"\n  type = \"map\"\n  default = {}\n}<\/code><\/pre>\n<ul>\n<li>C\u00e1c m\u00f4-\u0111un ph\u1ea3i bao g\u1ed3m m\u00f4 t\u1ea3 cho t\u1eebng bi\u1ebfn \u0111\u1ea7u v\u00e0o \u0111\u1ec3 gi\u00fap ghi l\u1ea1i c\u00e1ch s\u1eed d\u1ee5ng c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n. \u0110i\u1ec1u n\u00e0y s\u1ebd gi\u00fap b\u1ea5t k\u1ef3 ai kh\u00e1c s\u1eed d\u1ee5ng m\u00f4-\u0111un n\u00e0y d\u1ec5 d\u00e0ng h\u01a1n.<\/li>\n<li>M\u1ed7i bi\u1ebfn c\u00f3 th\u1ec3 ch\u1ee9a m\u1ed9t gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh ch\u1ec9 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng n\u1ebfu kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb n\u00e0o kh\u00e1c \u0111\u01b0\u1ee3c cung c\u1ea5p. V\u00ed d\u1ee5, n\u1ebfu b\u1ea1n c\u00f3 m\u1ed9t b\u1ea3n ph\u00e2n ph\u1ed1i Linux y\u00eau th\u00edch, b\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n cung c\u1ea5p n\u00f3 l\u00e0m gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a bi\u1ebfn h\u00ecnh \u1ea3nh c\u1ee7a b\u1ea1n. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y,&nbsp;<code>linode\/ubuntu18.04<\/code>\u0111\u01b0\u1ee3c \u0111\u1eb7t l\u00e0m gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh.<\/li>\n<li>B\u1ea1n c\u00f3 th\u1ec3 khai b\u00e1o a&nbsp;<code>type<\/code>cho m\u1ed7i bi\u1ebfn. N\u1ebfu kh\u00f4ng&nbsp;<code>type<\/code>cung c\u1ea5p, bi\u1ebfn s\u1ebd m\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<code>type = \"string\"<\/code>.<\/li>\n<li>L\u01b0u \u00fd r\u1eb1ng&nbsp;<code>stackscript_data<\/code>bi\u1ebfn l\u00e0&nbsp;<code>type = \"map\"<\/code>. \u0110i\u1ec1u n\u00e0y s\u1ebd cho ph\u00e9p b\u1ea1n cung c\u1ea5p gi\u00e1 tr\u1ecb cho nhi\u1ec1u&nbsp;<code>UDF<\/code>bi\u1ebfn t\u00f9y theo y\u00eau c\u1ea7u c\u1ee7a StackScript.<\/li>\n<\/ul>\n<p>5.T\u1ea1o t\u1eadp&nbsp;<code>outputs.tf<\/code>tin:<\/p>\n<pre class=\"wp-block-code\"><code>output \"sshkey_linode\" {\n  value = linode_sshkey.main_key.ssh_key\n}<\/code><\/pre>\n<ol>\n<li>T\u1ec7p n\u00e0y&nbsp;<code>outputs.tf<\/code>s\u1ebd hi\u1ec3n th\u1ecb b\u1ea5t k\u1ef3 gi\u00e1 tr\u1ecb n\u00e0o t\u1eeb c\u00e1c t\u00e0i nguy\u00ean m\u00e0 b\u1ea1n \u0111\u00e3 khai b\u00e1o trong&nbsp;<code>main.tf<\/code>t\u1ec7p. B\u1ea5t k\u1ef3 gi\u00e1 tr\u1ecb n\u00e0o \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng b\u1edfi b\u1ea5t k\u1ef3 m\u00f4-\u0111un n\u00e0o kh\u00e1c trong m\u00f4-\u0111un g\u1ed1c.&nbsp;<code>sshkey_linode<\/code>Bi\u1ebfn \u0111\u1ea7u ra s\u1ebd hi\u1ec3n th\u1ecb&nbsp;<code>linode_sshkey<\/code>kh\u00f3a c\u00f4ng khai c\u1ee7a t\u00e0i nguy\u00ean.<\/li>\n<\/ol>\n<p>B\u00e2y gi\u1edd&nbsp;<code>linodes<\/code>m\u00f4-\u0111un \u0111\u00e3 ho\u00e0n t\u1ea5t, \u1edf ph\u1ea7n ti\u1ebfp theo, b\u1ea1n s\u1ebd t\u1ea1o m\u00f4&nbsp;<code>stackscripts<\/code>-\u0111un.<\/p>\n<h3 id=\"create-the-stackscripts-module\">T\u1ea1o m\u00f4-\u0111un StackScripts<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#create-the-stackscripts-module\"><\/a><\/h3>\n<p>Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd t\u1ea1o m\u00f4-\u0111un StackScripts. M\u00f4-\u0111un n\u00e0y t\u1ea1o ra m\u1ed9t&nbsp;<code>linode_stackscripts<\/code>t\u00e0i nguy\u00ean m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o v\u00e0 s\u1eeda \u0111\u1ed5i Linode StackScript c\u1ee7a ri\u00eang b\u1ea1n.<\/p>\n<p>1.\u0110\u1ea3m b\u1ea3o b\u1ea1n \u0111ang \u1edf trong&nbsp;<code>linode_stackscripts<\/code>th\u01b0 m\u1ee5c v\u00e0 t\u1ea1o&nbsp;<code>stackscripts<\/code>th\u01b0 m\u1ee5c con:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir modules\/stackscripts\n<\/code><\/pre>\n<p>2.S\u1eed d\u1ee5ng tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n \u01b0a th\u00edch c\u1ee7a b\u1ea1n, t\u1ea1o m\u1ed9t&nbsp;<code>main.tf<\/code>t\u1ec7p&nbsp;<code>modules\/stackscripts\/<\/code>c\u00f3 n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>resource \"linode_stackscript\" \"default\" {\n  label = var.stackscript_label\n  description = var.description\n  script = var.stackscript\n  images = var.stackscript_image\n  rev_note = var.rev_note\n}<\/code><\/pre>\n<p>T\u1ec7p&nbsp;<code>main.tf<\/code>t\u1ea1o&nbsp;<code>linode_stackscript<\/code>t\u00e0i nguy\u00ean v\u00e0 cung c\u1ea5p c\u00e1c c\u1ea5u h\u00ecnh c\u1ea7n thi\u1ebft. T\u1ea5t c\u1ea3 c\u00e1c gi\u00e1 tr\u1ecb \u0111\u1ed1i s\u1ed1 \u0111\u1ec1u s\u1eed d\u1ee5ng c\u00fa ph\u00e1p n\u1ed9i suy \u0111\u1ec3 truy c\u1eadp c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn \u0111\u1ea7u v\u00e0o. Ti\u1ebfp theo, b\u1ea1n s\u1ebd khai b\u00e1o c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o v\u00e0 cung c\u1ea5p c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn trong&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p c\u1ee7a m\u00f4-\u0111un g\u1ed1c. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 StackScripts, h\u00e3y xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/stackscripts\/\">trang s\u1ea3n ph\u1ea9m StackScripts<\/a>&nbsp;v\u00e0&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/api\/stackscripts\">t\u00e0i li\u1ec7u tham kh\u1ea3o Linode APIv4 StackScripts<\/a>&nbsp;.<\/p>\n<p>3.T\u1ea1o&nbsp;<code>variables.tf<\/code>t\u1ec7p \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u00e1c bi\u1ebfn b\u1eaft bu\u1ed9c c\u1ee7a t\u00e0i nguy\u00ean c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>variable \"stackscript_label\" {\n  description = \"The StackScript's label is for display purposes only.\"\n}\n\nvariable \"description\" {\n  description = \"A description for the StackScript.\"\n}\n\nvariable \"stackscript\" {\n  description = \"The script to execute when provisioning a new Linode with this StackScript.\"\n}\nvariable \"stackscript_image\" {\n  description = \" A list of Image IDs representing the Images that this StackScript is compatible for deploying with.\"\n}\nvariable \"rev_note\" {\n  description = \"This field allows you to add notes for the set of revisions made to this StackScript.\"\n}<\/code><\/pre>\n<p>4.T\u1ea1o t\u1eadp&nbsp;<code>outputs.tf<\/code>tin:<\/p>\n<pre class=\"wp-block-code\"><code>output \"stackscript_id\" {\n  value = linode_stackscript.default.id\n}<\/code><\/pre>\n<p>T\u1ec7p n\u00e0y&nbsp;<code>outputs.tf<\/code>hi\u1ec3n th\u1ecb gi\u00e1 tr\u1ecb&nbsp;<code>linode_stackscript<\/code>ID c\u1ee7a t\u00e0i nguy\u00ean. M\u1ed7i StackScript \u0111\u01b0\u1ee3c g\u00e1n m\u1ed9t ID duy nh\u1ea5t khi t\u1ea1o. B\u1ea1n s\u1ebd c\u1ea7n ID n\u00e0y khi t\u1ea1o m\u00f4-\u0111un g\u1ed1c c\u1ee7a m\u00ecnh.<\/p>\n<p>B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 t\u1ea1o m\u00f4-\u0111un StackScripts v\u00e0 s\u1eb5n s\u00e0ng s\u1eed d\u1ee5ng c\u1ea3 hai m\u00f4-\u0111un trong m\u00f4-\u0111un g\u1ed1c. B\u1ea1n s\u1ebd ho\u00e0n th\u00e0nh c\u00f4ng vi\u1ec7c n\u00e0y trong ph\u1ea7n ti\u1ebfp theo.<\/p>\n<h3 id=\"create-the-root-module\">T\u1ea1o m\u00f4-\u0111un g\u1ed1c<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#create-the-root-module\"><\/a><\/h3>\n<p>M\u00f4-\u0111un g\u1ed1c s\u1ebd g\u1ecdi c\u00e1c m\u00f4-\u0111un&nbsp;<code>linode<\/code>v\u00e0&nbsp;<code>stackscripts<\/code>, \u0111\u00e1p \u1ee9ng c\u00e1c bi\u1ebfn b\u1eaft bu\u1ed9c c\u1ee7a ch\u00fang v\u00e0 sau \u0111\u00f3 \u00e1p d\u1ee5ng c\u00e1c c\u1ea5u h\u00ecnh \u0111\u00f3 \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng mong mu\u1ed1n c\u1ee7a b\u1ea1n. C\u00e1c c\u1ea5u h\u00ecnh n\u00e0y tri\u1ec3n khai Linode d\u1ef1a tr\u00ean StackScript m\u00e0 b\u1ea1n s\u1ebd \u0111\u1ecbnh ngh\u0129a trong ph\u1ea7n n\u00e0y. Khi s\u1eed d\u1ee5ng c\u00e1c m\u00f4-\u0111un l\u1ed3ng nhau, c\u00e1c m\u00f4-\u0111un s\u1ebd b\u1ecb \u1ea9n kh\u1ecfi c\u1ea5u h\u00ecnh g\u1ed1c c\u1ee7a b\u1ea1n, v\u00ec v\u1eady b\u1ea1n s\u1ebd ph\u1ea3i hi\u1ec3n th\u1ecb l\u1ea1i b\u1ea5t k\u1ef3 bi\u1ebfn v\u00e0 \u0111\u1ea7u ra n\u00e0o b\u1ea1n y\u00eau c\u1ea7u.<\/p>\n<p>1.\u0110\u1ea3m b\u1ea3o b\u1ea1n \u0111ang \u1edf trong&nbsp;<code>linode_stackscripts<\/code>th\u01b0 m\u1ee5c v\u00e0 t\u1ea1o&nbsp;<code>main.tf<\/code>t\u1ec7p:<\/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}\nprovider \"linode\" {\n    token = var.token\n}\n\nmodule \"stackscripts\" {\n    source = \".\/modules\/stackscripts\"\n    stackscript_label = var.stackscript_label\n    description = var.description\n    stackscript = var.stackscript\n    stackscript_image = var.stackscript_image\n    rev_note = var.rev_note\n}\n\nmodule \"linodes\" {\n    source = \".\/modules\/linodes\"\n    key = var.key\n    key_label = var.key_label\n    image = var.image\n    label = var.label\n    region = var.region\n    type = var.type\n    root_pass = var.root_pass\n    authorized_keys = &#91; module.linodes.sshkey_linode ]\n    stackscript_id = module.stackscripts.stackscript_id\n    stackscript_data = {\n       \"my_password\" = var.stackscript_data&#91;\"my_password\"]\n       \"my_userpubkey\" = var.stackscript_data&#91;\"my_userpubkey\"]\n       \"my_hostname\" = var.stackscript_data&#91;\"my_hostname\"]\n       \"my_username\" = var.stackscript_data&#91;\"my_username\"]\n    }\n}<\/code><\/pre>\n<p>T\u1ec7p&nbsp;<code>main.tf<\/code>s\u1eed d\u1ee5ng c\u00e1c m\u00f4-\u0111un&nbsp;<code>linodes<\/code>v\u00e0&nbsp;<code>stackscripts<\/code>\u0111\u01b0\u1ee3c t\u1ea1o trong c\u00e1c ph\u1ea7n tr\u01b0\u1edbc v\u00e0 cung c\u1ea5p c\u00e1c \u0111\u1ed1i s\u1ed1 b\u1eaft bu\u1ed9c. T\u1ea5t c\u1ea3 c\u00e1c gi\u00e1 tr\u1ecb \u0111\u1ed1i s\u1ed1 \u0111\u1ec1u s\u1eed d\u1ee5ng c\u00fa ph\u00e1p n\u1ed9i suy \u0111\u1ec3 truy c\u1eadp c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn, m\u00e0 b\u1ea1n s\u1ebd khai b\u00e1o trong&nbsp;<code>variables.tf<\/code>t\u1ec7p v\u00e0 sau \u0111\u00f3 cung c\u1ea5p c\u00e1c gi\u00e1 tr\u1ecb t\u01b0\u01a1ng \u1ee9ng trong&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p.<\/p>\n<p>Ch\u00fang ta h\u00e3y c\u00f9ng xem x\u00e9t t\u1eebng kh\u1ed1i:<\/p>\n<pre class=\"wp-block-code\"><code>provider \"linode\" {\n    token = var.token\n}<\/code><\/pre>\n<p>Kh\u1ed5 th\u01a1 \u0111\u1ea7u ti\u00ean tuy\u00ean b\u1ed1 Linode l\u00e0 nh\u00e0 cung c\u1ea5p s\u1ebd qu\u1ea3n l\u00fd v\u00f2ng \u0111\u1eddi c\u1ee7a b\u1ea5t k\u1ef3 t\u00e0i nguy\u00ean n\u00e0o \u0111\u01b0\u1ee3c khai b\u00e1o trong su\u1ed1t t\u1ec7p c\u1ea5u h\u00ecnh. Nh\u00e0 cung c\u1ea5p Linode y\u00eau c\u1ea7u m\u00e3 th\u00f4ng b\u00e1o Linode APIv4 c\u1ee7a b\u1ea1n \u0111\u1ec3 x\u00e1c th\u1ef1c.<\/p>\n<pre class=\"wp-block-code\"><code>module \"stackscripts\" {\n    source = \".\/modules\/stackscripts\"\n    stackscript_label = var.stackscript_label\n    description = var.description\n    stackscript = var.stackscript\n    stackscript_image = var.stackscript_image\n    rev_note = var.rev_note\n}<\/code><\/pre>\n<p>Kh\u1ed5 ti\u1ebfp theo h\u01b0\u1edbng d\u1eabn Terraform t\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n c\u1ee7a&nbsp;<code>stackscripts<\/code>m\u00f4-\u0111un v\u00e0 kh\u1edfi t\u1ea1o b\u1ea5t k\u1ef3 t\u00e0i nguy\u00ean n\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong m\u00f4-\u0111un.&nbsp;<code>source<\/code>Thu\u1ed9c t\u00ednh cung c\u1ea5p v\u1ecb tr\u00ed c\u1ee7a m\u00e3 ngu\u1ed3n m\u00f4-\u0111un con v\u00e0 \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1ea5t c\u1ee9 khi n\u00e0o b\u1ea1n t\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n c\u1ee7a m\u00f4-\u0111un. T\u1ea5t c\u1ea3 c\u00e1c thu\u1ed9c t\u00ednh kh\u00e1c \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1edfi m\u00f4-\u0111un. L\u01b0u \u00fd r\u1eb1ng t\u1ea5t c\u1ea3 c\u00e1c thu\u1ed9c t\u00ednh c\u00f3 trong kh\u1ed1i m\u00f4-\u0111un t\u01b0\u01a1ng \u1ee9ng v\u1edbi&nbsp;<code>linode_stackscript<\/code>c\u00e1c \u0111\u1ed1i s\u1ed1 c\u1ee7a t\u00e0i nguy\u00ean \u0111\u01b0\u1ee3c khai b\u00e1o trong&nbsp;<code>main.tf<\/code>t\u1ec7p c\u1ee7a&nbsp;<code>stackscripts<\/code>m\u00f4-\u0111un.<\/p>\n<pre class=\"wp-block-code\"><code>module \"linodes\" {\n    source = \".\/modules\/linodes\"\n    key = var.key\n    key_label = var.key_label\n    image = var.image\n    label = var.label\n    group = var.group\n    region = var.region\n    type = var.type\n    root_pass = var.root_pass\n    authorized_keys = &#91; module.linodes.sshkey_linode ]\n    stackscript_id = module.stackscripts.stackscript_id\n    stackscript_data = {\n       \"my_password\" = var.stackscript_data&#91;\"my_password\"]\n       \"my_userpubkey\" = var.stackscript_data&#91;\"my_userpubkey\"]\n       \"my_hostname\" = var.stackscript_data&#91;\"my_hostname\"]\n       \"my_username\" = var.stackscript_data&#91;\"my_username\"]\n    }\n}<\/code><\/pre>\n<p>Kh\u1ed5 th\u01a1 n\u00e0y t\u1ea1o ra m\u1ed9t th\u1ec3 hi\u1ec7n c\u1ee7a&nbsp;<code>linodes<\/code>m\u00f4-\u0111un v\u00e0 sau \u0111\u00f3 kh\u1edfi t\u1ea1o c\u00e1c t\u00e0i nguy\u00ean b\u1ea1n \u0111\u00e3 x\u00e1c \u0111\u1ecbnh trong m\u00f4-\u0111un. L\u01b0u \u00fd r\u1eb1ng&nbsp;<code>authorized_keys = [ module.linodes.sshkey_id ]<\/code>v\u00e0&nbsp;<code>stackscript_id = \"module.stackscripts.stackscript_id\"<\/code>c\u1ea3 hai \u0111\u1ec1u truy c\u1eadp c\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb d\u01b0\u1edbi d\u1ea1ng bi\u1ebfn \u0111\u1ea7u ra b\u1edfi c\u00e1c m\u00f4-\u0111un&nbsp;<code>linodes<\/code>v\u00e0&nbsp;<code>stackscripts<\/code>. B\u1ea5t k\u1ef3 bi\u1ebfn \u0111\u1ea7u ra n\u00e0o \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb c\u1ee7a m\u00f4-\u0111un \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c tham chi\u1ebfu trong t\u1ec7p m\u00f4-\u0111un g\u1ed1c c\u1ee7a b\u1ea1n&nbsp;<code>main.tf<\/code>.<\/p>\n<p>2.T\u1ea1o&nbsp;<code>variables.tf<\/code>t\u1ec7p \u0111\u1ec3 khai b\u00e1o c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o c\u1ea7n thi\u1ebft cho c\u00e1c phi\u00ean b\u1ea3n m\u00f4-\u0111un:<\/p>\n<pre class=\"wp-block-code\"><code>variable \"token\" {\n  description = \" Linode API token\"\n}\n\nvariable \"stackscript_label\" {\n  description = \"The StackScript's label is for display purposes only.\"\n}\n\nvariable \"description\" {\n  description = \"A description for the StackScript.\"\n}\n\nvariable \"stackscript\" {\n  description = \"The script to execute when provisioning a new Linode with this StackScript.\"\n}\n\nvariable \"stackscript_image\" {\n  description = \"A list of Image IDs representing the Images that this StackScript is compatible for deploying with.\"\n}\n\nvariable \"rev_note\" {\n  description = \"This field allows you to add notes for the set of revisions made to this StackScript.\"\n}\n\nvariable \"key\" {\n  description = \"Public SSH Key's path.\"\n}\n\nvariable \"key_label\" {\n  description = \"New SSH key label.\"\n}\n\nvariable \"image\" {\n  description = \"Image to use for Linode instance.\"\n  default = \"linode\/ubuntu18.04\"\n}\n\nvariable \"label\" {\n  description = \"The Linode's label is for display purposes only, but must be unique.\"\n  default = \"default-linode\"\n}\n\nvariable \"region\" {\n  description = \"The region where your Linode will be located.\"\n  default = \"us-east\"\n}\n\nvariable \"type\" {\n  description = \"Your Linode's plan type.\"\n  default = \"g6-standard-1\"\n}\n\nvariable \"root_pass\" {\n  description = \"Your Linode's root user's password.\"\n}\n\nvariable \"stackscript_data\" {\n  description = \"Map of required StackScript UDF data.\"\n  type = \"map\"\n  default = {}\n}\n\nvariable \"stackscript_id\" {\n  description = \"Hold the stackscript id output value.\"\n}<\/code><\/pre>\n<p>3.T\u1ea1o t\u1eadp&nbsp;<code>outputs.tf<\/code>tin:<\/p>\n<pre class=\"wp-block-code\"><code>output \"stackscript_id\" {\n  value = module.stackscripts.stackscript_id\n}<\/code><\/pre>\n<p>Trong&nbsp;<code>outputs.tf<\/code>t\u1ec7p, b\u1ea1n s\u1ebd hi\u1ec3n th\u1ecb l\u1ea1i c\u00e1c bi\u1ebfn \u0111\u1ea7u ra \u0111\u01b0\u1ee3c&nbsp;<code>stackscripts<\/code>m\u00f4-\u0111un hi\u1ec3n th\u1ecb.<\/p>\n<p>4.T\u1ea1o&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p \u0111\u1ec3 cung c\u1ea5p gi\u00e1 tr\u1ecb cho t\u1ea5t c\u1ea3 c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong&nbsp;<code>variables.tf<\/code>t\u1ec7p. T\u1ec7p n\u00e0y s\u1ebd lo\u1ea1i tr\u1eeb b\u1ea5t k\u1ef3 gi\u00e1 tr\u1ecb n\u00e0o cung c\u1ea5p d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m, nh\u01b0 m\u1eadt kh\u1ea9u v\u00e0 m\u00e3 th\u00f4ng b\u00e1o API. M\u1ed9t t\u1ec7p ch\u1ee9a c\u00e1c gi\u00e1 tr\u1ecb nh\u1ea1y c\u1ea3m s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o \u1edf b\u01b0\u1edbc ti\u1ebfp theo:<\/p>\n<pre class=\"wp-block-code\"><code>key = \"~\/.ssh\/id_rsa.pub\"\nkey_label = \"my-ssh-key\"\nlabel = \"my-linode\"\nstackscript_id = \"base-ubuntu-deployment\"\nstackscript_label = \"base-ubuntu-deployment\"\ndescription = \"A base deployment for Ubuntu 18.04 that creates a limited user account.\"\nstackscript = &lt;&lt;EOF\n#!\/bin\/bash\n# &lt;UDF name=\"my_hostname\" Label=\"Linode's Hostname\" \/&gt;\n# &lt;UDF name=\"my_username\" Label=\"Limited user account\" \/&gt;\n# &lt;UDF name=\"my_password\" Label=\"Limited user account's password\" \/&gt;\n# &lt;UDF name=\"my_userpubkey\" Label=\"Limited user account's public key\" \/&gt;\n\nsource &lt;ssinclude StackScriptID=\"1\"&gt;\n\nset -x\n\nMY_IP=system_primary_ip\nsystem_set_hostname \"$MY_HOSTNAME\"\nsystem_add_host_entry \"$MY_IP\" \"$MY_HOSTNAME\"\nuser_add_sudo \"$MY_USERNAME\" \"$MY_PASSWORD\"\nuser_add_pubkey \"$MY_USERNAME\" \"$MY_USERPUBKEY\"\nssh_disable_root\ngoodstuff\nEOF\nstackscript_image = &#91;\"linode\/ubuntu18.04\"]\nrev_note = \"First revision of my StackScript created with the Linode Terraform provider.\"<\/code><\/pre>\n<p>T\u1ec7p&nbsp;<code>terraform.tfvars<\/code>cung c\u1ea5p t\u1ea5t c\u1ea3 c\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1edfi c\u00e1c m\u00f4-\u0111un&nbsp;<code>linodes<\/code>v\u00e0&nbsp;<code>stackscripts<\/code>. \u0110\u1ea3m b\u1ea3o b\u1ea1n thay th\u1ebf m\u1ecdi gi\u00e1 tr\u1ecb b\u1eb1ng gi\u00e1 tr\u1ecb c\u1ee7a ri\u00eang b\u1ea1n khi s\u1eed d\u1ee5ng t\u1ec7p v\u00ed d\u1ee5 n\u00e0y.Bi\u1ebfn&nbsp;<code>stackscript<\/code>cung c\u1ea5p n\u1ed9i dung th\u1ef1c t\u1ebf c\u1ee7a StackScript m\u00e0 b\u1ea1n t\u1ea1o. V\u00ed d\u1ee5 StackScript n\u00e0y y\u00eau c\u1ea7u b\u1ed1n&nbsp;<code>UDF<\/code>gi\u00e1 tr\u1ecb:&nbsp;<code>my_hostname<\/code>,&nbsp;<code>my_username<\/code>,&nbsp;<code>my_password<\/code>, v\u00e0&nbsp;<code>my_userpubkey<\/code>. C\u00e1c gi\u00e1 tr\u1ecb&nbsp;<code>my_hostname<\/code>v\u00e0&nbsp;<code>my_username<\/code>\u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi&nbsp;<code>stackscript_data<\/code>b\u1ea3n \u0111\u1ed3. C\u00e1c gi\u00e1 tr\u1ecb&nbsp;<code>my_password<\/code>v\u00e0&nbsp;<code>my_userpubkey<\/code>s\u1ebd \u0111\u01b0\u1ee3c cung c\u1ea5p trong b\u01b0\u1edbc ti\u1ebfp theo.Sau \u0111\u00f3, StackScript s\u1ebd s\u1eed d\u1ee5ng c\u00e1c gi\u00e1 tr\u1ecb n\u00e0y \u0111\u1ec3 t\u1ea1o m\u1ed9t t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng gi\u1edbi h\u1ea1n; \u0111\u1eb7t t\u00ean m\u00e1y ch\u1ee7; th\u00eam m\u1ee5c nh\u1eadp m\u00e1y ch\u1ee7; th\u00eam ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 t\u1ea1o v\u00e0o nh\u00f3m; v\u00f4 hi\u1ec7u h\u00f3a quy\u1ec1n truy c\u1eadp SSH cho ng\u01b0\u1eddi d\u00f9ng g\u1ed1c; v\u00e0 c\u00e0i \u0111\u1eb7t vim, wget v\u00e0 less. StackScript n\u00e0y s\u1eed d\u1ee5ng c\u00e1c h\u00e0m bash \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a trong&nbsp;<a href=\"https:\/\/www.linode.com\/stackscripts\/view\/1\" target=\"_blank\" rel=\"noreferrer noopener\">Th\u01b0 vi\u1ec7n Bash StackScript<\/a><code>sudo<\/code>&nbsp;c\u1ee7a Linode Community&nbsp;.<a href=\"https:\/\/www.linode.com\/stackscripts\/view\/1\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/p>\n<p>5.T\u1ea1o m\u1ed9t t\u1ec7p c\u00f3 t\u00ean&nbsp;<code>secrets.tfvars<\/code>\u0111\u1ec3 l\u01b0u tr\u1eef b\u1ea5t k\u1ef3 gi\u00e1 tr\u1ecb nh\u1ea1y c\u1ea3m n\u00e0o:<\/p>\n<pre class=\"wp-block-code\"><code>token = \"my-linode-api-token\"\nroot_pass = \"my-secure-root-password\"\nstackscript_data = {\n  \"my_password\" = \"my-limited-users-password\"\n  \"my_userpubkey\" = \"my-public-ssh-key\"\n  \"my_username\" = \"username\"\n  \"my_hostname\" = \"linode-hostname\"\n}<\/code><\/pre>\n<p>T\u1ec7p n\u00e0y ch\u1ee9a t\u1ea5t c\u1ea3 d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m c\u1ea7n thi\u1ebft cho vi\u1ec7c tri\u1ec3n khai Linode c\u1ee7a b\u1ea1n. \u0110\u1ea3m b\u1ea3o b\u1ea1n thay th\u1ebf t\u1ea5t c\u1ea3 c\u00e1c gi\u00e1 tr\u1ecb b\u1eb1ng m\u1eadt kh\u1ea9u an to\u00e0n c\u1ee7a ri\u00eang b\u1ea1n v\u00e0 m\u00e3 th\u00f4ng b\u00e1o APIv4 c\u1ee7a t\u00e0i kho\u1ea3n Linode. T\u1ec7p n\u00e0y kh\u00f4ng bao gi\u1edd \u0111\u01b0\u1ee3c theo d\u00f5i trong ph\u1ea7n m\u1ec1m ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n v\u00e0 ph\u1ea3i \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea trong&nbsp;<code>.gitignore<\/code>t\u1ec7p c\u1ee7a b\u1ea1n n\u1ebfu s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a>&nbsp;.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Trong Terraform 0.12, c\u00e1c bi\u1ebfn c\u00f3 gi\u00e1 tr\u1ecb b\u1ea3n \u0111\u1ed3 v\u00e0 \u0111\u1ed1i t\u01b0\u1ee3ng s\u1ebd s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb cu\u1ed1i c\u00f9ng \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y v\u00e0 ghi \u0111\u00e8 c\u00e1c gi\u00e1 tr\u1ecb tr\u01b0\u1edbc \u0111\u00f3. \u0110i\u1ec1u n\u00e0y kh\u00e1c v\u1edbi c\u00e1c phi\u00ean b\u1ea3n tr\u01b0\u1edbc c\u1ee7a Terraform, s\u1ebd h\u1ee3p nh\u1ea5t c\u00e1c gi\u00e1 tr\u1ecb b\u1ea3n \u0111\u1ed3 thay v\u00ec ghi \u0111\u00e8 ch\u00fang. V\u00ec l\u00fd do n\u00e0y, b\u1ea3n&nbsp;<code>stackscript_data<\/code>\u0111\u1ed3 v\u00e0 c\u00e1c gi\u00e1 tr\u1ecb c\u1ee7a n\u00f3 \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a trong m\u1ed9t t\u1ec7p \u0111\u1ecbnh ngh\u0129a bi\u1ebfn duy nh\u1ea5t.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00f3 m\u1ed9t s\u1ed1 t\u00f9y ch\u1ecdn kh\u00e1c c\u00f3 s\u1eb5n \u0111\u1ec3 qu\u1ea3n l\u00fd b\u00ed m\u1eadt v\u1edbi Terraform. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y, h\u00e3y xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/secrets-management-with-terraform\">Qu\u1ea3n l\u00fd b\u00ed m\u1eadt v\u1edbi Terraform<\/a>&nbsp;.<\/p>\n<p>B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 s\u1eb5n s\u00e0ng \u00e1p d\u1ee5ng&nbsp;<code>linode_stackscripts<\/code>c\u1ea5u h\u00ecnh Terraform c\u1ee7a m\u00f4-\u0111un. C\u00e1c b\u01b0\u1edbc n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c ho\u00e0n t\u1ea5t trong ph\u1ea7n ti\u1ebfp theo.<\/p>\n<h2 id=\"initialize-plan-and-apply-the-terraform-configuration\">Kh\u1edfi t\u1ea1o, l\u1eadp k\u1ebf ho\u1ea1ch v\u00e0 \u00e1p d\u1ee5ng c\u1ea5u h\u00ecnh Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#initialize-plan-and-apply-the-terraform-configuration\"><\/a><\/h2>\n<p>B\u1ea5t c\u1ee9 khi n\u00e0o m\u1ed9t nh\u00e0 cung c\u1ea5p m\u1edbi \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong c\u1ea5u h\u00ecnh Terraform, tr\u01b0\u1edbc ti\u00ean n\u00f3 ph\u1ea3i \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o. Qu\u00e1 tr\u00ecnh kh\u1edfi t\u1ea1o s\u1ebd t\u1ea3i xu\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t plugin c\u1ee7a nh\u00e0 cung c\u1ea5p v\u00e0 th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 b\u01b0\u1edbc n\u00e0o kh\u00e1c c\u1ea7n thi\u1ebft \u0111\u1ec3 s\u1eed d\u1ee5ng plugin \u0111\u00f3. Tr\u01b0\u1edbc khi \u00e1p d\u1ee5ng c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n, vi\u1ec7c xem k\u1ebf ho\u1ea1ch th\u1ef1c hi\u1ec7n c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n 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 c\u0169ng r\u1ea5t h\u1eefu \u00edch. Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd ho\u00e0n th\u00e0nh t\u1ea5t c\u1ea3 c\u00e1c b\u01b0\u1edbc n\u00e0y.<\/p>\n<p>1.Kh\u1edfi t\u1ea1o nh\u00e0 cung c\u1ea5p Linode. \u0110\u1ea3m b\u1ea3o b\u1ea1n \u0111ang \u1edf trong&nbsp;<code>linode_stackscripts<\/code>th\u01b0 m\u1ee5c tr\u01b0\u1edbc khi ch\u1ea1y l\u1ec7nh n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>terraform init\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t th\u00f4ng b\u00e1o x\u00e1c nh\u1eadn r\u1eb1ng plugin c\u1ee7a nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o th\u00e0nh c\u00f4ng.<\/p>\n<p>2.Ch\u1ea1y l\u1ec7nh Terraform plan:<\/p>\n<pre class=\"wp-block-code\"><code>terraform plan -var-file=\"secrets.tfvars\" -var-file=\"terraform.tfvars\"\n<\/code><\/pre>\n<p>K\u1ebf ho\u1ea1ch Terraform s\u1ebd kh\u00f4ng th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 h\u00e0nh \u0111\u1ed9ng n\u00e0o ho\u1eb7c th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o \u0111\u1ed1i v\u1edbi t\u00e0i kho\u1ea3n Linode c\u1ee7a b\u1ea1n. Thay v\u00e0o \u0111\u00f3, m\u1ed9t ph\u00e2n t\u00edch \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh h\u00e0nh \u0111\u1ed9ng n\u00e0o (t\u1ee9c l\u00e0 t\u1ea1o, x\u00f3a ho\u1eb7c s\u1eeda \u0111\u1ed5i phi\u00ean b\u1ea3n Linode) l\u00e0 c\u1ea7n thi\u1ebft \u0111\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c tr\u1ea1ng th\u00e1i \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 trong c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n.<\/p>\n<p>3.B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 s\u1eb5n s\u00e0ng \u0111\u1ec3 t\u1ea1o c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong t\u1ec7p c\u1ea5u h\u00ecnh m\u00f4-\u0111un g\u1ed1c c\u1ee7a m\u00ecnh&nbsp;<code>main.tf<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>terraform apply -var-file=\"secrets.tfvars\" -var-file=\"terraform.tfvars\"\n<\/code><\/pre>\n<p>V\u00ec b\u1ea1n \u0111ang s\u1eed d\u1ee5ng nhi\u1ec1u t\u1ec7p gi\u00e1 tr\u1ecb bi\u1ebfn, b\u1ea1n ph\u1ea3i g\u1ecdi t\u1eebng t\u1ec7p ri\u00eang l\u1ebb b\u1eb1ng&nbsp;<code>var-file<\/code>\u0111\u1ed1i s\u1ed1. B\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c nh\u1eafc x\u00e1c nh\u1eadn h\u00e0nh&nbsp;<code>apply<\/code>\u0111\u1ed9ng. Nh\u1eadp&nbsp;<em>yes<\/em>&nbsp;. Terraform s\u1ebd b\u1eaft \u0111\u1ea7u t\u1ea1o c\u00e1c t\u00e0i nguy\u00ean b\u1ea1n \u0111\u00e3 x\u00e1c \u0111\u1ecbnh trong su\u1ed1t h\u01b0\u1edbng d\u1eabn n\u00e0y. Qu\u00e1 tr\u00ecnh n\u00e0y s\u1ebd m\u1ea5t v\u00e0i ph\u00fat \u0111\u1ec3 ho\u00e0n t\u1ea5t. Sau khi c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng th\u00e0nh c\u00f4ng, b\u1ea1n s\u1ebd th\u1ea5y \u0111\u1ea7u ra t\u01b0\u01a1ng t\u1ef1:<\/p>\n<pre class=\"wp-block-code\"><code>  Apply complete! Resources: 3 added, 0 changed, 0 destroyed.<\/code><\/pre>\n<p>4.\u0110\u1ec3 x\u00e1c minh vi\u1ec7c tri\u1ec3n khai, h\u00e3y l\u1ea5y \u0111\u1ecba ch\u1ec9 IP c\u1ee7a phi\u00ean b\u1ea3n Linode c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>terraform show | grep 'ip_address'\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y k\u1ebft qu\u1ea3 t\u01b0\u01a1ng t\u1ef1:<\/p>\n<pre class=\"wp-block-code\"><code>        ip_address = 192.0.2.0<\/code><\/pre>\n<p>5.M\u1edf phi\u00ean shell m\u1edbi v\u00e0 SSH v\u00e0o Linode c\u1ee7a b\u1ea1n b\u1eb1ng \u0111\u1ecba ch\u1ec9 IP b\u1ea1n \u0111\u00e3 l\u1ea5y \u0111\u01b0\u1ee3c \u1edf b\u01b0\u1edbc tr\u01b0\u1edbc v\u00e0 t\u00ean ng\u01b0\u1eddi d\u00f9ng b\u1ea1n \u0111\u00e3 x\u00e1c \u0111\u1ecbnh trong bi\u1ebfn&nbsp;<code>terraform.tfvars<\/code>c\u1ee7a t\u1ec7p&nbsp;<code>my_username<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>ssh username@192.0.2.0\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd c\u00f3 th\u1ec3 truy c\u1eadp Linode c\u1ee7a m\u00ecnh v\u00e0 sau \u0111\u00f3 x\u00e1c minh r\u1eb1ng nh\u1eefng g\u00ec b\u1ea1n \u0111\u00e3 \u0111\u1ecbnh ngh\u0129a trong StackScript \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c thi.<\/p>\n<h2 id=\"version-control-your-terraform-module\">Ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n M\u00f4-\u0111un Terraform c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#version-control-your-terraform-module\"><\/a><\/h2>\n<p>\u0110\u1ec3 cung c\u1ea5p&nbsp;<code>linode_stackscripts<\/code>m\u00f4-\u0111un cho c\u00e1c th\u00e0nh vi\u00ean kh\u00e1c trong nh\u00f3m, b\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n m\u00f4-\u0111un b\u1eb1ng&nbsp;<a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a>&nbsp;. Tr\u01b0\u1edbc khi ho\u00e0n t\u1ea5t c\u00e1c b\u01b0\u1edbc trong ph\u1ea7n n\u00e0y, h\u00e3y \u0111\u1ea3m b\u1ea3o b\u1ea1n \u0111\u00e3 ho\u00e0n t\u1ea5t c\u00e1c b\u01b0\u1edbc trong ph\u1ea7n&nbsp;<strong>C\u1ea5u h\u00ecnh Git<\/strong>&nbsp;c\u1ee7a h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-configure-git\/#configure-git\">B\u1eaft \u0111\u1ea7u v\u1edbi Git<\/a>&nbsp;.<\/p>\n<p>1.Trong&nbsp;<code>linode_stackscripts<\/code>th\u01b0 m\u1ee5c t\u1ea1o m\u1ed9t&nbsp;<code>.gitignore<\/code>t\u1eadp tin:<\/p>\n<pre class=\"wp-block-code\"><code>secrets.tfvars\n.terraform\/\nterraform\/\nterraform.tfstate<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu c\u00f3 b\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o li\u00ean quan \u0111\u1ebfn c\u00e1c b\u01b0\u1edbc c\u00e0i \u0111\u1eb7t Terraform \u0111\u01b0\u1ee3c ho\u00e0n t\u1ea5t tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u h\u01b0\u1edbng d\u1eabn n\u00e0y (ch\u1eb3ng h\u1ea1n nh\u01b0 t\u1ec7p zip v\u00e0 t\u1ec7p t\u1ed5ng ki\u1ec3m tra), b\u1ea1n c\u00f3 th\u1ec3 x\u00f3a c\u00e1c t\u1ec7p n\u00e0y kh\u1ecfi th\u01b0&nbsp;<code>linode_stackscripts<\/code>m\u1ee5c v\u00ec b\u1ea1n kh\u00f4ng n\u00ean theo d\u00f5i ch\u00fang trong ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n v\u00e0 ch\u00fang kh\u00f4ng c\u00f2n c\u1ea7n thi\u1ebft n\u1eefa.<\/p>\n<p>2.Kh\u1edfi t\u1ea1o kho l\u01b0u tr\u1eef git:<\/p>\n<pre class=\"wp-block-code\"><code>git init\n<\/code><\/pre>\n<p>S\u1eafp x\u1ebfp t\u1ea5t c\u1ea3 c\u00e1c t\u1ec7p b\u1ea1n \u0111\u00e3 t\u1ea1o cho \u0111\u1ebfn nay cho l\u1ea7n x\u00e1c nh\u1eadn \u0111\u1ea7u ti\u00ean c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>git add -A\n<\/code><\/pre>\n<p>3.Cam k\u1ebft t\u1ea5t c\u1ea3&nbsp;<code>linode_stackscripts<\/code>c\u00e1c t\u1eadp tin:<\/p>\n<pre class=\"wp-block-code\"><code>git commit -m \"Initial commit\"\n<\/code><\/pre>\n<p>4.\u0110i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn t\u00e0i kho\u1ea3n GitHub c\u1ee7a b\u1ea1n v\u00e0&nbsp;<a href=\"https:\/\/help.github.com\/articles\/creating-a-new-repository\/\" target=\"_blank\" rel=\"noreferrer noopener\">t\u1ea1o m\u1ed9t kho l\u01b0u tr\u1eef m\u1edbi<\/a>&nbsp;. \u0110\u1ea3m b\u1ea3o b\u1ea1n \u0111\u1eb7t t\u00ean kho l\u01b0u tr\u1eef gi\u1ed1ng v\u1edbi t\u00ean c\u1ee7a m\u00f4-\u0111un Terraform. Trong v\u00ed d\u1ee5 n\u00e0y, kho l\u01b0u tr\u1eef GitHub s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean l\u00e0&nbsp;<code>linode_stackscripts<\/code>.<\/p>\n<p>5.\u1ede \u0111\u1ea7u trang&nbsp;<strong>Thi\u1ebft l\u1eadp nhanh<\/strong>&nbsp;c\u1ee7a kho l\u01b0u tr\u1eef GitHub , h\u00e3y sao ch\u00e9p URL kho l\u01b0u tr\u1eef t\u1eeb xa.<\/p>\n<p>6.Tr\u1edf l\u1ea1i&nbsp;<code>linode_stackscripts<\/code>th\u01b0 m\u1ee5c tr\u00ean m\u00e1y t\u00ednh c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n v\u00e0 th\u00eam URL cho kho l\u01b0u tr\u1eef t\u1eeb xa:<\/p>\n<pre class=\"wp-block-code\"><code>git remote add origin https:\/\/github.com\/my-github\/linode_stackscripts.git\n<\/code><\/pre>\n<p>7.\u0110\u1ea9y kho&nbsp;<code>linode_stackscripts<\/code>l\u01b0u tr\u1eef c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n l\u00ean kho l\u01b0u tr\u1eef GitHub t\u1eeb xa:<\/p>\n<pre class=\"wp-block-code\"><code>git push -u origin master\n<\/code><\/pre>\n<p>M\u00f4-\u0111un Terraform c\u1ee7a b\u1ea1n hi\u1ec7n \u0111\u01b0\u1ee3c theo d\u00f5i qua GitHub v\u00e0 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng, chia s\u1ebb v\u00e0 s\u1eeda \u0111\u1ed5i b\u1edfi b\u1ea5t k\u1ef3 ai c\u00f3 quy\u1ec1n truy c\u1eadp v\u00e0o t\u00e0i kho\u1ea3n GitHub c\u1ee7a b\u1ea1n.<\/p>\n<h3 id=\"invoking-your-github-hosted-module\">G\u1ecdi m\u00f4-\u0111un \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef tr\u00ean GitHub c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/#invoking-your-github-hosted-module\"><\/a><\/h3>\n<p>Trong t\u01b0\u01a1ng lai, b\u1ea1n c\u00f3 th\u1ec3 l\u1ea5y ngu\u1ed3n module n\u00e0y t\u1eeb GitHub trong c\u00e1c khai b\u00e1o module Terraform c\u1ee7a b\u1ea1n. B\u1ea1n s\u1ebd vi\u1ebft kh\u1ed1i module c\u1ee7a m\u00ecnh nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>module \"linode_stackscripts\" {\n    source = \"github.com\/username\/linode_stackscripts\"\n\n    VARIABLES HERE\n    . . .\n}<\/code><\/pre>\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\/providers\/linode\/r\/instance.html\" target=\"_blank\" rel=\"noreferrer noopener\">Nh\u00e0 cung c\u1ea5p Linode Terraform<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/modules\/create.html\" target=\"_blank\" rel=\"noreferrer noopener\">Terraform &#8211; T\u1ea1o m\u00f4-\u0111un<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/modules\/sources.html\" target=\"_blank\" rel=\"noreferrer noopener\">Terraform &#8211; Ngu\u1ed3n m\u00f4-\u0111un<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Terraform l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u1ed1i h\u1ee3p ph\u1ed5 bi\u1ebfn c\u1ee7a&nbsp;HashiCorp&nbsp;. C\u00f4ng c\u1ee5 n\u00e0y \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00e2y d\u1ef1ng, duy tr\u00ec v\u00e0 t\u1ea1o phi\u00ean b\u1ea3n c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng m\u1ed9t c\u00e1ch an to\u00e0n. C\u00e1c m\u00f4-\u0111un Terraform cho ph\u00e9p b\u1ea1n t\u1ed5 ch\u1ee9c m\u00e3 c\u1ea5u h\u00ecnh t\u1ed1t h\u01a1n v\u00e0 l\u00e0m cho m\u00e3 c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng.<\/p>\n","protected":false},"author":1,"featured_media":36165,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[126],"tags":[],"class_list":["post-35008","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\/35008","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=35008"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35008\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36165"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=35008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=35008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=35008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}