{"id":35007,"date":"2024-09-25T15:30:20","date_gmt":"2024-09-25T08:30:20","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/25\/create-a-nodebalancer-with-terraform\/"},"modified":"2024-09-25T15:30:20","modified_gmt":"2024-09-25T08:30:20","slug":"create-a-nodebalancer-with-terraform","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/25\/create-a-nodebalancer-with-terraform\/","title":{"rendered":"T\u1ea1o m\u1ed9t NodeBalancer b\u1eb1ng Terraform"},"content":{"rendered":"<p>Terraform cho ph\u00e9p b\u1ea1n bi\u1ec3u di\u1ec5n C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng M\u00e3 (IaC). B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng n\u00f3 \u0111\u1ec3 qu\u1ea3n l\u00fd c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng, t\u0103ng t\u1ed1c tri\u1ec3n khai v\u00e0 chia s\u1ebb c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n trong m\u1ed9t nh\u00f3m. Trong h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng Terraform \u0111\u1ec3 t\u1ea1o NodeBalancer ph\u00e2n ph\u1ed1i l\u01b0u l\u01b0\u1ee3ng gi\u1eefa hai Linode.<\/p>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: C\u1ea5u h\u00ecnh v\u00e0 l\u1ec7nh \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong h\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd d\u1eabn \u0111\u1ebfn vi\u1ec7c nhi\u1ec1u t\u00e0i nguy\u00ean c\u00f3 th\u1ec3 thanh to\u00e1n \u0111\u01b0\u1ee3c th\u00eam v\u00e0o t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n. H\u00e3y \u0111\u1ea3m b\u1ea3o theo d\u00f5i ch\u1eb7t ch\u1ebd t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n trong Linode Cloud Manager \u0111\u1ec3 tr\u00e1nh c\u00e1c kho\u1ea3n ph\u00ed kh\u00f4ng mong mu\u1ed1n. Xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/billing\/\">Thanh to\u00e1n v\u00e0 H\u00f3a \u0111\u01a1n<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft th\u00eam chi ti\u1ebft.N\u1ebfu b\u1ea1n mu\u1ed1n ng\u1eebng t\u00ednh ph\u00ed cho c\u00e1c t\u00e0i nguy\u00ean \u0111\u01b0\u1ee3c t\u1ea1o trong h\u01b0\u1edbng d\u1eabn n\u00e0y,&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#optional-remove-the-nodebalancer-resources\">h\u00e3y x\u00f3a ch\u00fang<\/a>&nbsp;khi b\u1ea1n ho\u00e0n th\u00e0nh c\u00f4ng vi\u1ec7c.<\/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-a-nodebalancer-with-terraform\/#before-you-begin\"><\/a><\/h2>\n<ol>\n<li>B\u1ea1n n\u00ean c\u00e0i \u0111\u1eb7t Terraform trong m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n c\u1ee7a m\u00ecnh v\u00e0 c\u00f3 ki\u1ebfn \u200b\u200bth\u1ee9c th\u1ef1c t\u1ebf v\u1ec1 c\u1ea5u h\u00ecnh t\u00e0i nguy\u00ean Terraform v\u00e0&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;. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 c\u00e1ch c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng Terraform, h\u00e3y xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-build-your-infrastructure-using-terraform-and-linode\/\">S\u1eed d\u1ee5ng Terraform \u0111\u1ec3 cung c\u1ea5p m\u00f4i tr\u01b0\u1eddng Linode<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .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.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.<\/li>\n<li>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.<\/li>\n<li>T\u1ea1o m\u1ed9t&nbsp;<code>terraform_nodebalancer<\/code>th\u01b0 m\u1ee5c tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n cho d\u1ef1 \u00e1n Terraform m\u00e0 b\u1ea1n s\u1ebd t\u1ea1o trong h\u01b0\u1edbng d\u1eabn n\u00e0y. T\u1ea5t c\u1ea3 c\u00e1c t\u1ec7p b\u1ea1n t\u1ea1o trong h\u01b0\u1edbng d\u1eabn n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c \u0111\u1eb7t trong th\u01b0 m\u1ee5c n\u00e0y v\u00e0 b\u1ea1n ph\u1ea3i ch\u1ea1y t\u1ea5t c\u1ea3 c\u00e1c l\u1ec7nh t\u1eeb th\u01b0 m\u1ee5c n\u00e0y. D\u1ef1 \u00e1n m\u1edbi n\u00e0y kh\u00f4ng \u0111\u01b0\u1ee3c t\u1ea1o b\u00ean trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n Terraform kh\u00e1c, bao g\u1ed3m c\u1ea3 th\u01b0 m\u1ee5c m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 \u0111\u00e3 t\u1ea1o khi l\u00e0m theo&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;tr\u01b0\u1edbc \u0111\u00f3 .<\/li>\n<\/ol>\n<h2 id=\"create-a-terraform-configuration-file\">T\u1ea1o t\u1ec7p c\u1ea5u h\u00ecnh Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-a-terraform-configuration-file\"><\/a><\/h2>\n<h3 id=\"create-a-provider-block\">T\u1ea1o m\u1ed9t kh\u1ed1i nh\u00e0 cung c\u1ea5p<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-a-provider-block\"><\/a><\/h3>\n<p>B\u01b0\u1edbc \u0111\u1ea7u ti\u00ean c\u1ea7n th\u1ef1c hi\u1ec7n khi t\u1ea1o t\u1ec7p c\u1ea5u h\u00ecnh Terraform l\u00e0 t\u1ea1o&nbsp;<em>kh\u1ed1i nh\u00e0 cung c\u1ea5p<\/em>&nbsp;. Kh\u1ed1i n\u00e0y cho Terraform bi\u1ebft nh\u00e0 cung c\u1ea5p n\u00e0o c\u1ea7n s\u1eed d\u1ee5ng. Gi\u00e1 tr\u1ecb c\u1ea5u h\u00ecnh duy nh\u1ea5t m\u00e0 nh\u00e0 cung c\u1ea5p Linode c\u1ea7n l\u00e0 m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp API.<\/p>\n<p>T\u1ea1o m\u1ed9t t\u1ec7p c\u00f3 t\u00ean&nbsp;<code>nodebalancer.tf<\/code>trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n Terraform c\u1ee7a b\u1ea1n. B\u1ea1n s\u1ebd th\u00eam v\u00e0o t\u1ec7p n\u00e0y trong su\u1ed1t h\u01b0\u1edbng d\u1eabn. Th\u00eam c\u00e1c kh\u1ed1i nh\u00e0 cung c\u1ea5p v\u00e0o 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}\n\nprovider \"linode\" {\n    token = var.token\n}<\/code><\/pre>\n<p>Kh\u1ed1i nh\u00e0 cung c\u1ea5p n\u00e0y s\u1eed d\u1ee5ng n\u1ed9i suy bi\u1ebfn \u0111\u1ec3 truy c\u1eadp gi\u00e1 tr\u1ecb c\u1ee7a m\u00e3 th\u00f4ng b\u00e1o API c\u1ee7a b\u1ea1n. B\u1ea1n s\u1ebd t\u1ea1o c\u00e1c bi\u1ebfn \u0111\u1ea7u v\u00e0o trong m\u1ed9t&nbsp;<code>variables.tf<\/code>t\u1ec7p ri\u00eang sau trong ph\u1ea7n&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#define-terraform-variables\">X\u00e1c \u0111\u1ecbnh bi\u1ebfn Terraform<\/a>&nbsp;c\u1ee7a h\u01b0\u1edbng d\u1eabn n\u00e0y. B\u1ea5t k\u1ef3 bi\u1ebfn \u0111\u1ea7u v\u00e0o n\u00e0o b\u1ea1n x\u00e1c \u0111\u1ecbnh trong&nbsp;<code>variables.tf<\/code>t\u1ec7p \u0111\u1ec1u c\u00f3 s\u1eb5n t\u1eeb&nbsp;<code>var<\/code>t\u1eeb \u0111i\u1ec3n b\u1eb1ng k\u00fd hi\u1ec7u d\u1ea5u ch\u1ea5m. B\u1ea1n s\u1ebd s\u1eed d\u1ee5ng n\u1ed9i suy bi\u1ebfn v\u00e0 tham chi\u1ebfu c\u00e1c bi\u1ebfn b\u1eb1ng k\u00fd hi\u1ec7u d\u1ea5u ch\u1ea5m trong su\u1ed1t h\u01b0\u1edbng d\u1eabn n\u00e0y.<\/p>\n<h3 id=\"create-a-nodebalancer-resource\">T\u1ea1o m\u1ed9t t\u00e0i nguy\u00ean NodeBalancer<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-a-nodebalancer-resource\"><\/a><\/h3>\n<p>T\u1ea1o t\u00e0i nguy\u00ean NodeBalancer trong&nbsp;<code>nodebalancer.tf<\/code>t\u1ec7p:<\/p>\n<pre class=\"wp-block-code\"><code>...\n\nresource \"linode_nodebalancer\" \"example-nodebalancer\" {\n    label = \"examplenodebalancer\"\n    region = var.region\n}\n\n...<\/code><\/pre>\n<p>T\u00e0i&nbsp;<code>linode_nodebalancer<\/code>nguy\u00ean cung c\u1ea5p hai nh\u00e3n. Nh\u00e3n \u0111\u1ea7u ti\u00ean,&nbsp;<code>example-nodebalancer<\/code>, \u0111\u01b0\u1ee3c Terraform s\u1eed d\u1ee5ng n\u1ed9i b\u1ed9. Nh\u00e3n th\u1ee9 hai,&nbsp;<code>examplenodebalancer<\/code>, \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 tham chi\u1ebfu NodeBalancer c\u1ee7a b\u1ea1n trong c\u00e1c c\u00f4ng c\u1ee5 nh\u01b0 Manager v\u00e0 Linode CLI. V\u00f9ng cho NodeBalancer n\u00e0y \u0111\u01b0\u1ee3c cung c\u1ea5p v\u1edbi bi\u1ebfn&nbsp;<code>region<\/code>.<\/p>\n<h3 id=\"create-nodebalancer-config-resources\">T\u1ea1o t\u00e0i nguy\u00ean c\u1ea5u h\u00ecnh NodeBalancer<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-nodebalancer-config-resources\"><\/a><\/h3>\n<p>Ngo\u00e0i t\u00e0i nguy\u00ean NodeBalancer, b\u1ea1n ph\u1ea3i cung c\u1ea5p \u00edt nh\u1ea5t m\u1ed9t t\u00e0i nguy\u00ean C\u1ea5u h\u00ecnh NodeBalancer. T\u00e0i nguy\u00ean n\u00e0y \u0111\u1ecbnh ngh\u0129a c\u00e1c c\u1ed5ng, giao th\u1ee9c, ki\u1ec3m tra t\u00ecnh tr\u1ea1ng v\u00e0 \u0111\u1ed9 b\u00e1m d\u00ednh c\u1ee7a phi\u00ean, c\u00f9ng v\u1edbi c\u00e1c t\u00f9y ch\u1ecdn kh\u00e1c m\u00e0 NodeBalancer c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng. \u0110\u1ed1i v\u1edbi v\u00ed d\u1ee5 n\u00e0y, b\u1ea1n s\u1ebd t\u1ea1o c\u1ea5u h\u00ecnh NodeBalancer \u0111\u1ec3 truy c\u1eadp HTTP tr\u00ean c\u1ed5ng 80, nh\u01b0ng b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 t\u1ea1o c\u1ea5u h\u00ecnh \u0111\u1ec3 truy c\u1eadp HTTPS tr\u00ean c\u1ed5ng 443 n\u1ebfu b\u1ea1n c\u00f3&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-lets-encrypt-to-create-ssl-certificates\/\">ch\u1ee9ng ch\u1ec9 SSL\/TLS<\/a>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>...\n\nresource \"linode_nodebalancer_config\" \"example-nodebalancer-config\" {\n    nodebalancer_id = linode_nodebalancer.example-nodebalancer.id\n    port = 80\n    protocol = \"http\"\n    check = \"http_body\"\n    check_path = \"\/healthcheck\/\"\n    check_body = \"healthcheck\"\n    check_attempts = 30\n    check_timeout = 25\n    check_interval = 30\n    stickiness = \"http_cookie\"\n    algorithm = \"roundrobin\"\n}\n\n...<\/code><\/pre>\n<p>T\u00e0i nguy\u00ean NodeBalancer Config y\u00eau c\u1ea7u m\u1ed9t NodeBalancer ID, \u0111\u01b0\u1ee3c \u0111i\u1ec1n v\u00e0o d\u00f2ng \u0111\u1ea7u ti\u00ean b\u1eb1ng bi\u1ebfn&nbsp;<code>linode_nodebalancer.example-nodebalancer.id<\/code>. V\u00ec&nbsp;<code>nodebalancer_id<\/code>\u0111\u1ed1i s\u1ed1 tham chi\u1ebfu \u0111\u1ebfn m\u1ed9t NodeBalancer ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng bi\u1ebfn n\u00e0y l\u00e0m tr\u00ecnh gi\u1eef ch\u1ed7 \u0111\u1ec3 tham chi\u1ebfu \u0111\u1ebfn NodeBalancer ID. Terraform s\u1ebd t\u1ef1 \u0111\u1ed9ng bi\u1ebft \u0111\u1ec3 t\u1ea1o t\u00e0i nguy\u00ean NodeBalancer tr\u01b0\u1edbc khi t\u1ea1o b\u1ea5t k\u1ef3 t\u00e0i nguy\u00ean n\u00e0o kh\u00e1c tham chi\u1ebfu \u0111\u1ebfn t\u00e0i nguy\u00ean \u0111\u00f3. Theo c\u00e1ch n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng ph\u1ee9c t\u1ea1p tham chi\u1ebfu \u0111\u1ebfn c\u00e1c ph\u1ea7n c\u1ee7a ch\u00ednh n\u00f3 m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i lo l\u1eafng v\u1ec1 th\u1ee9 t\u1ef1 xu\u1ea5t hi\u1ec7n c\u1ee7a c\u00e1c t\u00e0i nguy\u00ean trong c\u1ea5u h\u00ecnh Terraform ho\u1eb7c li\u1ec7u c\u00e1c t\u00e0i nguy\u00ean \u0111\u00f3 \u0111\u00e3 t\u1ed3n t\u1ea1i hay ch\u01b0a.<\/p>\n<p>V\u1ec1 ph\u1ea7n c\u00e0i \u0111\u1eb7t, ki\u1ec3m tra t\u00ecnh tr\u1ea1ng \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh&nbsp;<code>http_body<\/code>, ngh\u0129a l\u00e0 ki\u1ec3m tra t\u00ecnh tr\u1ea1ng s\u1ebd t\u00ecm chu\u1ed7i \u0111\u01b0\u1ee3c \u0111\u1eb7t b\u1edfi&nbsp;<code>check_body<\/code>trong ph\u1ea7n th\u00e2n c\u1ee7a trang \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u1ea1i&nbsp;<code>check_path<\/code>. NodeBalancer s\u1ebd \u0111\u01b0a m\u1ed9t n\u00fat ra kh\u1ecfi v\u00f2ng quay sau 30 l\u1ea7n ki\u1ec3m tra kh\u00f4ng th\u00e0nh c\u00f4ng. M\u1ed7i l\u1ea7n ki\u1ec3m tra s\u1ebd \u0111\u1ee3i ph\u1ea3n h\u1ed3i trong 25 gi\u00e2y tr\u01b0\u1edbc khi \u0111\u01b0\u1ee3c coi l\u00e0 l\u1ed7i, v\u1edbi 30 gi\u00e2y gi\u1eefa c\u00e1c l\u1ea7n ki\u1ec3m tra. Ngo\u00e0i ra, c\u00e0i \u0111\u1eb7t \u0111\u1ed9 d\u00ednh c\u1ee7a phi\u00ean \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh&nbsp;<code>http_cookie<\/code>. \u0110i\u1ec1u n\u00e0y ngh\u0129a l\u00e0 ng\u01b0\u1eddi d\u00f9ng s\u1ebd ti\u1ebfp t\u1ee5c \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn c\u00f9ng m\u1ed9t m\u00e1y ch\u1ee7 b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng cookie phi\u00ean. Thu\u1eadt to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh&nbsp;<code>roundrobin<\/code>, thu\u1eadt to\u00e1n n\u00e0y s\u1ebd s\u1eafp x\u1ebfp ng\u01b0\u1eddi d\u00f9ng \u0111\u1ed3ng \u0111\u1ec1u tr\u00ean c\u00e1c n\u00fat ph\u1ee5 tr\u1ee3 c\u1ee7a b\u1ea1n d\u1ef1a tr\u00ean m\u00e1y ch\u1ee7 n\u00e0o \u0111\u01b0\u1ee3c truy c\u1eadp l\u1ea7n cu\u1ed1i.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Xem l\u1ea1i&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/networking\/nodebalancers\/guides\/configure\/\">H\u01b0\u1edbng d\u1eabn tham kh\u1ea3o NodeBalancer<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7 c\u00e1c t\u00f9y ch\u1ecdn c\u1ea5u h\u00ecnh NodeBalancer.<\/p>\n<h3 id=\"create-nodebalancer-node-resources\">T\u1ea1o t\u00e0i nguy\u00ean NodeBalancer<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-nodebalancer-node-resources\"><\/a><\/h3>\n<p>Ph\u1ea7n th\u1ee9 ba c\u1ee7a qu\u00e1 tr\u00ecnh thi\u1ebft l\u1eadp NodeBalancer trong Terraform l\u00e0 t\u1ea1o t\u00e0i nguy\u00ean NodeBalancer. T\u00e0i nguy\u00ean n\u00e0y ch\u1ee9a th\u00f4ng tin v\u1ec1 t\u1eebng Node v\u00e0 c\u00e1ch ch\u00fang li\u00ean quan \u0111\u1ebfn t\u00e0i nguy\u00ean NodeBalancer v\u00e0 NodeBalancer Configuration.<\/p>\n<pre class=\"wp-block-code\"><code>...\n\nresource \"linode_nodebalancer_node\" \"example-nodebalancer-node\" {\n    count = var.node_count\n    nodebalancer_id = linode_nodebalancer.example-nodebalancer.id\n    config_id = linode_nodebalancer_config.example-nodebalancer-config.id\n    label = \"example-node-${count.index + 1}\"\n    address = \"${element(linode_instance.example-instance.*.private_ip_address, count.index)}:80\"\n    mode = \"accept\"\n}\n\n...<\/code><\/pre>\n<p>\u0110\u1ed1i s\u1ed1 c\u1ee7a t\u00e0i nguy\u00ean n\u00e0y&nbsp;<code>count<\/code>s\u1ebd \u0111\u01b0\u1ee3c \u0111i\u1ec1n b\u1eb1ng&nbsp;<code>node_count<\/code>bi\u1ebfn \u0111\u1ea7u v\u00e0o m\u00e0 b\u1ea1n s\u1ebd \u0111\u1ecbnh ngh\u0129a sau trong h\u01b0\u1edbng d\u1eabn n\u00e0y.&nbsp;<code>count<\/code>\u0110\u1ed1i s\u1ed1 cho Terraform bi\u1ebft r\u1eb1ng n\u00f3 s\u1ebd cung c\u1ea5p&nbsp;<code>node_count<\/code>s\u1ed1 l\u01b0\u1ee3ng Node.<\/p>\n<p>V\u00ec vi\u1ec7c cung c\u1ea5p nhi\u1ec1u h\u01a1n m\u1ed9t n\u00fat s\u1ebd t\u1ea1o ra m\u1ed9t v\u00f2ng l\u1eb7p trong quy tr\u00ecnh Terraform, trong \u0111\u00f3 b\u01b0\u1edbc t\u1ea1o n\u00fat \u0111\u01b0\u1ee3c l\u1eb7p l\u1ea1i, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng bi\u1ebfn&nbsp;<code>count.index<\/code>\u0111\u1ec3 theo d\u00f5i Terraform \u0111ang \u1edf l\u1ea7n l\u1eb7p n\u00e0o trong v\u00f2ng l\u1eb7p. N\u1ed9i suy&nbsp;<code>{count.index + 1}<\/code>trong \u0111\u1ed1i s\u1ed1 c\u1ee7a n\u00fat&nbsp;<code>label<\/code>cho Terraform bi\u1ebft r\u1eb1ng b\u1ea1n mu\u1ed1n m\u1ed7i n\u00fat \u0111\u01b0\u1ee3c g\u1eafn nh\u00e3n tu\u1ea7n t\u1ef1 v\u00e0 v\u00ec&nbsp;<code>count.index<\/code>b\u1eaft \u0111\u1ea7u t\u1eeb s\u1ed1 kh\u00f4ng, b\u1ea1n mu\u1ed1n s\u1ed1 l\u01b0\u1ee3ng b\u1eaft \u0111\u1ea7u t\u1eeb m\u1ed9t.<\/p>\n<p><code>linode_instance.example-instance.*.private_ip_address<\/code>tham chi\u1ebfu \u0111\u1ebfn c\u00e1c \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u1ee7a c\u00e1c phi\u00ean b\u1ea3n Linode ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o. \u1ede b\u01b0\u1edbc ti\u1ebfp theo, c\u00e1c t\u00e0i nguy\u00ean Phi\u00ean b\u1ea3n Linode s\u1ebd \u0111\u01b0\u1ee3c g\u1eafn nh\u00e3n&nbsp;<code>example-instance<\/code>. Terraform c\u00f3 quy\u1ec1n truy c\u1eadp v\u00e0o m\u1ed9t s\u1ed1 thu\u1ed9c t\u00ednh cho m\u1ed7i t\u00e0i nguy\u00ean m\u00e0 n\u00f3 t\u1ea1o ra v\u00e0&nbsp;<code>private_ip_address<\/code>l\u00e0 m\u1ed9t trong nh\u1eefng thu\u1ed9c t\u00ednh kh\u1ea3 d\u1ee5ng t\u1eeb t\u00e0i nguy\u00ean Phi\u00ean b\u1ea3n Linode. V\u00ec s\u1ebd c\u00f3 hai phi\u00ean b\u1ea3n Linode \u0111\u01b0\u1ee3c t\u1ea1o trong c\u00f9ng m\u1ed9t b\u01b0\u1edbc, Terraform nh\u00f3m c\u00e1c t\u1eadp h\u1ee3p thu\u1ed9c t\u00ednh n\u00e0y trong m\u1ed9t danh s\u00e1ch.&nbsp;<code>element()<\/code>H\u00e0m n\u00e0y cho ph\u00e9p b\u1ea1n l\u1ea5y m\u1ed9t m\u1ee5c duy nh\u1ea5t t\u1eeb \u200b\u200bdanh s\u00e1ch d\u1ef1a tr\u00ean ch\u1ec9 m\u1ee5c m\u1ee5c. \u1ede \u0111\u00e2y, thay v\u00ec cung c\u1ea5p m\u1ed9t s\u1ed1 \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a c\u1ee9ng cho ch\u1ec9 m\u1ee5c, b\u1ea1n c\u00f3 th\u1ec3 cung c\u1ea5p&nbsp;<code>count.index<\/code>. Theo c\u00e1ch n\u00e0y, NodeBalancer \u0111\u1ea7u ti\u00ean s\u1ebd tham chi\u1ebfu \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u1ee7a phi\u00ean b\u1ea3n Linode \u0111\u1ea7u ti\u00ean v\u00e0 NodeBalancer th\u1ee9 hai s\u1ebd tham chi\u1ebfu \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u1ee7a phi\u00ean b\u1ea3n th\u1ee9 hai.<\/p>\n<h3 id=\"create-a-linode-instance-resource\">T\u1ea1o m\u1ed9t t\u00e0i nguy\u00ean Linode Instance<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-a-linode-instance-resource\"><\/a><\/h3>\n<p>B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 c\u1ea5u h\u00ecnh NodeBalancer, b\u1ea1n c\u1ea7n cung c\u1ea5p cho n\u00f3 m\u1ed9t t\u00e0i nguy\u00ean Linode Instance. T\u00e0i nguy\u00ean n\u00e0y s\u1ebd cho ph\u00e9p Terraform bi\u1ebft nh\u1eefng instance n\u00e0o c\u1ea7n t\u1ea1o \u0111\u1ec3 \u0111\u00e1p \u1ee9ng nhu c\u1ea7u c\u1ee7a v\u00ed d\u1ee5 NodeBalancer c\u1ee7a ch\u00fang ta.<\/p>\n<pre class=\"wp-block-code\"><code>...\n\nresource \"linode_instance\" \"example-instance\" {\n    count  = var.node_count\n    label  = \"example-instance-${count.index + 1}\"\n    group = \"nodebalancer-example\"\n    tags = &#91;\"nodebalancer-example\"]\n    region = var.region\n    type = \"g6-nanode-1\"\n    image = \"linode\/ubuntu18.10\"\n    authorized_keys = &#91;chomp(file(var.ssh_key))]\n    root_pass = random_string.password.result\n    private_ip = true\n\n    provisioner \"remote-exec\" {\n        inline = &#91;\n            # install NGINX\n            \"export PATH=$PATH:\/usr\/bin\",\n\n            \"apt-get -q update\",\n            \"mkdir -p \/var\/www\/html\/\",\n            \"mkdir -p \/var\/www\/html\/healthcheck\",\n            \"echo healthcheck &gt; \/var\/www\/html\/healthcheck\/index.html\",\n            \"echo node ${count.index + 1} &gt; \/var\/www\/html\/index.html\",\n            \"apt-get -q -y install nginx\",\n        ]\n\n        connection {\n            type = \"ssh\"\n            user = \"root\"\n            password = random_string.password.result\n            host = self.ip_address\n        }\n    }\n}\n\n...<\/code><\/pre>\n<p>T\u00e0i nguy\u00ean tr\u00ean s\u1eed d\u1ee5ng c\u00f9ng m\u1ed9t&nbsp;<code>count<\/code>\u0111\u1ed1i s\u1ed1 nh\u01b0 t\u00e0i nguy\u00ean NodeBalancer Node \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u1edf b\u01b0\u1edbc tr\u01b0\u1edbc. Ngo\u00e0i ra,&nbsp;<code>label<\/code>\u0111\u1ed1i s\u1ed1 \u0111ang \u0111\u01b0\u1ee3c t\u0103ng tu\u1ea7n t\u1ef1 theo c\u00e1ch t\u01b0\u01a1ng t\u1ef1 nh\u01b0 NodeBalancer Node.<\/p>\n<p>\u0110\u1ed1i&nbsp;<code>authorized_keys<\/code>s\u1ed1 \u0111\u01b0\u1ee3c cung c\u1ea5p l\u00e0 bi\u1ebfn \u0111\u1ea7u v\u00e0o kh\u00f3a SSH s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a sau trong h\u01b0\u1edbng d\u1eabn n\u00e0y. N\u00f3 \u0111\u01b0\u1ee3c truy\u1ec1n cho h\u00e0m&nbsp;<code>file()<\/code>, \u0111\u1ecdc n\u1ed9i dung c\u1ee7a t\u1ec7p th\u00e0nh chu\u1ed7i. Chu\u1ed7i \u0111\u00f3 sau \u0111\u00f3 \u0111\u01b0\u1ee3c truy\u1ec1n cho&nbsp;<code>chomp()<\/code>h\u00e0m, x\u00f3a b\u1ea5t k\u1ef3 kho\u1ea3ng tr\u1eafng th\u1eeba n\u00e0o.<\/p>\n<p><code>root_pass<\/code>\u0111\u01b0\u1ee3c cung c\u1ea5p k\u1ebft qu\u1ea3 c\u1ee7a&nbsp;<code>random_string<\/code>t\u00e0i nguy\u00ean s\u1ebd \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh sau trong h\u01b0\u1edbng d\u1eabn n\u00e0y.<\/p>\n<p>\u0110i\u1ec1u cu\u1ed1i c\u00f9ng c\u1ea7n l\u01b0u \u00fd trong t\u00e0i nguy\u00ean Linode Instance n\u00e0y l\u00e0&nbsp;<code>remote-exec<\/code>kh\u1ed1i Provisioner. Kh\u1ed1i n\u00e0y ch\u1ee9a hai th\u00e0nh ph\u1ea7n kh\u00e1c,&nbsp;<code>inline<\/code>danh s\u00e1ch v\u00e0&nbsp;<code>connection<\/code>kh\u1ed1i.&nbsp;<code>inline<\/code>l\u00e0 danh s\u00e1ch c\u00e1c l\u1ec7nh m\u00e0 Terraform s\u1ebd th\u1ef1c thi tr\u00ean Linode instance sau khi Linode instance \u0111\u00e3 kh\u1edfi \u0111\u1ed9ng. Trong v\u00ed d\u1ee5 n\u00e0y, c\u00e1c l\u1ec7nh n\u1ed9i tuy\u1ebfn s\u1ebd: c\u1eadp nh\u1eadt Linode instance, t\u1ea1o c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c c\u1ea7n thi\u1ebft cho NGINX, t\u1ea1o t\u1ec7p ki\u1ec3m tra t\u00ecnh tr\u1ea1ng v\u00e0&nbsp;<code>index.html<\/code>t\u1ec7p t\u1ed5ng qu\u00e1t h\u01a1n, v\u00e0 c\u00e0i \u0111\u1eb7t NGINX.<\/p>\n<p>Kh\u1ed1i&nbsp;<code>connection<\/code>gi\u1ea3i th\u00edch cho Terraform c\u00e1ch n\u00f3 c\u00f3 th\u1ec3 truy c\u1eadp v\u00e0o phi\u00ean b\u1ea3n Linode \u0111\u1ec3 ch\u1ea1y c\u00e1c l\u1ec7nh do&nbsp;<code>inline<\/code>danh s\u00e1ch cung c\u1ea5p. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, Terraform s\u1ebd c\u00f3 th\u1ec3 truy c\u1eadp qua SSH, \u0111\u0103ng nh\u1eadp v\u1edbi t\u01b0 c\u00e1ch l\u00e0&nbsp;<code>root<\/code>ng\u01b0\u1eddi d\u00f9ng.<\/p>\n<h3 id=\"create-an-output\">T\u1ea1o m\u1ed9t \u0111\u1ea7u ra<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#create-an-output\"><\/a><\/h3>\n<p>B\u01b0\u1edbc cu\u1ed1i c\u00f9ng b\u1ea1n s\u1ebd th\u1ef1c hi\u1ec7n khi t\u1ea1o&nbsp;<code>nodebalancer.tf<\/code>l\u00e0 th\u00eam \u0111\u1ea7u ra. Terraform s\u1ebd th\u00eam th\u00f4ng tin n\u00e0y v\u00e0o cu\u1ed1i \u0111\u1ea7u ra c\u1ee7a n\u00f3 trong terminal. \u0110\u1ea7u ra c\u00f3 th\u1ec3 l\u00e0 b\u1ea5t k\u1ef3 th\u00f4ng tin n\u00e0o t\u1eeb c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n m\u00e0 b\u1ea1n mu\u1ed1n hi\u1ec3n th\u1ecb. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 s\u1ebd hi\u1ec3n th\u1ecb \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a NodeBalancer:<\/p>\n<pre class=\"wp-block-code\"><code>...\n\noutput \"nodebalancer_ip_address\" {\n    value = linode_nodebalancer.example-nodebalancer.ipv4\n}<\/code><\/pre>\n<h2 id=\"define-terraform-variables\">X\u00e1c \u0111\u1ecbnh c\u00e1c bi\u1ebfn Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#define-terraform-variables\"><\/a><\/h2>\n<p>B\u00e2y gi\u1edd b\u1ea1n s\u1ebd khai b\u00e1o t\u1ea5t c\u1ea3 c\u00e1c bi\u1ebfn c\u1ea7n thi\u1ebft cho c\u1ea5u h\u00ecnh Terraform c\u1ee7a b\u1ea1n trong m\u1ed9t&nbsp;<code>variables.tf<\/code>t\u1ec7p.<\/p>\n<p>1.T\u1ea1o m\u1ed9t t\u1ec7p c\u00f3 t\u00ean l\u00e0&nbsp;<code>variables.tf<\/code>. T\u1ec7p n\u00e0y s\u1ebd t\u1ea1o c\u00e1c bi\u1ebfn \u0111\u01b0\u1ee3c tham chi\u1ebfu trong c\u1ea5u h\u00ecnh NodeBalancer v\u00e0 Nodes c\u1ee7a b\u1ea1n. B\u1ea1n s\u1ebd cung c\u1ea5p gi\u00e1 tr\u1ecb cho c\u00e1c bi\u1ebfn trong m\u1ed9t b\u01b0\u1edbc kh\u00e1c.<\/p>\n<pre class=\"wp-block-code\"><code>variable \"token\" {\n    description = \"Your APIv4 Access Token\"\n}\n\nvariable \"region\" {\n    description = \"The data center where your NodeBalancer and Nodes will reside. E.g., 'us-east'.\"\n    default = \"us-west\"\n}\n\nvariable \"node_count\" {\n    description = \"The amount of backend Nodes to create.\"\n}\n\nvariable \"ssh_key\" {\n    description = \"The local file location of the SSH key that will be transferred to each Linode.\"\n    default = \"~\/.ssh\/id_rsa.pub\"\n}\n\nresource \"random_string\" \"password\" {\n    length = 32\n    special = true\n    upper = true\n    lower = true\n    number = true\n}<\/code><\/pre>\n<p>Terraform cho ph\u00e9p m\u1ed7i bi\u1ebfn c\u00f3 m\u00f4 t\u1ea3 v\u00e0 gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh ri\u00eang. C\u00e1c bi\u1ebfn n\u00e0y s\u1ebd c\u00f3 gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c \u0111i\u1ec1n th\u00f4ng qua vi\u1ec7c s\u1eed d\u1ee5ng t\u1ec7p&nbsp;<code>terraform.tfvars<\/code>m\u00e0 b\u1ea1n s\u1ebd t\u1ea1o \u1edf b\u01b0\u1edbc ti\u1ebfp theo. Vi\u1ec7c t\u00e1ch \u0111\u1ecbnh ngh\u0129a bi\u1ebfn kh\u1ecfi gi\u00e1 tr\u1ecb c\u1ee7a ch\u00fang gi\u00fap ng\u0103n d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m x\u00e2m nh\u1eadp v\u00e0o m\u00e3 Terraform c\u1ee7a b\u1ea1n, n\u1ebfu b\u1ea1n ch\u1ecdn \u0111\u01b0a m\u00e3 c\u1ee7a m\u00ecnh v\u00e0o h\u1ec7 th\u1ed1ng ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n nh\u01b0 Git.Ngo\u00e0i c\u00e1c bi\u1ebfn b\u1ea1n \u0111\u00e3 \u0111\u1ecbnh ngh\u0129a \u1edf tr\u00ean, c\u00f2n c\u00f3 m\u1ed9t&nbsp;<code>random_string<\/code>t\u00e0i nguy\u00ean c\u00f3 nh\u00e3n&nbsp;<code>password<\/code>. T\u00e0i nguy\u00ean n\u00e0y \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi nh\u00e0&nbsp;<a href=\"https:\/\/www.terraform.io\/docs\/providers\/random\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">cung c\u1ea5p Random<\/a>&nbsp;v\u00e0 s\u1ebd t\u1ea1o ra m\u1ed9t chu\u1ed7i ng\u1eabu nhi\u00ean g\u1ed3m 32 k\u00fd t\u1ef1, bao g\u1ed3m c\u00e1c k\u00fd t\u1ef1 vi\u1ebft hoa, k\u00fd t\u1ef1 vi\u1ebft th\u01b0\u1eddng v\u00e0 s\u1ed1. Chu\u1ed7i n\u00e0y s\u1ebd l\u00e0 m\u1eadt kh\u1ea9u g\u1ed1c cho c\u00e1c Nodes ph\u1ee5 tr\u1ee3 c\u1ee7a b\u1ea1n. N\u1ebfu b\u1ea1n mu\u1ed1n ki\u1ec3m so\u00e1t ch\u00ednh x\u00e1c m\u1eadt kh\u1ea9u c\u1ee7a m\u00ecnh, b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecbnh ngh\u0129a m\u1eadt kh\u1ea9u t\u1ea1i \u0111\u00e2y&nbsp;<code>variables.tf<\/code>v\u00e0 \u0111\u1eb7t gi\u00e1 tr\u1ecb cho m\u1eadt kh\u1ea9u \u0111\u00f3&nbsp;<code>terraform.tfvars<\/code>trong b\u01b0\u1edbc ti\u1ebfp theo.<\/p>\n<p>2.T\u1ea1o&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p v\u00e0 cung c\u1ea5p gi\u00e1 tr\u1ecb cho c\u00e1c bi\u1ebfn&nbsp;<code>token<\/code>,&nbsp;<code>region<\/code>, v\u00e0&nbsp;<code>node_count<\/code>. V\u00ed d\u1ee5 n\u00e0y s\u1eed d\u1ee5ng&nbsp;<code>us-east<\/code>trung t\u00e2m d\u1eef li\u1ec7u v\u00e0&nbsp;<code>node_count<\/code>l\u00e0 hai.<\/p>\n<pre class=\"wp-block-code\"><code>token = \"your_api_token\"\nregion = \"us-east\"\nnode_count = 2<\/code><\/pre>\n<p>Khi Terraform ch\u1ea1y, n\u00f3 s\u1ebd t\u00ecm ki\u1ebfm m\u1ed9t t\u1ec7p c\u00f3 t\u00ean&nbsp;<code>terraform.tfvars<\/code>, ho\u1eb7c c\u00e1c t\u1ec7p c\u00f3 ph\u1ea7n m\u1edf r\u1ed9ng&nbsp;<code>*.auto.tfvars<\/code>, v\u00e0 \u0111i\u1ec1n c\u00e1c gi\u00e1 tr\u1ecb \u0111\u00f3 v\u00e0o c\u00e1c bi\u1ebfn Terraform. N\u1ebfu kh\u00f3a SSH c\u1ee7a b\u1ea1n n\u1eb1m \u1edf v\u1ecb tr\u00ed t\u1ec7p kh\u00e1c v\u1edbi gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh, t\u1ee9c l\u00e0 kh\u00f4ng t\u1ed3n t\u1ea1i t\u1ea1i&nbsp;<code>~\/.ssh\/id_rsa.pub<\/code>, th\u00ec b\u1ea1n s\u1ebd c\u1ea7n th\u00eam gi\u00e1 tr\u1ecb \u0111\u00f3 v\u00e0o&nbsp;<code>terraform.tfvars<\/code>.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu b\u1ea1n mu\u1ed1n s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a bi\u1ebfn \u0111\u1ea7u v\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong&nbsp;<code>variables.tf<\/code>t\u1ec7p, b\u1ea1n c\u00f3 th\u1ec3 b\u1ecf qua vi\u1ec7c cung c\u1ea5p gi\u00e1 tr\u1ecb cho bi\u1ebfn \u0111\u00f3 trong&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p.<\/p>\n<p>B\u1ea1n c\u00f3 th\u1ec3 tho\u1ea3i m\u00e1i thay \u0111\u1ed5i b\u1ea5t k\u1ef3 gi\u00e1 tr\u1ecb n\u00e0o trong&nbsp;<code>terraform.tfvars<\/code>t\u1ec7p theo \u00fd th\u00edch c\u1ee7a m\u00ecnh. \u0110\u1ec3 bi\u1ebft danh s\u00e1ch ID trung t\u00e2m d\u1eef li\u1ec7u, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng l\u1ec7nh cURL \u0111\u1ec3 truy v\u1ea5n API:<\/p>\n<pre class=\"wp-block-code\"><code>curl https:\/\/api.linode.com\/v4\/regions<\/code><\/pre>\n<h2 id=\"initializing-planning-and-applying-the-terraform-state\">Kh\u1edfi t\u1ea1o, l\u1eadp k\u1ebf ho\u1ea1ch v\u00e0 \u00e1p d\u1ee5ng tr\u1ea1ng th\u00e1i Terraform<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#initializing-planning-and-applying-the-terraform-state\"><\/a><\/h2>\n<p>V\u00ec h\u01b0\u1edbng d\u1eabn n\u00e0y s\u1eed d\u1ee5ng hai nh\u00e0 cung c\u1ea5p (Linode v\u00e0 Random) m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 ch\u01b0a c\u00e0i \u0111\u1eb7t tr\u00ean m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n c\u1ee5c b\u1ed9 c\u1ee7a m\u00ecnh, n\u00ean b\u1ea1n s\u1ebd c\u1ea7n ch\u1ea1y&nbsp;<code>init<\/code>l\u1ec7nh \u0111\u1ec3 c\u00e0i \u0111\u1eb7t ch\u00fang.<\/p>\n<pre class=\"wp-block-code\"><code>terraform init\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y th\u00f4ng b\u00e1o Terraform \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o th\u00e0nh c\u00f4ng.<\/p>\n<p>\u0110\u1ec3 xem l\u1ea1i k\u1ebf ho\u1ea1ch h\u00e0nh \u0111\u1ed9ng c\u1ee7a Terraform \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong&nbsp;<code>nodebalancer.tf<\/code>t\u1ec7p, h\u00e3y ch\u1ea1y&nbsp;<code>plan<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>terraform plan\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t \u0111\u1ea7u ra d\u00e0i v\u1edbi t\u1ea5t c\u1ea3 c\u00e1c&nbsp;<code>create<\/code>h\u00e0nh \u0111\u1ed9ng s\u1ebd di\u1ec5n ra. Xem l\u1ea1i \u0111\u1ea7u ra, l\u01b0u \u00fd r\u1eb1ng&nbsp;<code>&lt;computed&gt;<\/code>c\u00e1c gi\u00e1 tr\u1ecb b\u1ea1n th\u1ea5y s\u1ebd \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh khi t\u1ea1o. Khi b\u1ea1n h\u00e0i l\u00f2ng v\u1edbi c\u00e1c h\u00e0nh \u0111\u1ed9ng \u0111\u01b0\u1ee3c \u0111\u1ec1 xu\u1ea5t, \u0111\u00e3 \u0111\u1ebfn l\u00fac \u00e1p d\u1ee5ng ch\u00fang.<\/p>\n<p>Ch\u1ea1y&nbsp;<code>apply<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>terraform apply\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c nh\u1eafc ch\u1ea5p thu\u1eadn h\u00e0nh&nbsp;<code>apply<\/code>\u0111\u1ed9ng. Nh\u1eadp&nbsp;<em>yes<\/em>&nbsp;v\u00e0 nh\u1ea5n&nbsp;<strong>Enter<\/strong>&nbsp;. Terraform s\u1ebd b\u1eaft \u0111\u1ea7u t\u1ea1o c\u00e1c t\u00e0i nguy\u00ean b\u1ea1n \u0111\u00e3 c\u1ea5u h\u00ecnh \u1edf c\u00e1c b\u01b0\u1edbc tr\u01b0\u1edbc. Qu\u00e1 tr\u00ecnh n\u00e0y s\u1ebd m\u1ea5t v\u00e0i ph\u00fat, sau \u0111\u00f3 b\u1ea1n s\u1ebd b\u1eaft \u0111\u1ea7u th\u1ea5y \u0111\u1ea7u ra c\u1ee7a&nbsp;<code>remote-exec<\/code>c\u00e1c l\u1ec7nh b\u1ea1n \u0111\u00e3 x\u00e1c \u0111\u1ecbnh trong t\u00e0i nguy\u00ean phi\u00ean b\u1ea3n Linode c\u1ee7a m\u00ecnh. Khi t\u1ea5t c\u1ea3 c\u00e1c h\u00e0nh \u0111\u1ed9ng ho\u00e0n t\u1ea5t, b\u1ea1n s\u1ebd th\u1ea5y \u0111\u1ea7u ra nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>Apply complete! Resources: 7 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nNodeBalancer IP Address = 104.237.148.131<\/code><\/pre>\n<p>\u0110i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 IP NodeBalancer c\u1ee7a b\u1ea1n v\u00e0 xem NodeBalancer c\u1ee7a b\u1ea1n \u0111ang ho\u1ea1t \u0111\u1ed9ng. B\u1ea1n \u0111\u00e3 t\u1ea1o th\u00e0nh c\u00f4ng NodeBalancer v\u00e0 c\u00e1c n\u00fat ph\u1ee5 tr\u1ee3 trong Terraform.<\/p>\n<h3 id=\"optional-remove-the-nodebalancer-resources\">(T\u00f9y ch\u1ecdn) X\u00f3a t\u00e0i nguy\u00ean NodeBalancer<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/#optional-remove-the-nodebalancer-resources\"><\/a><\/h3>\n<p>N\u1ebfu b\u1ea1n \u0111\u00e3 ho\u00e0n t\u1ea5t c\u00e1c t\u00e0i nguy\u00ean v\u1eeba t\u1ea1o, b\u1ea1n c\u00f3 th\u1ec3 x\u00f3a ch\u00fang b\u1eb1ng&nbsp;<code>destroy<\/code>l\u1ec7nh<\/p>\n<pre class=\"wp-block-code\"><code>terraform destroy\n<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y s\u1ebd nh\u1eafc b\u1ea1n x\u00e1c nh\u1eadn h\u00e0nh \u0111\u1ed9ng.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o v\u1ec1 nh\u00e0 cung c\u1ea5p Terraform Linode<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/r\/nodebalancer.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o linode_nodebalancer<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/r\/nodebalancer_config.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o linode_nodebalancer_config<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/r\/nodebalancer_node.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o linode_nodebalancer_node<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/providers\/linode\/r\/instance.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o t\u00e0i nguy\u00ean linode_instance<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/providers\/random\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o v\u1ec1 Nh\u00e0 cung c\u1ea5p ng\u1eabu nhi\u00ean Terraform<\/a><\/li>\n<li><a href=\"https:\/\/www.terraform.io\/docs\/configuration\/interpolation.html#supported-built-in-functions\" target=\"_blank\" rel=\"noreferrer noopener\">Tham chi\u1ebfu h\u00e0m t\u00edch h\u1ee3p Terraform<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/create-a-nodebalancer-with-terraform\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Terraform cho ph\u00e9p b\u1ea1n bi\u1ec3u di\u1ec5n C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng M\u00e3 (IaC). B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng n\u00f3 \u0111\u1ec3 qu\u1ea3n l\u00fd c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng, t\u0103ng t\u1ed1c tri\u1ec3n khai v\u00e0 chia s\u1ebb c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n trong m\u1ed9t nh\u00f3m. Trong h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng<\/p>\n","protected":false},"author":1,"featured_media":36164,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[126],"tags":[],"class_list":["post-35007","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\/35007","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=35007"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35007\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36164"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=35007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=35007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=35007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}