{"id":34916,"date":"2024-08-23T15:54:59","date_gmt":"2024-08-23T08:54:59","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/23\/an-introduction-to-hashicorp-configuration-language-hcl\/"},"modified":"2024-08-23T15:54:59","modified_gmt":"2024-08-23T08:54:59","slug":"an-introduction-to-hashicorp-configuration-language-hcl","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/23\/an-introduction-to-hashicorp-configuration-language-hcl\/","title":{"rendered":"Gi\u1edbi thi\u1ec7u v\u1ec1 Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp  (HCL)"},"content":{"rendered":"<p>Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp (HCL) l\u00e0 ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh do&nbsp;<a href=\"https:\/\/www.hashicorp.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">HashiCorp<\/a>&nbsp;bi\u00ean so\u1ea1n . HCL \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 t\u1ef1 \u0111\u1ed9ng h\u00f3a c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng \u0111\u00e1m m\u00e2y c\u1ee7a HashiCorp, ch\u1eb3ng h\u1ea1n nh\u01b0&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-build-your-infrastructure-using-terraform-and-linode\/\">Terraform<\/a>&nbsp;. Ng\u00f4n ng\u1eef n\u00e0y \u0111\u01b0\u1ee3c t\u1ea1o ra v\u1edbi m\u1ee5c ti\u00eau th\u00e2n thi\u1ec7n v\u1edbi c\u1ea3 con ng\u01b0\u1eddi v\u00e0 m\u00e1y m\u00f3c. Ng\u00f4n ng\u1eef n\u00e0y t\u01b0\u01a1ng th\u00edch v\u1edbi JSON, c\u00f3 ngh\u0129a l\u00e0 n\u00f3 c\u00f3 th\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng kh\u00e1c b\u00ean ngo\u00e0i d\u00f2ng s\u1ea3n ph\u1ea9m Terraform.<\/p>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y gi\u1edbi thi\u1ec7u v\u1ec1 c\u00fa ph\u00e1p HCL, m\u1ed9t s\u1ed1 thu\u1eadt ng\u1eef HCL th\u01b0\u1eddng d\u00f9ng v\u00e0 c\u00e1ch th\u1ee9c ho\u1ea1t \u0111\u1ed9ng v\u1edbi Terraform.<\/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\">Linode Provider 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 bi\u1ebft 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. C\u00e1c v\u00ed d\u1ee5 trong h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u01b0\u1ee3c vi\u1ebft \u0111\u1ec3 t\u01b0\u01a1ng th\u00edch v\u1edbi&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/configuration-0-11\/terraform.html\" target=\"_blank\" rel=\"noreferrer noopener\">Terraform phi\u00ean b\u1ea3n 0.11<\/a>&nbsp;v\u00e0 s\u1ebd \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt trong t\u01b0\u01a1ng lai g\u1ea7n.<\/p>\n<h2 id=\"hcl-syntax-overview\">T\u1ed5ng quan v\u1ec1 c\u00fa ph\u00e1p HCL<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#hcl-syntax-overview\"><\/a><\/h2>\n<p>C\u00fa ph\u00e1p c\u1ea5u h\u00ecnh c\u1ee7a HCL d\u1ec5 \u0111\u1ecdc v\u00e0 vi\u1ebft. N\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o ra \u0111\u1ec3 c\u00f3 c\u1ea5u tr\u00fac r\u00f5 r\u00e0ng v\u00e0 d\u1ec5 th\u1ea5y h\u01a1n khi so s\u00e1nh v\u1edbi c\u00e1c ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh n\u1ed5i ti\u1ebfng kh\u00e1c, ch\u1eb3ng h\u1ea1n nh\u01b0 YAML.<\/p>\n<pre class=\"wp-block-code\"><code># Linode provider block. Installs Linode plugin.\nterraform {\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\nvariable \"region\" {\n  description = \"This is the location where the Linode instance is deployed.\"\n}\n\n\/* A multi\n   line comment. *\/\nresource \"linode_instance\" \"example_linode\" {\n    image = \"linode\/ubuntu18.04\"\n    label = \"example-linode\"\n    region = \"${var.region}\"\n    type = \"g6-standard-1\"\n    authorized_keys = &#91; \"my-key\" ]\n    root_pass = \"example-password\"\n}<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: B\u1ea1n kh\u00f4ng n\u00ean \u0111\u01b0a d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m v\u00e0o khai b\u00e1o t\u00e0i nguy\u00ean. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 qu\u1ea3n l\u00fd b\u00ed m\u1eadt, 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<h3 id=\"key-elements-of-hcl\">C\u00e1c y\u1ebfu t\u1ed1 ch\u00ednh c\u1ee7a HCL<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#key-elements-of-hcl\"><\/a><\/h3>\n<ul>\n<li>C\u00fa ph\u00e1p HCL bao g\u1ed3m&nbsp;<em>c\u00e1c kh\u1ed5 th\u01a1<\/em>&nbsp;ho\u1eb7c&nbsp;<em>kh\u1ed1i<\/em>&nbsp;\u0111\u1ecbnh ngh\u0129a nhi\u1ec1u c\u1ea5u h\u00ecnh c\u00f3 s\u1eb5n cho Terraform.&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/configuration\/providers.html\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00e1c plugin cung<\/a>&nbsp;c\u1ea5p th\u00f4ng tin chi ti\u1ebft h\u01a1n v\u1ec1 c\u00e1c c\u1ea5u h\u00ecnh Terraform c\u01a1 b\u1ea3n c\u00f3 s\u1eb5n.<\/li>\n<li>C\u00e1c kh\u1ed5 th\u01a1 ho\u1eb7c kh\u1ed1i \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh t\u1eeb&nbsp;<code>key = value<\/code>c\u00e1c c\u1eb7p. Terraform ch\u1ea5p nh\u1eadn c\u00e1c gi\u00e1 tr\u1ecb ki\u1ec3u chu\u1ed7i, s\u1ed1, boolean, b\u1ea3n \u0111\u1ed3 v\u00e0 danh s\u00e1ch.<\/li>\n<li>B\u00ecnh lu\u1eadn m\u1ed9t d\u00f2ng b\u1eaft \u0111\u1ea7u b\u1eb1ng&nbsp;<code>#<\/code>, trong khi b\u00ecnh lu\u1eadn nhi\u1ec1u d\u00f2ng s\u1eed d\u1ee5ng ph\u1ea7n m\u1edf \u0111\u1ea7u&nbsp;<code>\/*<\/code>v\u00e0 ph\u1ea7n k\u1ebft th\u00fac&nbsp;<code>*\/<\/code>.<\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/configuration\/interpolation.html\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00fa ph\u00e1p n\u1ed9i suy<\/a>&nbsp;c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 tham chi\u1ebfu c\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i kh\u1ed1i c\u1ea5u h\u00ecnh trong&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#input-variables\">bi\u1ebfn \u0111\u1ea7u v\u00e0o<\/a>&nbsp;ho\u1eb7c t\u1eeb&nbsp;\u0111\u1ea7u ra c\u1ee7a&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#modules\">m\u00f4-\u0111un Terraform .<\/a>Tham chi\u1ebfu bi\u1ebfn n\u1ed9i suy \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng b\u1eb1ng c\u00fa&nbsp;<code>\"${var.region}\"<\/code>ph\u00e1p. V\u00ed d\u1ee5 n\u00e0y tham chi\u1ebfu \u0111\u1ebfn m\u1ed9t bi\u1ebfn c\u00f3 t\u00ean l\u00e0&nbsp;<code>region<\/code>, \u0111\u01b0\u1ee3c th\u00eam ti\u1ec1n t\u1ed1 l\u00e0&nbsp;<code>var.<\/code>. Ph\u1ea7n m\u1edf \u0111\u1ea7u&nbsp;<code>${<\/code>v\u00e0 \u0111\u00f3ng&nbsp;<code>}<\/code>cho bi\u1ebft s\u1ef1 b\u1eaft \u0111\u1ea7u c\u1ee7a c\u00fa ph\u00e1p n\u1ed9i suy.<\/li>\n<li>B\u1ea1n c\u00f3 th\u1ec3 bao g\u1ed3m c\u00e1c chu\u1ed7i nhi\u1ec1u d\u00f2ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng d\u1ea5u m\u1edf&nbsp;<code>&lt;&lt;EOF<\/code>, theo sau l\u00e0 d\u1ea5u \u0111\u00f3ng&nbsp;<code>EOF<\/code>tr\u00ean d\u00f2ng \u0111\u00f3.<\/li>\n<li>C\u00e1c chu\u1ed7i \u0111\u01b0\u1ee3c \u0111\u1eb7t trong d\u1ea5u ngo\u1eb7c k\u00e9p.<\/li>\n<li>Danh s\u00e1ch c\u00e1c ki\u1ec3u d\u1eef li\u1ec7u nguy\u00ean th\u1ee7y (chu\u1ed7i, s\u1ed1 v\u00e0 boolean) \u0111\u01b0\u1ee3c \u0111\u1eb7t trong d\u1ea5u ngo\u1eb7c vu\u00f4ng:&nbsp;<code>[\"Andy\", \"Leslie\", \"Nate\", \"Angel\", \"Chris\"]<\/code>.<\/li>\n<li>B\u1ea3n \u0111\u1ed3 s\u1eed d\u1ee5ng d\u1ea5u ngo\u1eb7c nh\u1ecdn&nbsp;<code>{}<\/code>v\u00e0 d\u1ea5u hai ch\u1ea5m&nbsp;<code>:<\/code>, v\u00ed d\u1ee5:&nbsp;<code>{ \"password\" : \"my_password\", \"db_name\" : \"wordpress\" }<\/code>.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.terraform.io\/docs\/configuration\/syntax.html\" target=\"_blank\" rel=\"noreferrer noopener\">Xem t\u00e0i li\u1ec7u C\u00fa ph\u00e1p c\u1ea5u h\u00ecnh<\/a>&nbsp;c\u1ee7a Terraform&nbsp;\u0111\u1ec3 bi\u1ebft th\u00eam chi ti\u1ebft.<\/p>\n<h2 id=\"terraform-providers-and-hcl-syntax\">Nh\u00e0 cung c\u1ea5p Terraform v\u00e0 c\u00fa ph\u00e1p HCL<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#terraform-providers-and-hcl-syntax\"><\/a><\/h2>\n<p>Trong Terraform, m\u1ed9t&nbsp;<em>nh\u00e0 cung c\u1ea5p<\/em>&nbsp;\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi API C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng D\u1ecbch v\u1ee5 (IaaS) ho\u1eb7c N\u1ec1n t\u1ea3ng d\u01b0\u1edbi d\u1ea1ng D\u1ecbch v\u1ee5 (PaaS), nh\u01b0&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/api\/\">Linode APIv4<\/a>&nbsp;. Nh\u00e0 cung c\u1ea5p x\u00e1c \u0111\u1ecbnh&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#resources\">t\u00e0i nguy\u00ean<\/a>&nbsp;n\u00e0o \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb v\u00e0 c\u00f3 s\u1eb5n \u0111\u1ec3 t\u1ea1o, \u0111\u1ecdc, c\u1eadp nh\u1eadt v\u00e0 x\u00f3a. M\u1ed9t b\u1ed9 th\u00f4ng tin x\u00e1c th\u1ef1c ho\u1eb7c m\u00e3 th\u00f4ng b\u00e1o th\u01b0\u1eddng \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u \u0111\u1ec3 giao ti\u1ebfp v\u1edbi t\u00e0i kho\u1ea3n d\u1ecbch v\u1ee5. V\u00ed d\u1ee5: nh\u00e0&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">cung c\u1ea5p Linode Terraform y\u00eau c\u1ea7u&nbsp;<\/a><a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/api\/get-started\/#get-an-access-token\">m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp API Linode<\/a>&nbsp;c\u1ee7a b\u1ea1n&nbsp;. Danh s\u00e1ch&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/providers\/\" target=\"_blank\" rel=\"noreferrer noopener\">t\u1ea5t c\u1ea3 c\u00e1c nh\u00e0 cung c\u1ea5p Terraform ch\u00ednh th\u1ee9c<\/a>&nbsp;c\u00f3 s\u1eb5n t\u1eeb HashiCorp.<\/p>\n<p>\u0110\u1ec3 c\u1ea5u h\u00ecnh Linode l\u00e0m nh\u00e0 cung c\u1ea5p, b\u1ea1n c\u1ea7n bao g\u1ed3m m\u1ed9t kh\u1ed1i ch\u1ec9 \u0111\u1ecbnh Linode l\u00e0 nh\u00e0 cung c\u1ea5p v\u00e0 \u0111\u1eb7t m\u00e3 th\u00f4ng b\u00e1o API Linode c\u1ee7a b\u1ea1n v\u00e0o m\u1ed9t trong c\u00e1c&nbsp;<code>.tf<\/code>t\u1ec7p:<\/p>\n<pre class=\"wp-block-code\"><code>provider \"linode\" {\n    token = \"my-token\"\n}<\/code><\/pre>\n<p>Sau khi khai b\u00e1o nh\u00e0 cung c\u1ea5p, b\u1ea1n c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh c\u00e1c t\u00e0i nguy\u00ean c\u00f3 s\u1eb5n t\u1eeb nh\u00e0 cung c\u1ea5p.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c nh\u00e0 cung c\u1ea5p \u0111\u01b0\u1ee3c \u0111\u00f3ng g\u00f3i d\u01b0\u1edbi d\u1ea1ng plugin cho Terraform. B\u1ea5t c\u1ee9 khi n\u00e0o b\u1ea1n khai b\u00e1o m\u1ed9t nh\u00e0 cung c\u1ea5p m\u1edbi trong c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh Terraform, h\u00e3y ch\u1ea1y l\u1ec7nh&nbsp;<code>terraform init<\/code>. L\u1ec7nh n\u00e0y ho\u00e0n t\u1ea5t m\u1ed9t s\u1ed1 b\u01b0\u1edbc kh\u1edfi t\u1ea1o c\u1ea7n thi\u1ebft tr\u01b0\u1edbc khi b\u1ea1n c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng c\u1ea5u h\u00ecnh Terraform, bao g\u1ed3m t\u1ea3i xu\u1ed1ng c\u00e1c plugin cho b\u1ea5t k\u1ef3 nh\u00e0 cung c\u1ea5p n\u00e0o b\u1ea1n \u0111\u00e3 ch\u1ec9 \u0111\u1ecbnh.<\/p>\n<h2 id=\"terraform-resources-and-hcl-syntax\">T\u00e0i nguy\u00ean Terraform v\u00e0 c\u00fa ph\u00e1p HCL<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#terraform-resources-and-hcl-syntax\"><\/a><\/h2>\n<p><em>T\u00e0i nguy\u00ean<\/em>&nbsp;Terraform&nbsp;l\u00e0 b\u1ea5t k\u1ef3 th\u00e0nh ph\u1ea7n n\u00e0o c\u1ee7a c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd b\u1edfi nh\u00e0 cung c\u1ea5p. T\u00e0i nguy\u00ean c\u00f3 s\u1eb5n v\u1edbi nh\u00e0 cung c\u1ea5p Linode bao g\u1ed3m t\u1eeb m\u1ed9t phi\u00ean b\u1ea3n Linode, \u0111\u1ebfn m\u1ed9t kh\u1ed1i l\u01b0u tr\u1eef kh\u1ed1i, \u0111\u1ebfn m\u1ed9t b\u1ea3n ghi DNS. T\u00e0i li\u1ec7u&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">Nh\u00e0 cung c\u1ea5p Linode<\/a>&nbsp;c\u1ee7a Terraform c\u00f3 danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7 t\u1ea5t c\u1ea3 c\u00e1c t\u00e0i nguy\u00ean \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.<\/p>\n<p>T\u00e0i nguy\u00ean \u0111\u01b0\u1ee3c khai b\u00e1o b\u1eb1ng kh\u1ed1i t\u00e0i nguy\u00ean trong&nbsp;<code>.tf<\/code>t\u1ec7p c\u1ea5u h\u00ecnh. Kh\u1ed1i v\u00ed d\u1ee5 n\u00e0y tri\u1ec3n khai phi\u00ean b\u1ea3n Linode 2GB n\u1eb1m trong trung t\u00e2m d\u1eef li\u1ec7u US East t\u1eeb h\u00ecnh \u1ea3nh Ubuntu 18.04. C\u00e1c gi\u00e1 tr\u1ecb c\u0169ng \u0111\u01b0\u1ee3c cung c\u1ea5p cho nh\u00e3n Linode, kh\u00f3a SSH c\u00f4ng khai v\u00e0 m\u1eadt kh\u1ea9u g\u1ed1c:<\/p>\n<pre class=\"wp-block-code\"><code>resource \"linode_instance\" \"WordPress\" {\n    image = \"linode\/ubuntu18.04\"\n    label = \"WPServer\"\n    region = \"us-east\"\n    type = \"g6-standard-1\"\n    authorized_keys = &#91; \"example-key\" ]\n    root_pass = \"example-root-pass\"\n}<\/code><\/pre>\n<p><a href=\"https:\/\/www.terraform.io\/docs\/configuration\/resources.html#meta-parameters\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00e1c si\u00eau tham s\u1ed1<\/a>&nbsp;d\u00e0nh ri\u00eang cho HCL&nbsp;c\u00f3 s\u1eb5n cho t\u1ea5t c\u1ea3 c\u00e1c t\u00e0i nguy\u00ean v\u00e0 \u0111\u1ed9c l\u1eadp v\u1edbi nh\u00e0 cung c\u1ea5p. C\u00e1c si\u00eau tham s\u1ed1 cho ph\u00e9p b\u1ea1n t\u00f9y ch\u1ec9nh h\u00e0nh vi v\u00f2ng \u0111\u1eddi c\u1ee7a t\u00e0i nguy\u00ean, x\u00e1c \u0111\u1ecbnh s\u1ed1 l\u01b0\u1ee3ng t\u00e0i nguy\u00ean c\u1ea7n t\u1ea1o ho\u1eb7c b\u1ea3o v\u1ec7 m\u1ed9t s\u1ed1 t\u00e0i nguy\u00ean nh\u1ea5t \u0111\u1ecbnh kh\u1ecfi b\u1ecb ph\u00e1 h\u1ee7y. Xem t\u00e0i li\u1ec7u&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/configuration\/resources.html\" target=\"_blank\" rel=\"noreferrer noopener\">C\u1ea5u h\u00ecnh t\u00e0i nguy\u00ean<\/a>&nbsp;c\u1ee7a Terraform \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 si\u00eau tham s\u1ed1.<\/p>\n<h2 id=\"terraform-modules-and-hcl-syntax\">M\u00f4-\u0111un Terraform v\u00e0 c\u00fa ph\u00e1p HCL<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#terraform-modules-and-hcl-syntax\"><\/a><\/h2>\n<p>M\u00f4&nbsp;<em>-\u0111un<\/em>&nbsp;l\u00e0 t\u1eadp h\u1ee3p c\u00e1c c\u1ea5u h\u00ecnh Terraform \u0111\u01b0\u1ee3c \u0111\u00f3ng g\u00f3i, d\u00f9ng \u0111\u1ec3 t\u1ed5 ch\u1ee9c vi\u1ec7c t\u1ea1o t\u00e0i nguy\u00ean theo c\u00e1c c\u1ea5u h\u00ecnh c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng.<\/p>\n<p>Terraform&nbsp;<a href=\"https:\/\/registry.terraform.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Module Registry<\/a>&nbsp;l\u00e0 kho l\u01b0u tr\u1eef c\u00e1c module c\u1ed9ng \u0111\u1ed3ng c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n b\u1eaft \u0111\u1ea7u t\u1ea1o t\u00e0i nguy\u00ean cho nhi\u1ec1u nh\u00e0 cung c\u1ea5p kh\u00e1c nhau. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 t\u1ea1o c\u00e1c module c\u1ee7a ri\u00eang m\u00ecnh \u0111\u1ec3 s\u1eafp x\u1ebfp c\u1ea5u h\u00ecnh Terraform t\u1ed1t h\u01a1n v\u00e0 cho ph\u00e9p s\u1eed d\u1ee5ng l\u1ea1i. Sau khi t\u1ea1o c\u00e1c module, b\u1ea1n c\u00f3 th\u1ec3 ph\u00e2n ph\u1ed1i ch\u00fang th\u00f4ng qua kho l\u01b0u tr\u1eef ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n t\u1eeb xa, ch\u1eb3ng h\u1ea1n nh\u01b0 GitHub.<\/p>\n<h3 id=\"using-modules\">S\u1eed d\u1ee5ng c\u00e1c m\u00f4-\u0111un<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#using-modules\"><\/a><\/h3>\n<p>Kh\u1ed1i module h\u01b0\u1edbng d\u1eabn Terraform t\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n c\u1ee7a module. Kh\u1ed1i n\u00e0y kh\u1edfi t\u1ea1o b\u1ea5t k\u1ef3 t\u00e0i nguy\u00ean n\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong module \u0111\u00f3.<\/p>\n<p>C\u1ea5u h\u00ecnh b\u1eaft bu\u1ed9c chung duy nh\u1ea5t cho t\u1ea5t c\u1ea3 c\u00e1c kh\u1ed1i m\u00f4-\u0111un l\u00e0 tham&nbsp;<code>source<\/code>s\u1ed1 ch\u1ec9 ra v\u1ecb tr\u00ed c\u1ee7a m\u00e3 ngu\u1ed3n m\u00f4-\u0111un. T\u1ea5t c\u1ea3 c\u00e1c c\u1ea5u h\u00ecnh b\u1eaft bu\u1ed9c kh\u00e1c thay \u0111\u1ed5i t\u00f9y theo t\u1eebng m\u00f4-\u0111un. N\u1ebfu b\u1ea1n \u0111ang s\u1eed d\u1ee5ng m\u00f4-\u0111un c\u1ee5c b\u1ed9, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i l\u00e0m gi\u00e1 tr\u1ecb&nbsp;<em>ngu\u1ed3n<\/em>&nbsp;. \u0110\u01b0\u1eddng d\u1eabn ngu\u1ed3n cho m\u00f4-\u0111un Terraform Module Registry c\u00f3 s\u1eb5n tr\u00ean trang \u0111\u0103ng k\u00fd c\u1ee7a m\u00f4-\u0111un.<\/p>\n<p>V\u00ed d\u1ee5 n\u00e0y t\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n c\u1ee7a m\u00f4-\u0111un c\u00f3 t\u00ean l\u00e0&nbsp;<em>linode-module-example<\/em>&nbsp;v\u00e0 cung c\u1ea5p \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i l\u00e0m v\u1ecb tr\u00ed m\u00e3 ngu\u1ed3n c\u1ee7a m\u00f4-\u0111un:<\/p>\n<pre class=\"wp-block-code\"><code>module \"linode-module-example\" {\n    source = \"\/modules\/linode-module-example\"\n}<\/code><\/pre>\n<p>Vi\u1ec7c bi\u00ean so\u1ea1n c\u00e1c m\u00f4-\u0111un bao g\u1ed3m vi\u1ec7c x\u00e1c \u0111\u1ecbnh c\u00e1c y\u00eau c\u1ea7u v\u1ec1 t\u00e0i nguy\u00ean v\u00e0 tham s\u1ed1 h\u00f3a c\u00e1c c\u1ea5u h\u00ecnh b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#input-variables\">c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o<\/a>&nbsp;, c\u00e1c t\u1ec7p bi\u1ebfn v\u00e0 \u0111\u1ea7u ra. \u0110\u1ec3 t\u00ecm hi\u1ec3u c\u00e1ch vi\u1ebft c\u00e1c m\u00f4-\u0111un Terraform, h\u00e3y xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-terraform-module\/\">T\u1ea1o m\u1ed9t m\u00f4-\u0111un Terraform<\/a>&nbsp;.<\/p>\n<h2 id=\"input-variables\">Bi\u1ebfn \u0111\u1ea7u v\u00e0o<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#input-variables\"><\/a><\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecbnh ngh\u0129a&nbsp;<em>c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o<\/em>&nbsp;\u0111\u1ec3 l\u00e0m tham s\u1ed1 c\u1ea5u h\u00ecnh Terraform. Theo quy \u01b0\u1edbc, c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o th\u01b0\u1eddng \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a trong m\u1ed9t t\u1ec7p c\u00f3 t\u00ean&nbsp;<code>variables.tf<\/code>. Terraform t\u1ea3i t\u1ea5t c\u1ea3 c\u00e1c t\u1ec7p c\u00f3 \u0111u\u00f4i&nbsp;<code>.tf<\/code>, v\u00ec v\u1eady b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 \u0111\u1ecbnh ngh\u0129a c\u00e1c bi\u1ebfn trong c\u00e1c t\u1ec7p c\u00f3 t\u00ean kh\u00e1c.<\/p>\n<ul>\n<li>Terraform ch\u1ea5p nh\u1eadn c\u00e1c bi\u1ebfn c\u00f3 ki\u1ec3u string, number, boolean, map v\u00e0 list. N\u1ebfu ki\u1ec3u bi\u1ebfn kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a r\u00f5 r\u00e0ng, Terraform m\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<em>type = \u201cstring\u201d<\/em>&nbsp;.<\/li>\n<li>M\u1ed9t th\u1ef1c h\u00e0nh t\u1ed1t l\u00e0 cung c\u1ea5p&nbsp;<em>m\u00f4 t\u1ea3<\/em>&nbsp;c\u00f3 \u00fd ngh\u0129a cho t\u1ea5t c\u1ea3 c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o.<\/li>\n<li>N\u1ebfu m\u1ed9t bi\u1ebfn kh\u00f4ng ch\u1ee9a gi\u00e1 tr\u1ecb&nbsp;<em>m\u1eb7c \u0111\u1ecbnh<\/em>&nbsp;ho\u1eb7c n\u1ebfu b\u1ea1n mu\u1ed1n ghi \u0111\u00e8 gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a bi\u1ebfn, b\u1ea1n ph\u1ea3i cung c\u1ea5p gi\u00e1 tr\u1ecb d\u01b0\u1edbi d\u1ea1ng bi\u1ebfn m\u00f4i tr\u01b0\u1eddng ho\u1eb7c trong t\u1ec7p gi\u00e1 tr\u1ecb bi\u1ebfn.<\/li>\n<\/ul>\n<h3 id=\"variable-declaration-example\">V\u00ed d\u1ee5 khai b\u00e1o bi\u1ebfn<\/h3>\n<pre class=\"wp-block-code\"><code>variable \"token\" {\n  description = \"This is your Linode APIv4 Token.\"\n}\n\nvariable \"region\" {\n    description = \"This is the location where the Linode instance is deployed.\"\n    default     = \"us-east\"\n}<\/code><\/pre>\n<p>Hai bi\u1ebfn \u0111\u1ea7u v\u00e0o c\u00f3 t\u00ean l\u00e0&nbsp;<em>token<\/em>&nbsp;v\u00e0&nbsp;<em>region<\/em>&nbsp;\u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a t\u01b0\u01a1ng \u1ee9ng.&nbsp;<code>region<\/code>Bi\u1ebfn n\u00e0y \u0111\u1ecbnh ngh\u0129a m\u1ed9t gi\u00e1 tr\u1ecb&nbsp;<em>m\u1eb7c \u0111\u1ecbnh<\/em>&nbsp;. C\u1ea3 hai bi\u1ebfn \u0111\u1ec1u m\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<em>type = \u201cstring\u201d<\/em>&nbsp;, v\u00ec m\u1ed9t type kh\u00f4ng \u0111\u01b0\u1ee3c khai b\u00e1o r\u00f5 r\u00e0ng.<\/p>\n<h3 id=\"supplying-variable-values\">Cung c\u1ea5p c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#supplying-variable-values\"><\/a><\/h3>\n<p>C\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh trong&nbsp;<code>.tfvars<\/code>c\u00e1c t\u1ec7p. C\u00e1c t\u1ec7p n\u00e0y s\u1eed d\u1ee5ng c\u00fa ph\u00e1p gi\u1ed1ng nh\u01b0 c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh Terraform:<\/p>\n<pre class=\"wp-block-code\"><code>token = \"my-token\"\nregion = \"us-west\"<\/code><\/pre>\n<p>Terraform t\u1ef1 \u0111\u1ed9ng t\u1ea3i c\u00e1c gi\u00e1 tr\u1ecb t\u1eeb t\u00ean t\u1ec7p kh\u1edbp v\u1edbi&nbsp;<code>terraform.tfvars<\/code>ho\u1eb7c&nbsp;<code>*.auto.tfvars<\/code>. N\u1ebfu b\u1ea1n l\u01b0u tr\u1eef c\u00e1c gi\u00e1 tr\u1ecb trong t\u1ec7p c\u00f3 t\u00ean kh\u00e1c, b\u1ea1n c\u1ea7n ch\u1ec9 \u0111\u1ecbnh t\u1ec7p \u0111\u00f3 b\u1eb1ng t\u00f9y&nbsp;<code>-var-file<\/code>ch\u1ecdn khi ch\u1ea1y&nbsp;<code>terraform apply<\/code>.&nbsp;<code>-var-file<\/code>T\u00f9y ch\u1ecdn c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c g\u1ecdi nhi\u1ec1u l\u1ea7n:<\/p>\n<pre class=\"wp-block-code\"><code>terraform apply \\\n-var-file=\"variable-values-1.tfvars\" \\\n-var-file=\"variable-values-2.tfvars\"<\/code><\/pre>\n<p>Gi\u00e1 tr\u1ecb c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh trong c\u00e1c bi\u1ebfn m\u00f4i tr\u01b0\u1eddng khi ch\u1ea1y&nbsp;<code>terraform apply<\/code>. T\u00ean c\u1ee7a bi\u1ebfn ph\u1ea3i \u0111\u01b0\u1ee3c th\u00eam ti\u1ec1n t\u1ed1&nbsp;<code>TF_VAR_<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>TF_VAR_token=my-token-value TF_VAR_region=us-west terraform apply\n<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Bi\u1ebfn m\u00f4i tr\u01b0\u1eddng ch\u1ec9 c\u00f3 th\u1ec3 g\u00e1n gi\u00e1 tr\u1ecb cho c\u00e1c bi\u1ebfn c\u1ee7a<code>type = \"string\"<\/code><\/p>\n<h3 id=\"referencing-variables\">Tham chi\u1ebfu c\u00e1c bi\u1ebfn<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#referencing-variables\"><\/a><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 g\u1ecdi c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o hi\u1ec7n c\u00f3 trong t\u1ec7p c\u1ea5u h\u00ecnh b\u1eb1ng c\u00fa ph\u00e1p n\u1ed9i suy c\u1ee7a Terraform. Quan s\u00e1t gi\u00e1 tr\u1ecb c\u1ee7a tham s\u1ed1&nbsp;<em>v\u00f9ng<\/em>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>resource \"linode_instance\" \"WordPress\" {\n    image = \"linode\/ubuntu18.04\"\n    label = \"WPServer\"\n    region = \"${var.region}\"\n    type = \"g6-standard-1\"\n    authorized_keys = &#91; \"example-key\" ]\n    root_pass = \"example-root-pass\"\n}<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu gi\u00e1 tr\u1ecb bi\u1ebfn kh\u00f4ng \u0111\u01b0\u1ee3c cung c\u1ea5p theo b\u1ea5t k\u1ef3 c\u00e1ch n\u00e0o \u0111\u01b0\u1ee3c th\u1ea3o lu\u1eadn \u1edf tr\u00ean v\u00e0 bi\u1ebfn \u0111\u00f3 \u0111\u01b0\u1ee3c g\u1ecdi trong c\u1ea5u h\u00ecnh t\u00e0i nguy\u00ean, Terraform s\u1ebd nh\u1eafc b\u1ea1n nh\u1eadp gi\u00e1 tr\u1ecb khi b\u1ea1n ch\u1ea1y&nbsp;<code>terraform apply<\/code>.<\/p>\n<h2 id=\"interpolation\">N\u1ed9i suy<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#interpolation\"><\/a><\/h2>\n<p>HCL h\u1ed7 tr\u1ee3&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/String_interpolation\" target=\"_blank\" rel=\"noreferrer noopener\">n\u1ed9i suy<\/a>&nbsp;c\u00e1c gi\u00e1 tr\u1ecb. N\u1ed9i suy \u0111\u01b0\u1ee3c g\u00f3i trong m\u1ed9t m\u1edf&nbsp;<code>${<\/code>v\u00e0 m\u1ed9t \u0111\u00f3ng&nbsp;<code>}<\/code>. T\u00ean bi\u1ebfn \u0111\u1ea7u v\u00e0o \u0111\u01b0\u1ee3c th\u00eam ti\u1ec1n t\u1ed1 l\u00e0&nbsp;<code>var.<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>provider \"linode\" {\n    token = \"${var.token}\"\n}<\/code><\/pre>\n<p>C\u00fa ph\u00e1p n\u1ed9i suy r\u1ea5t m\u1ea1nh m\u1ebd v\u00e0 cho ph\u00e9p b\u1ea1n tham chi\u1ebfu c\u00e1c thu\u1ed9c t\u00ednh c\u1ee7a c\u00e1c t\u00e0i nguy\u00ean kh\u00e1c, g\u1ecdi c\u00e1c h\u00e0m t\u00edch h\u1ee3p v\u00e0 s\u1eed d\u1ee5ng c\u00e1c \u0111i\u1ec1u ki\u1ec7n v\u00e0 m\u1eabu.<\/p>\n<p>C\u1ea5u h\u00ecnh c\u1ee7a t\u00e0i nguy\u00ean n\u00e0y s\u1eed d\u1ee5ng \u0111i\u1ec1u ki\u1ec7n \u0111\u1ec3 cung c\u1ea5p gi\u00e1 tr\u1ecb cho tham&nbsp;<code>tags<\/code> s\u1ed1:<\/p>\n<pre class=\"wp-block-code\"><code>resource \"linode_instance\" \"web\" {\n    tags = &#91;\"${var.env == \"production\" ? var.prod_subnet : var.dev_subnet}\"]\n}<\/code><\/pre>\n<p>N\u1ebfu&nbsp;<code>env<\/code>bi\u1ebfn c\u00f3 gi\u00e1 tr\u1ecb l\u00e0&nbsp;<em>production<\/em>&nbsp;th\u00ec&nbsp;<code>prod_subnet<\/code>bi\u1ebfn \u0111\u00f3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng. N\u1ebfu kh\u00f4ng th\u00ec bi\u1ebfn \u0111\u00f3&nbsp;<code>dev_subent<\/code>\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.<\/p>\n<h3 id=\"functions\">Ch\u1ee9c n\u0103ng<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#functions\"><\/a><\/h3>\n<p>Terraform c\u00f3 c\u00e1c h\u00e0m t\u00ednh to\u00e1n t\u00edch h\u1ee3p th\u1ef1c hi\u1ec7n nhi\u1ec1u ho\u1ea1t \u0111\u1ed9ng kh\u00e1c nhau, bao g\u1ed3m \u0111\u1ecdc t\u1ec7p, n\u1ed1i danh s\u00e1ch, m\u00e3 h\u00f3a ho\u1eb7c t\u1ea1o t\u1ed5ng ki\u1ec3m tra c\u1ee7a m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng, c\u0169ng nh\u01b0 t\u00ecm ki\u1ebfm v\u00e0 thay th\u1ebf.<\/p>\n<pre class=\"wp-block-code\"><code>resource \"linode_sshkey\" \"main_key\" {\n    label = \"foo\"\n    ssh_key = \"${chomp(file(\"~\/.ssh\/id_rsa.pub\"))}\"\n}<\/code><\/pre>\n<p>Trong v\u00ed d\u1ee5 n\u00e0y,&nbsp;<code>ssh_key = \"${chomp(file(\"~\/.ssh\/id_rsa.pub\"))}\"<\/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.&nbsp;<code>chomp()<\/code>H\u00e0m n\u00e0y x\u00f3a c\u00e1c d\u00f2ng m\u1edbi theo sau kh\u1ecfi kh\u00f3a SSH. L\u01b0u \u00fd r\u1eb1ng c\u00e1c h\u00e0m l\u1ed3ng nhau \u0111\u01b0\u1ee3c bao b\u1ecdc trong opening&nbsp;<code>${<\/code>v\u00e0 closing&nbsp;<code>}<\/code>\u0111\u1ec3 ch\u1ec9 ra r\u1eb1ng gi\u00e1 tr\u1ecb c\u1ea7n \u0111\u01b0\u1ee3c n\u1ed9i suy.<\/p>\n<p>Ghi ch\u00fa:Khi b\u1ea1n ch\u1ea1y&nbsp;<code>terraform console<\/code>s\u1ebd t\u1ea1o ra m\u1ed9t m\u00f4i tr\u01b0\u1eddng n\u01a1i b\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m tra c\u00e1c h\u00e0m n\u1ed9i suy. V\u00ed d\u1ee5:<\/p>\n<pre class=\"wp-block-code\"><code>terraform console\n<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>&gt; list(\"newark\", \"atlanta\", \"dallas\")\n&#91;\n  \"newark\",\n  \"atlanta\",\n  \"dallas\",\n]\n&gt;<\/code><\/pre>\n<p>T\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Terraform bao g\u1ed3m danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/configuration\/interpolation.html#supported-built-in-functions\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c h\u00e0m t\u00edch h\u1ee3p \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3<\/a>&nbsp;.<\/p>\n<h3 id=\"templates\">M\u1eabu<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#templates\"><\/a><\/h3>\n<p>M\u1eabu c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 l\u01b0u tr\u1eef c\u00e1c chu\u1ed7i d\u1eef li\u1ec7u l\u1edbn. Nh\u00e0 cung c\u1ea5p m\u1eabu s\u1ebd hi\u1ec3n th\u1ecb c\u00e1c ngu\u1ed3n d\u1eef li\u1ec7u cho c\u00e1c t\u00e0i nguy\u00ean Terraform kh\u00e1c ho\u1eb7c c\u00e1c \u0111\u1ea7u ra \u0111\u1ec3 s\u1eed d\u1ee5ng. Ngu\u1ed3n d\u1eef li\u1ec7u c\u00f3 th\u1ec3 l\u00e0 m\u1ed9t t\u1ec7p ho\u1eb7c m\u1ed9t m\u1eabu n\u1ed9i tuy\u1ebfn.<\/p>\n<p>Ngu\u1ed3n d\u1eef li\u1ec7u c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00fa ph\u00e1p n\u1ed9i suy chu\u1ea9n c\u1ee7a Terraform cho c\u00e1c bi\u1ebfn. Sau \u0111\u00f3, m\u1eabu \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb v\u1edbi c\u00e1c gi\u00e1 tr\u1ecb bi\u1ebfn m\u00e0 b\u1ea1n cung c\u1ea5p trong kh\u1ed1i d\u1eef li\u1ec7u.<\/p>\n<p>T\u00e0i nguy\u00ean m\u1eabu v\u00ed d\u1ee5 n\u00e0y thay th\u1ebf gi\u00e1 tr\u1ecb t\u1eeb \u201c${linode_instance.web.ip_address}\u201d b\u1ea5t c\u1ee9 n\u01a1i n\u00e0o \u201c${web_ip}\u201d xu\u1ea5t hi\u1ec7n b\u00ean trong t\u1ec7p m\u1eabu&nbsp;<code>ips.json<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>data \"template_file\" \"web\" {\n    template = \"${file(\"${path.module}\/ips.json\")}\"\n\n    vars {\n        web_ip = \"${linode_instance.web.ip_address}\"\n    }\n}<\/code><\/pre>\n<p>Sau \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 x\u00e1c \u0111\u1ecbnh&nbsp;<a href=\"https:\/\/learn.hashicorp.com\/terraform\/getting-started\/outputs.html\" target=\"_blank\" rel=\"noreferrer noopener\"><em>bi\u1ebfn \u0111\u1ea7u ra<\/em><\/a>&nbsp;\u0111\u1ec3 xem m\u1eabu \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb khi b\u1ea1n ch\u1ea1y&nbsp;<code>terraform apply<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>output \"ip\" {\n  value = \"${data.template_file.web.rendered}\"\n}<\/code><\/pre>\n<p>T\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Terraform c\u00f3 danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c th\u00e0nh ph\u1ea7n&nbsp;c\u00fa ph\u00e1p n\u1ed9i suy&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/configuration\/interpolation.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00f3 s\u1eb5n .<\/a><\/p>\n<h2 id=\"next-steps-in-terraform\">C\u00e1c b\u01b0\u1edbc ti\u1ebfp theo trong Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/#next-steps-in-terraform\"><\/a><\/h2>\n<p>B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 quen v\u1edbi HCL, b\u1ea1n c\u00f3 th\u1ec3 b\u1eaft \u0111\u1ea7u t\u1ea1o phi\u00ean b\u1ea3n Linode v\u1edbi Terraform b\u1eb1ng c\u00e1ch l\u00e0m theo 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;.<\/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:\/\/github.com\/hashicorp\/hcl\" target=\"_blank\" rel=\"noreferrer noopener\">HCL tr\u00ean GitHub<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/configuration\/syntax.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Terraform &#8211; C\u00fa ph\u00e1p c\u1ea5u h\u00ecnh<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/introduction-to-hcl\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh HashiCorp (HCL) l\u00e0 ng\u00f4n ng\u1eef c\u1ea5u h\u00ecnh do&nbsp;HashiCorp&nbsp;bi\u00ean so\u1ea1n . HCL \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 t\u1ef1 \u0111\u1ed9ng h\u00f3a c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng \u0111\u00e1m m\u00e2y c\u1ee7a HashiCorp, ch\u1eb3ng h\u1ea1n nh\u01b0&nbsp;Terraform&nbsp;. Ng\u00f4n ng\u1eef n\u00e0y \u0111\u01b0\u1ee3c t\u1ea1o ra v\u1edbi m\u1ee5c ti\u00eau th\u00e2n thi\u1ec7n v\u1edbi c\u1ea3 con ng\u01b0\u1eddi v\u00e0 m\u00e1y m\u00f3c. Ng\u00f4n<\/p>\n","protected":false},"author":1,"featured_media":35678,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[107],"tags":[],"class_list":["post-34916","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-configuration-management-basics"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34916","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=34916"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34916\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35678"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}