{"id":34964,"date":"2024-09-11T09:47:25","date_gmt":"2024-09-11T02:47:25","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/11\/getting-started-with-pulumi\/"},"modified":"2024-09-11T09:47:25","modified_gmt":"2024-09-11T02:47:25","slug":"getting-started-with-pulumi","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/11\/getting-started-with-pulumi\/","title":{"rendered":"B\u1eaft \u0111\u1ea7u v\u1edbi Pulumi"},"content":{"rendered":"<h2 id=\"what-is-pulumi\">Pulumi l\u00e0 g\u00ec?<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#what-is-pulumi\"><\/a><\/h2>\n<p><a href=\"https:\/\/www.pulumi.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Pulumi<\/em><\/a>&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u00e1t tri\u1ec3n cho ph\u00e9p b\u1ea1n vi\u1ebft c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh m\u00e1y t\u00ednh tri\u1ec3n khai t\u00e0i nguy\u00ean \u0111\u00e1m m\u00e2y &#8211; m\u1ed9t ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0<em>&nbsp;c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng m\u00e3 (IaC)<\/em>&nbsp;. Pulumi t\u00edch h\u1ee3p v\u1edbi nhi\u1ec1u n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y v\u00e0 c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh Pulumi c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng m\u1ed9t s\u1ed1 ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh ph\u1ed5 bi\u1ebfn.<\/p>\n<p>V\u1edbi t\u00edch h\u1ee3p Linode c\u1ee7a Pulumi, b\u1ea1n c\u00f3 th\u1ec3 qu\u1ea3n l\u00fd t\u00e0i nguy\u00ean Linode c\u1ee7a m\u00ecnh nh\u01b0 b\u1ea1n l\u00e0m v\u1edbi&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/api\/\">API<\/a>&nbsp;ho\u1eb7c&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/cli\/\">CLI<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i , nh\u01b0ng b\u1eb1ng ng\u00f4n ng\u1eef m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 \u0111\u00e3 quen thu\u1ed9c. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd tr\u00ecnh b\u00e0y c\u00e1c v\u00ed d\u1ee5 \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng JavaScript, nh\u01b0ng Pulumi c\u0169ng t\u01b0\u01a1ng th\u00edch v\u1edbi Go, Python v\u00e0 TypeScript.<\/p>\n<p>Pulumi c\u0169ng \u0111i k\u00e8m v\u1edbi giao di\u1ec7n CLI \u0111\u1ec3 ch\u1ea1y c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng \u0111\u00e1m m\u00e2y m\u00e0 b\u1ea1n vi\u1ebft. Sau khi vi\u1ebft xong ch\u01b0\u01a1ng tr\u00ecnh, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o t\u00e0i nguy\u00ean \u0111\u00e1m m\u00e2y c\u1ee7a m\u00ecnh b\u1eb1ng m\u1ed9t l\u1ec7nh duy nh\u1ea5t:<\/p>\n<pre class=\"wp-block-code\"><code>pulumi up\n<\/code><\/pre>\n<p>Trong h\u01b0\u1edbng d\u1eabn n\u00e0y b\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#before-you-begin\">C\u00e0i \u0111\u1eb7t v\u00e0 thi\u1ebft l\u1eadp Pulumi<\/a>&nbsp;tr\u00ean Debian 9<\/li>\n<li><a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#create-a-linode\">T\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n Linode duy nh\u1ea5t<\/a>&nbsp;b\u1eb1ng Pulumi v\u00e0 JavaScript<\/li>\n<li><a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#create-and-configure-a-nodebalancer\">T\u1ea1o NodeBalancer<\/a>&nbsp;v\u1edbi hai backend m\u00e1y ch\u1ee7 web NGINX b\u1eb1ng Pulumi v\u00e0 JavaScript<\/li>\n<\/ul>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#before-you-begin\"><\/a><\/h2>\n<p>1.N\u1ebfu b\u1ea1n ch\u01b0a t\u1ea1o,&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/accounts\/guides\/manage-api-tokens\/#create-an-api-token\">h\u00e3y t\u1ea1o m\u00e3 th\u00f4ng b\u00e1o API Linode<\/a>&nbsp;.<\/p>\n<p>2.<a href=\"https:\/\/app.pulumi.com\/signup\" target=\"_blank\" rel=\"noreferrer noopener\">T\u1ea1o t\u00e0i kho\u1ea3n Pulumi Cloud mi\u1ec5n ph\u00ed<\/a>&nbsp;.<\/p>\n<p>3.T\u1ea1o m\u1ed9t Linode Debian 9 m\u1edbi. L\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/create\/\">T\u1ea1o phi\u00ean b\u1ea3n t\u00ednh to\u00e1n<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i \u0111\u1ec3 tri\u1ec3n khai Linode, sau \u0111\u00f3 l\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/\">Thi\u1ebft l\u1eadp v\u00e0 b\u1ea3o m\u1eadt phi\u00ean b\u1ea3n t\u00ednh to\u00e1n<\/a>&nbsp;. \u0110\u1ea3m b\u1ea3o t\u1ea1o m\u1ed9t&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/#add-a-limited-user-account\">ng\u01b0\u1eddi d\u00f9ng Linux gi\u1edbi h\u1ea1n c\u00f3 quy\u1ec1n sudo<\/a>&nbsp;tr\u00ean m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n. T\u1ea5t c\u1ea3 c\u00e1c l\u1ec7nh trong h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u1ec1u ph\u1ea3i \u0111\u01b0\u1ee3c ch\u1ea1y t\u1eeb ng\u01b0\u1eddi d\u00f9ng sudo.<\/p>\n<p>4. <a href=\"https:\/\/www.pulumi.com\/docs\/install\/\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00e0i \u0111\u1eb7t Pulumi<\/a>&nbsp;tr\u00ean Linode c\u1ee7a b\u1ea1n b\u1eb1ng t\u1eadp l\u1ec7nh c\u00e0i \u0111\u1eb7t c\u1ee7a h\u1ecd:<\/p>\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/get.pulumi.com | sh\n<\/code><\/pre>\n<p>5.\u0110\u1ec3 b\u1eaft \u0111\u1ea7u s\u1eed d\u1ee5ng Pulumi CLI:<\/p>\n<ul>\n<li>Kh\u1edfi \u0111\u1ed9ng l\u1ea1i phi\u00ean shell c\u1ee7a b\u1ea1n ho\u1eb7c<\/li>\n<li>Th\u00eam&nbsp;<code>\/home\/username\/.pulumi\/bin<\/code>v\u00e0o&nbsp;<code>$PATH<\/code>bi\u1ebfn c\u1ee7a b\u1ea1n trong phi\u00ean hi\u1ec7n t\u1ea1i. Thay th\u1ebf&nbsp;<code>username<\/code>b\u1eb1ng t\u00ean ng\u01b0\u1eddi d\u00f9ng Linux gi\u1edbi h\u1ea1n c\u1ee7a b\u1ea1n:<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>PATH=$PATH:\/home\/username\/.pulumi\/bin<\/code><\/pre>\n<p>6.C\u00e0i \u0111\u1eb7t&nbsp;<a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node.js<\/a>&nbsp;v\u00e0&nbsp;<a href=\"https:\/\/www.npmjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">npm<\/a>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt-get install curl software-properties-common\ncurl -sL https:\/\/deb.nodesource.com\/setup_12.x | sudo bash -\nsudo apt-get install -y nodejs<\/code><\/pre>\n<h2 id=\"generate-a-pulumi-access-token\">T\u1ea1o m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp Pulumi<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#generate-a-pulumi-access-token\"><\/a><\/h2>\n<p>Sau khi c\u00f3 t\u00e0i kho\u1ea3n Pulumi, b\u1ea1n s\u1ebd c\u1ea7n t\u1ea1o&nbsp;<em>m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp<\/em>&nbsp;\u0111\u1ec3 s\u1eed d\u1ee5ng sau.<\/p>\n<ol>\n<li><a href=\"https:\/\/app.pulumi.com\/signin\" target=\"_blank\" rel=\"noreferrer noopener\">\u0110\u0103ng nh\u1eadp v\u00e0o t\u00e0i kho\u1ea3n Pulumi c\u1ee7a b\u1ea1n<\/a>&nbsp;. Sau khi \u0111\u0103ng nh\u1eadp, h\u00e3y nh\u1ea5p v\u00e0o h\u00ecnh \u1ea3nh \u0111\u1ea1i di\u1ec7n \u1edf g\u00f3c tr\u00ean b\u00ean ph\u1ea3i c\u1ee7a b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n Pulumi, sau \u0111\u00f3 nh\u1ea5p v\u00e0o t\u00f9y ch\u1ecdn&nbsp;<strong>C\u00e0i \u0111\u1eb7t<\/strong>&nbsp;trong menu th\u1ea3 xu\u1ed1ng xu\u1ea5t hi\u1ec7n:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/pulumi-settings_hu2f1996d6d2d450754e95c7172bebb69b_369552_1772x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Location of Pulumi Settings option\"><\/li>\n<li>Ch\u1ecdn m\u1ee5c&nbsp;<strong>M\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp<\/strong>&nbsp;trong thanh b\u00ean tr\u00e1i c\u1ee7a trang xu\u1ea5t hi\u1ec7n:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/pulumi-token_hu4751eb3a11ac4c1e2e21104b95c8f1d4_105797_1772x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Location of Pulumi Access Token page\"><\/li>\n<li>Nh\u1ea5p v\u00e0o n\u00fat&nbsp;<strong>New Access Token<\/strong>&nbsp;\u1edf ph\u00eda tr\u00ean b\u00ean ph\u1ea3i c\u1ee7a trang sau v\u00e0 l\u00e0m theo l\u1eddi nh\u1eafc \u0111\u1ec3 t\u1ea1o token m\u1edbi c\u1ee7a b\u1ea1n. \u0110\u1ea3m b\u1ea3o b\u1ea1n l\u01b0u token n\u00e0y \u1edf m\u1ed9t v\u1ecb tr\u00ed an to\u00e0n, t\u01b0\u01a1ng t\u1ef1 nh\u01b0 token API Linode c\u1ee7a b\u1ea1n.<\/li>\n<\/ol>\n<h2 id=\"create-a-linode\">T\u1ea1o m\u1ed9t Linode<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#create-a-linode\"><\/a><\/h2>\n<h3 id=\"set-up-your-pulumi-project\">Thi\u1ebft l\u1eadp D\u1ef1 \u00e1n Pulumi c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#set-up-your-pulumi-project\"><\/a><\/h3>\n<p>B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 c\u00f3 m\u1ecdi th\u1ee9 c\u1ea7n thi\u1ebft \u0111\u1ec3 b\u1eaft \u0111\u1ea7u s\u1eed d\u1ee5ng Pulumi, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o m\u1ed9t&nbsp;<em>d\u1ef1 \u00e1n<\/em>&nbsp;Pulumi m\u1edbi .<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: <a href=\"https:\/\/www.pulumi.com\/docs\/concepts\/projects\/\" target=\"_blank\" rel=\"noreferrer noopener\">D\u1ef1 \u00e1n<\/a>&nbsp;Pulumi&nbsp;l\u00e0 c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c ch\u1ee9a c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh Pulumi c\u1ee7a b\u1ea1n. C\u1ee5 th\u1ec3, d\u1ef1 \u00e1n l\u00e0 b\u1ea5t k\u1ef3 th\u01b0 m\u1ee5c n\u00e0o ch\u1ee9a&nbsp;<code>Pulumi.yaml<\/code>t\u1ec7p si\u00eau d\u1eef li\u1ec7u.<\/p>\n<p>1.Pulumi y\u00eau c\u1ea7u m\u1ed9t th\u01b0 m\u1ee5c tr\u1ed1ng cho m\u1ed7i d\u1ef1 \u00e1n m\u1edbi, v\u00ec v\u1eady tr\u01b0\u1edbc ti\u00ean b\u1ea1n c\u1ea7n t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c v\u00e0 bi\u1ebfn n\u00f3 th\u00e0nh th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>cd ~\/ &amp;&amp; mkdir pulumi &amp;&amp; cd pulumi\n<\/code><\/pre>\n<p>2.B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 \u1edf trong th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c m\u1edbi tr\u1ed1ng c\u1ee7a m\u00ecnh, h\u00e3y t\u1ea1o m\u1ed9t d\u1ef1 \u00e1n m\u1edbi:<\/p>\n<pre class=\"wp-block-code\"><code>pulumi new\n<\/code><\/pre>\n<p>3.T\u1eeb \u0111\u00e2y, b\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t s\u1ed1 l\u1eddi nh\u1eafc:<\/p>\n<ul>\n<li>Nh\u1eadp m\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp Pulumi c\u1ee7a b\u1ea1n n\u1ebfu \u0111\u01b0\u1ee3c nh\u1eafc. N\u1ebfu b\u1ea1n \u0111\u00e3 nh\u1eadp m\u00e3 th\u00f4ng b\u00e1o n\u00e0y t\u1ea1i b\u1ea5t k\u1ef3 th\u1eddi \u0111i\u1ec3m n\u00e0o sau khi c\u00e0i \u0111\u1eb7t Pulumi, b\u1ea1n s\u1ebd kh\u00f4ng \u0111\u01b0\u1ee3c nh\u1eafc l\u1ea1i v\u00e0 c\u00f3 th\u1ec3 b\u1ecf qua b\u01b0\u1edbc n\u00e0y.<\/li>\n<li>S\u1eed d\u1ee5ng c\u00e1c ph\u00edm m\u0169i t\u00ean \u0111\u1ec3 t\u00f4 s\u00e1ng&nbsp;<code>linode-javascript<\/code>t\u00f9y ch\u1ecdn.<\/li>\n<li>Nh\u1eadp t\u00ean d\u1ef1 \u00e1n theo \u00fd b\u1ea1n ho\u1eb7c \u0111\u1ec3 tr\u1ed1ng \u0111\u1ec3 s\u1eed d\u1ee5ng t\u00f9y ch\u1ecdn m\u1eb7c \u0111\u1ecbnh.<\/li>\n<li>Nh\u1eadp m\u00f4 t\u1ea3 d\u1ef1 \u00e1n ho\u1eb7c \u0111\u1ec3 tr\u1ed1ng \u0111\u1ec3 s\u1eed d\u1ee5ng t\u00f9y ch\u1ecdn m\u1eb7c \u0111\u1ecbnh.<\/li>\n<li>Nh\u1eadp t\u00ean&nbsp;<em>ng\u0103n x\u1ebfp<\/em>&nbsp;theo \u00fd b\u1ea1n ho\u1eb7c \u0111\u1ec3 tr\u1ed1ng \u0111\u1ec3 s\u1eed d\u1ee5ng t\u00f9y ch\u1ecdn m\u1eb7c \u0111\u1ecbnh.<\/li>\n<li>Nh\u1eadp m\u00e3 th\u00f4ng b\u00e1o API Linode c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<p>4.Sau khi c\u00e0i \u0111\u1eb7t th\u00e0nh c\u00f4ng, b\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t&nbsp;<code>Your new project is ready to go!<\/code>th\u00f4ng b\u00e1o.&nbsp;<code>pulumi new<\/code>L\u1ec7nh n\u00e0y s\u1ebd t\u1ea1o m\u1ed9t b\u1ed9 s\u01b0u t\u1eadp c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh m\u1eb7c \u0111\u1ecbnh trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n. C\u1ea5u h\u00ecnh m\u1eb7c \u0111\u1ecbnh s\u1ebd cung c\u1ea5p cho b\u1ea1n m\u1ecdi th\u1ee9 b\u1ea1n c\u1ea7n \u0111\u1ec3 b\u1eaft \u0111\u1ea7u. Nh\u1eadp l\u1ec7nh&nbsp;<code>ls<\/code>\u0111\u1ec3 \u0111\u1ea3m b\u1ea3o r\u1eb1ng c\u00e1c t\u1ec7p c\u00f3 m\u1eb7t:<\/p>\n<pre class=\"wp-block-code\"><code>ls<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>index.js      package.json\t Pulumi.pulumi.yaml\nnode_modules  package-lock.json  Pulumi.yaml<\/code><\/pre>\n<p>N\u1ed9i dung c\u1ee7a c\u00e1c t\u1ec7p n\u00e0y \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh theo ph\u1ea3n h\u1ed3i c\u1ee7a ch\u00fang t\u00f4i \u0111\u1ed1i v\u1edbi t\u1eebng l\u1eddi nh\u1eafc sau khi nh\u1eadp&nbsp;<code>pulumi new<\/code>. C\u1ee5 th\u1ec3:<\/p>\n<ul>\n<li><code>index.js<\/code>ch\u1ee9a JavaScript Pulumi s\u1ebd ch\u1ea1y<\/li>\n<li><code>package.json<\/code>\u0111\u1ecbnh ngh\u0129a c\u00e1c ph\u1ee5 thu\u1ed9c m\u00e0 ch\u00fang ta c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng v\u00e0 \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p m\u00e0 Pulumi s\u1ebd \u0111\u1ecdc m\u00e3 c\u1ee7a ch\u00fang ta.<\/li>\n<\/ul>\n<h3 id=\"inspect-the-default-configuration\">Ki\u1ec3m tra c\u1ea5u h\u00ecnh m\u1eb7c \u0111\u1ecbnh<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#inspect-the-default-configuration\"><\/a><\/h3>\n<p>Ch\u00fang ta h\u00e3y xem n\u1ed9i dung c\u1ee7a&nbsp;<code>index.js<\/code>t\u1eadp tin n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>\"use strict\";\nconst pulumi = require(\"@pulumi\/pulumi\");\nconst linode = require(\"@pulumi\/linode\");\n\n\/\/ Create a Linode resource (Linode Instance)\nconst instance = new linode.Instance(\"my-instance\", {\n    type: \"g6-nanode-1\",\n    region: \"us-east\",\n    image: \"linode\/ubuntu18.04\",\n});\n\n\/\/ Export the Instance label of the instance\nexports.instanceLabel = instance.label;<\/code><\/pre>\n<p>T\u1ec7p n\u00e0y y\u00eau c\u1ea7u hai m\u00f4-\u0111un JavaScript \u0111\u1ed9c \u0111\u00e1o c\u1ee7a Pulumi: SDK c\u1ee7a Pulumi v\u00e0 t\u00edch h\u1ee3p Linode c\u1ee7a Pulumi.&nbsp;<a href=\"https:\/\/www.pulumi.com\/registry\/packages\/linode\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o API c\u1ee7a Pulumi<\/a>&nbsp;\u0111\u00f3ng vai tr\u00f2 l\u00e0 t\u00e0i li\u1ec7u tham kh\u1ea3o cho JavaScript m\u00e0 b\u1ea1n s\u1ebd th\u1ea5y \u1edf \u0111\u00e2y. T\u00e0i li\u1ec7u n\u00e0y c\u0169ng bao g\u1ed3m m\u1ed9t th\u01b0 vi\u1ec7n g\u1ed3m m\u1ed9t s\u1ed1 t\u00f9y ch\u1ecdn b\u1ed5 sung cho ph\u00e9p b\u1ea1n t\u1ea1o c\u00e1c c\u1ea5u h\u00ecnh c\u1ee5 th\u1ec3 h\u01a1n cho tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng c\u1ee7a m\u00ecnh.<\/p>\n<p>Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, t\u1ec7p c\u1ee7a b\u1ea1n ch\u1ec9 t\u1ea1o m\u1ed9t phi\u00ean b\u1ea3n Linode (Nanode) 1GB duy nh\u1ea5t trong trung t\u00e2m d\u1eef li\u1ec7u Newark ch\u1ea1y Ubuntu 18.04.<\/p>\n<h3 id=\"create-and-destroy-resources\">T\u1ea1o v\u00e0 h\u1ee7y t\u00e0i nguy\u00ean<\/h3>\n<p>S\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/www.pulumi.com\/docs\/cli\/commands\/pulumi_preview\/\" target=\"_blank\" rel=\"noreferrer noopener\">l\u1ec7nh&nbsp;Pulumi<code>preview<\/code><\/a>&nbsp;\u0111\u1ec3 ki\u1ec3m tra m\u00e3 c\u1ee7a b\u1ea1n v\u00e0 \u0111\u1ea3m b\u1ea3o r\u1eb1ng n\u00f3 c\u00f3 th\u1ec3 t\u1ea1o t\u00e0i nguy\u00ean th\u00e0nh c\u00f4ng trong t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n.<\/p>\n<pre class=\"wp-block-code\"><code>pulumi preview\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra c\u1ee7a l\u1ec7nh s\u1ebd li\u1ec7t k\u00ea c\u00e1c ho\u1ea1t \u0111\u1ed9ng m\u00e0 Pulumi s\u1ebd th\u1ef1c hi\u1ec7n sau khi b\u1ea1n tri\u1ec3n khai ch\u01b0\u01a1ng tr\u00ecnh c\u1ee7a m\u00ecnh:<\/p>\n<pre class=\"wp-block-code\"><code>Previewing update (dev):\n\n    Type                      Name                   Plan\n+   pulumi:pulumi:Stack       my-pulumi-project-dev  create\n+   \u2514\u2500 linode:index:Instance  my-instance            create\n\nResources:\n    + 2 to create<\/code><\/pre>\n<p>S\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/www.pulumi.com\/docs\/cli\/commands\/pulumi_up\/\" target=\"_blank\" rel=\"noreferrer noopener\">l\u1ec7nh&nbsp;Pulumi<code>up<\/code><\/a>&nbsp;\u0111\u1ec3 tri\u1ec3n khai m\u00e3 c\u1ee7a b\u1ea1n v\u00e0o t\u00e0i kho\u1ea3n Linode:<\/p>\n<pre class=\"wp-block-code\"><code>pulumi up<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Thao t\u00e1c n\u00e0y s\u1ebd t\u1ea1o ra m\u1ed9t ngu\u1ed3n t\u00e0i nguy\u00ean c\u00f3 th\u1ec3 thanh to\u00e1n m\u1edbi tr\u00ean t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n.<\/p>\n<p>T\u1eeb \u0111\u00e2y, b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c nh\u1eafc x\u00e1c nh\u1eadn vi\u1ec7c t\u1ea1o t\u00e0i nguy\u00ean. S\u1eed d\u1ee5ng c\u00e1c ph\u00edm m\u0169i t\u00ean \u0111\u1ec3 ch\u1ecdn t\u00f9y&nbsp;<code>yes<\/code>ch\u1ecdn, nh\u1ea5n&nbsp;<code>enter<\/code>, v\u00e0 b\u1ea1n s\u1ebd th\u1ea5y t\u00e0i nguy\u00ean c\u1ee7a m\u00ecnh \u0111\u01b0\u1ee3c t\u1ea1o. Sau khi qu\u00e1 tr\u00ecnh ho\u00e0n t\u1ea5t, Nh\u00e3n Linode c\u1ee7a Linode m\u1edbi c\u1ee7a b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb. N\u1ebfu b\u1ea1n ki\u1ec3m tra t\u00e0i kho\u1ea3n c\u1ee7a m\u00ecnh theo c\u00e1ch th\u1ee7 c\u00f4ng th\u00f4ng qua Cloud&nbsp;<a href=\"https:\/\/cloud.linode.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Manager<\/a>&nbsp;, b\u1ea1n c\u00f3 th\u1ec3 x\u00e1c nh\u1eadn r\u1eb1ng Linode n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng.<\/p>\n<p>V\u00ec Linode n\u00e0y ch\u1ec9 \u0111\u01b0\u1ee3c t\u1ea1o ra \u0111\u1ec3 th\u1eed nghi\u1ec7m n\u00ean b\u1ea1n c\u00f3 th\u1ec3 x\u00f3a n\u00f3 m\u1ed9t c\u00e1ch an to\u00e0n b\u1eb1ng c\u00e1ch nh\u1eadp&nbsp;<a href=\"https:\/\/www.pulumi.com\/docs\/cli\/commands\/pulumi_destroy\/\" target=\"_blank\" rel=\"noreferrer noopener\">l\u1ec7nh&nbsp;c\u1ee7a Pulumi<code>destroy<\/code><\/a>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>pulumi destroy\n<\/code><\/pre>\n<p>L\u00e0m theo l\u1eddi nh\u1eafc v\u00e0 b\u1ea1n s\u1ebd c\u00f3 th\u1ec3 th\u1ea5y c\u00e1c t\u00e0i nguy\u00ean \u0111ang b\u1ecb x\u00f3a, t\u01b0\u01a1ng t\u1ef1 nh\u01b0 c\u00e1ch ch\u00fang ta th\u1ea5y ch\u00fang \u0111\u01b0\u1ee3c t\u1ea1o ra.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Nhi\u1ec1u l\u1ec7nh Pulumi s\u1ebd \u0111\u01b0\u1ee3c ghi v\u00e0o t\u00e0i kho\u1ea3n Pulumi c\u1ee7a b\u1ea1n. B\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y \u0111i\u1ec1u n\u00e0y trong tab&nbsp;<strong>Ho\u1ea1t \u0111\u1ed9ng<\/strong>&nbsp;c\u1ee7a ng\u0103n x\u1ebfp d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n trong&nbsp;<a href=\"https:\/\/app.pulumi.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pulumi Cloud<\/a>&nbsp;.<\/p>\n<h2 id=\"create-and-configure-a-nodebalancer\">T\u1ea1o v\u00e0 c\u1ea5u h\u00ecnh NodeBalancer<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#create-and-configure-a-nodebalancer\"><\/a><\/h2>\n<p>\u0110\u1ec3 ch\u1ee9ng minh t\u1ed1t h\u01a1n s\u1ee9c m\u1ea1nh c\u1ee7a m\u00e3 Pulumi, ch\u00fang ta s\u1ebd t\u1ea1o m\u1ed9t&nbsp;<code>index.js<\/code>t\u1ec7p m\u1edbi. T\u1ec7p n\u00e0y s\u1ebd \u0111\u1ecbnh ngh\u0129a m\u1ecdi th\u1ee9 ch\u00fang ta c\u1ea7n \u0111\u1ec3 t\u1ea1o m\u1ed9t NodeBalancer ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh s\u1eb5n v\u1edbi hai Linode ch\u1ea1y NGINX.<\/p>\n<p>1.Thay th\u1ebf n\u1ed9i dung c\u1ee7a&nbsp;<code>index.js<\/code>t\u1ec7p b\u1eb1ng n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>const pulumi = require(\"@pulumi\/pulumi\");\nconst linode = require(\"@pulumi\/linode\");\n\n\/\/ Create two new 1GB Linodes (Nanodes) using a StackScript to configure them internally.\n\/\/ The StackScript referenced will install and enable NGINX.\n\n\/\/ \"linode1\" (the first argument passed to the Linode instance constructor function) is the Pulumi-allocated Unique Resource Name (URN) for this resource\nconst linode1 = new linode.Instance(\"linode1\", {\n        \/\/ \"PulumiNode1\" is the Linode's label that appears in the Cloud Manager. Linode labels must be unique on your Linode account\n        label: \"PulumiNode1\",\n        region: \"us-east\",\n        image: \"linode\/debian9\",\n        privateIp: true,\n        stackscriptData: {\n                hostname: \"PulumiNode1\",\n            },\n        stackscriptId: 526246,\n        type:\"g6-nanode-1\",\n});\n\nconst linode2 = new linode.Instance(\"linode2\", {\n        label: \"PulumiNode2\",\n        region: \"us-east\",\n        image: \"linode\/debian9\",\n        privateIp: true,\n        stackscriptData: {\n            hostname: \"PulumiNode2\",\n            },\n        stackscriptId: 526246,\n        type:\"g6-nanode-1\",\n});\n\n\/\/ Create and configure your NodeBalancer\n\nconst nodeBalancer = new linode.NodeBalancer(\"nodeBalancer\", {\n        clientConnThrottle: 20,\n        label: \"PulumiNodeBalancer\",\n        region: \"us-east\",\n});\n\nconst nodeBalancerConfig = new linode.NodeBalancerConfig(\"nodeBalancerConfig\", {\n        algorithm: \"source\",\n        check: \"http\",\n        checkAttempts: 3,\n        checkTimeout: 30,\n        checkInterval: 40,\n        checkPath: \"\/\",\n        nodebalancerId: nodeBalancer.id,\n        port: 8088,\n        protocol: \"http\",\n        stickiness: \"http_cookie\",\n});\n\n\/\/ Assign your Linodes to the NodeBalancer\n\nconst balancerNode1 = new linode.NodeBalancerNode(\"balancerNode1\", {\n        address: pulumi.concat(linode1.privateIpAddress, \":80\"),\n        configId: nodeBalancerConfig.id,\n        label: \"PulumiBalancerNode1\",\n        nodebalancerId: nodeBalancer.id,\n        weight: 50,\n});\n\nconst balancerNode2 = new linode.NodeBalancerNode(\"balancerNode2\", {\n        address: pulumi.concat(linode2.privateIpAddress, \":80\"),\n        configId: nodeBalancerConfig.id,\n        label: \"PulumiBalancerNode2\",\n        nodebalancerId: nodeBalancer.id,\n        weight: 50,\n});\n\n\/\/Output your NodeBalancer's Public IPV4 address and the port we configured to access it\nexports.nodeBalancerIP = nodeBalancer.ipv4;\nexports.nodeBalancerPort = nodeBalancerConfig.port;<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Trong&nbsp;<code>index.js<\/code>t\u1ec7p c\u1ee7a ch\u00fang t\u00f4i, ch\u00fang t\u00f4i \u0111\u00e3 t\u1ea1o v\u00e0 c\u1ea5u h\u00ecnh hai Linode b\u1eb1ng&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/stackscripts\/\">StackScript<\/a>&nbsp;hi\u1ec7n c\u00f3 c\u00e0i \u0111\u1eb7t NGINX. T\u00edch h\u1ee3p Linode c\u1ee7a Pulumi cho ph\u00e9p t\u1ea1o&nbsp;<a href=\"https:\/\/www.pulumi.com\/registry\/packages\/linode\/api-docs\/stackscript\/\" target=\"_blank\" rel=\"noreferrer noopener\">StackScript ho\u00e0n to\u00e0n m\u1edbi<\/a>&nbsp;tr\u1ef1c ti\u1ebfp trong m\u00e3, c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c tri\u1ec3n khai c\u1ee7a m\u00ecnh h\u01a1n n\u1eefa.N\u1ebfu b\u1ea1n mu\u1ed1n bi\u1ebft StackScript ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o, b\u1ea1n c\u00f3 th\u1ec3 xem&nbsp;<a href=\"https:\/\/www.linode.com\/stackscripts\/view\/526246\" target=\"_blank\" rel=\"noreferrer noopener\">t\u1ea1i \u0111\u00e2y<\/a>&nbsp;.<\/p>\n<p>2.B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 chu\u1ea9n b\u1ecb th\u00e0nh c\u00f4ng m\u00e3 JavaScript, h\u00e3y c\u00f9ng xem c\u1ea5u h\u00ecnh c\u1ee7a ch\u00fang ta:<\/p>\n<pre class=\"wp-block-code\"><code>pulumi up\n<\/code><\/pre>\n<p>Nh\u01b0 tr\u01b0\u1edbc \u0111\u00e2y, h\u00e3y ch\u1ecdn&nbsp;<code>yes<\/code>khi \u0111\u01b0\u1ee3c nh\u1eafc v\u00e0 \u0111\u1ee3i trong v\u00e0i ph\u00fat \u0111\u1ec3 t\u00e0i nguy\u00ean c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c t\u1ea1o, c\u1ea5u h\u00ecnh v\u00e0 \u0111\u01b0a tr\u1ef1c tuy\u1ebfn.<\/p>\n<p>3.Khi qu\u00e1 tr\u00ecnh ho\u00e0n t\u1ea5t, b\u1ea1n s\u1ebd th\u1ea5y \u0111\u1ecba ch\u1ec9 IP c\u1ee7a NodeBalancer v\u00e0 c\u1ed5ng b\u1ea1n \u0111\u00e3 c\u1ea5u h\u00ecnh tr\u01b0\u1edbc \u0111\u00f3 \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ee7a \u0111\u1ea7u ra:<\/p>\n<pre class=\"wp-block-code\"><code>Outputs:\n+ nodeBalancerIP  : \"192.0.2.3\"\n+ nodeBalancerPort: 8088<\/code><\/pre>\n<p>Nh\u1eadp \u0111\u1ecba ch\u1ec9 IP v\u00e0 c\u1ed5ng n\u00e0y v\u00e0o tr\u00ecnh duy\u1ec7t web c\u1ee7a b\u1ea1n v\u00e0 b\u1ea1n s\u1ebd th\u1ea5y trang theo phong c\u00e1ch&nbsp;<em>Hello World<\/em>&nbsp;m\u00e0 StackScript \u0111\u00e3 c\u1ea5u h\u00ecnh:<\/p>\n<pre class=\"wp-block-code\"><code>curl http:\/\/192.0.2.3:8088\/<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>Hello from PulumiNode1\n<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu b\u1ea1n kh\u00f4ng th\u1ea5y trang n\u00e0y ngay l\u1eadp t\u1ee9c, b\u1ea1n n\u00ean \u0111\u1ee3i th\u00eam v\u00e0i ph\u00fat n\u1eefa. NodeBalancers \u0111\u00f4i khi c\u00f3 th\u1ec3 c\u1ea7n th\u00eam m\u1ed9t ch\u00fat th\u1eddi gian \u0111\u1ec3 \u00e1p d\u1ee5ng \u0111\u1ea7y \u0111\u1ee7 c\u1ea5u h\u00ecnh m\u1edbi.<\/p>\n<p>4.Sau khi ho\u00e0n t\u1ea5t NodeBalancer, b\u1ea1n c\u00f3 th\u1ec3 x\u00f3a m\u1ecdi th\u1ee9 b\u1ea1n \u0111\u00e3 th\u00eam b\u1eb1ng c\u00e1ch nh\u1eadp&nbsp;<code>pulumi destroy<\/code>nh\u01b0 tr\u01b0\u1edbc.<\/p>\n<h2 id=\"next-steps\">C\u00e1c b\u01b0\u1edbc ti\u1ebfp theo<a href=\"https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/#next-steps\"><\/a><\/h2>\n<p>Pulumi l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd v\u1edbi s\u1ed1 l\u01b0\u1ee3ng l\u1edbn c\u00e1c c\u1ea5u h\u00ecnh c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng. T\u1eeb \u0111\u00e2y b\u1ea1n c\u00f3 th\u1ec3:<\/p>\n<ul>\n<li>H\u00e3y xem&nbsp;<a href=\"https:\/\/github.com\/pulumi\/examples\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c v\u00ed d\u1ee5<\/a>&nbsp;c\u1ee7a Pulumi \u0111\u1ec3 bi\u1ebft th\u00eam \u00fd t\u01b0\u1edfng v\u1ec1 nh\u1eefng vi\u1ec7c b\u1ea1n c\u00f3 th\u1ec3 l\u00e0m v\u1edbi Pulumi.<\/li>\n<li>H\u00e3y th\u1eed s\u1eed d\u1ee5ng Pulumi v\u1edbi c\u00e1c ng\u00f4n ng\u1eef kh\u00e1c nh\u01b0&nbsp;<a href=\"https:\/\/www.pulumi.com\/docs\/languages-sdks\/python\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a>&nbsp;ho\u1eb7c&nbsp;<a href=\"https:\/\/www.pulumi.com\/docs\/languages-sdks\/javascript\/\" target=\"_blank\" rel=\"noreferrer noopener\">TypeScript<\/a><\/li>\n<li>Nh\u1eadp c\u00e1c c\u00f4ng c\u1ee5 Node.js nh\u01b0&nbsp;<a href=\"https:\/\/expressjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Express<\/a>&nbsp;\u0111\u1ec3 c\u00f3 th\u00eam t\u00ednh linh ho\u1ea1t cho m\u00e3 c\u1ee7a b\u1ea1n.<\/li>\n<li>S\u1eed d\u1ee5ng Pulumi cho&nbsp;<a href=\"https:\/\/www.pulumi.com\/serverless\/\" target=\"_blank\" rel=\"noreferrer noopener\">m\u00e1y t\u00ednh kh\u00f4ng c\u00f3 m\u00e1y ch\u1ee7<\/a><\/li>\n<\/ul>\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.pulumi.com\/docs\/\" target=\"_blank\" rel=\"noreferrer noopener\">Th\u01b0 vi\u1ec7n t\u00e0i li\u1ec7u<\/a><\/li>\n<li><a href=\"https:\/\/www.pulumi.com\/docs\/languages-sdks\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u tham kh\u1ea3o API nh\u00f3m<\/a><\/li>\n<li><a href=\"https:\/\/www.pulumi.com\/why-pulumi\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u1ea1i sao Pulumi<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/deploy-in-code-with-pulumi\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pulumi l\u00e0 g\u00ec? Pulumi&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u00e1t tri\u1ec3n cho ph\u00e9p b\u1ea1n vi\u1ebft c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh m\u00e1y t\u00ednh tri\u1ec3n khai t\u00e0i nguy\u00ean \u0111\u00e1m m\u00e2y &#8211; m\u1ed9t ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng d\u01b0\u1edbi d\u1ea1ng m\u00e3 (IaC)&nbsp;. Pulumi t\u00edch h\u1ee3p v\u1edbi nhi\u1ec1u n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y v\u00e0 c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh Pulumi c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c<\/p>\n","protected":false},"author":1,"featured_media":35985,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[122],"tags":[],"class_list":["post-34964","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pulumi"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34964","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=34964"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34964\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35985"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}