{"id":3519,"date":"2023-03-12T11:47:00","date_gmt":"2023-03-12T04:47:00","guid":{"rendered":"https:\/\/laoitdev.com\/?p=3519"},"modified":"2024-02-07T20:57:24","modified_gmt":"2024-02-07T13:57:24","slug":"gcp-cloud-sql-connect-to-cloud-sql-for-postgresql-from-cloud-run","status":"publish","type":"post","link":"https:\/\/laoitdev.com\/lao\/2023\/3519\/","title":{"rendered":"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run"},"content":{"rendered":"<p>\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;<a href=\"https:\/\/medium.com\/laoitdev\/gcp-cloud-run-%E0%BA%A1%E0%BA%B2%E0%BA%A5%E0%BA%AD%E0%BA%87-hello-choco-%E0%BA%94%E0%BB%89%E0%BA%A7%E0%BA%8D-cloud-run-%E0%BA%81%E0%BA%B1%E0%BA%99%E0%BB%80%E0%BA%96%E0%BA%B2%E0%BA%B0-2af8f956a806\"><em>Deploy to Google Cloud Run<\/em><\/a><em>&nbsp;<\/em>\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Database&nbsp;<a href=\"https:\/\/www.postgresql.org\/docs\/\" target=\"_blank\" rel=\"noreferrer noopener\">PostgreSQL<\/a>&nbsp;\u0e82\u0ead\u0e87&nbsp;<a href=\"https:\/\/cloud.google.com\/sql\" target=\"_blank\" rel=\"noreferrer noopener\">Google Cloud SQL<\/a>. (source code&nbsp;<a href=\"https:\/\/gitlab.com\/phuangpheth.litd\/halokitty\/-\/tree\/main\/cloudrun\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>)<\/p>\n\n\n\n<p><strong>\u0eaa\u0eb4\u0ec8\u0e87\u0e97\u0eb5\u0ec8\u0ec3\u0e8a\u0ec9:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/go.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Golang<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0ea5\u0eb1\u0e9a\u0eaa\u0ec9\u0eb2\u0e87 API<\/li><li><a href=\"https:\/\/www.postgresql.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>PostgreSQL<\/strong><\/a>&nbsp;hosted on Google Cloud SQL \u0ec3\u0e8a\u0ec9\u0ec0\u0e81\u0eb1\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99<\/li><li><a href=\"https:\/\/cloud.google.com\/run\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Google Cloud Run<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9 Deploy API<\/li><li><a href=\"https:\/\/cloud.google.com\/sql\/docs\/postgres\/sql-proxy\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Google Cloud SQL Proxy<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8 Cloud SQL<\/li><li><a href=\"https:\/\/cloud.google.com\/artifact-registry\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Google Cloud Artifact Registry<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9\u0ec0\u0e81\u0eb1\u0e9a Container Images<\/li><li><a href=\"https:\/\/docs.docker.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Docker<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9 build container image<\/li><li><a href=\"https:\/\/about.gitlab.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Gitlab<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9\u0ec0\u0e81\u0eb1\u0e9a Source code<\/li><li><a href=\"https:\/\/github.com\/golang-migrate\/migrate\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Migration CLI<\/strong><\/a>&nbsp;\u0ec3\u0e8a\u0ec9 migrate \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2 database<\/li><\/ul>\n\n\n\n<p><strong># What is Google Cloud SQL? (\u0ec1\u0e9a\u0e9a\u0eaa\u0eb1\u0ec9\u0e99\u0ec6)<\/strong><\/p>\n\n\n\n<p><em>F<\/em>ully managed relational database service<em> for MySQL, PostgreSQL, and SQL Server with rich extension collections, configuration flags, and develop<\/em>er ecosystems. (<a href=\"https:\/\/cloud.google.com\/sql\" target=\"_blank\" rel=\"noreferrer noopener\">reference<\/a>)<\/p>\n\n\n\n<p>Cloud SQL \u0ec0\u0e9b\u0eb1\u0e99\u0e9a\u0ecd\u0ea5\u0eb4\u0e81\u0eb2\u0e99\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec1\u0e9a\u0e9a Relational Database \u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb2\u0e99 Run Software \u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec1\u0e9a\u0e9a Fully managed. \u0e9b\u0eb1\u0e94\u0e88\u0eb8\u0e9a\u0eb1\u0e99\u0ea1\u0eb5\u0ea2\u0eb9\u0ec8 3 \u0e84\u0ec9\u0eb2\u0e8d\u0ec3\u0eab\u0ec9\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e84\u0eb7 MySQL, PostgreSQL \u0ec1\u0ea5\u0eb0 SQL Server. (\u0ec3\u0e99\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e99\u0eb5\u0ec9\u0e9c\u0eb9\u0ec9\u0e82\u0ebd\u0e99\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec3\u0e8a\u0ec9 PostgreSQL)<\/p>\n\n\n\n<p><em>Fully managed \u0ec1\u0ea1\u0ec8\u0e99\u0edd\u0eb2\u0e8d\u0ec0\u0e96\u0eb4\u0e87\u0e97\u0eb5\u0ea1\u0e87\u0eb2\u0e99 GCP (Google Cloud Platform) \u0e88\u0eb0\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0ec1\u0e8d\u0e87 \u0ec1\u0ea5\u0eb0 \u0e88\u0eb1\u0e94\u0e81\u0eb2\u0e99\u0ec3\u0e99\u0ec0\u0ea5\u0eb7\u0ec8\u0ead\u0e87\u0e82\u0ead\u0e87 Infrastructure \u0ec3\u0eab\u0ec9.<\/em><\/p>\n\n\n\n<p><strong># \u0eaa\u0ec9\u0eb2\u0e87 Cloud SQL Instance<\/strong><\/p>\n\n\n\n<p>\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0e99\u0eb5\u0ec9\u0e88\u0eb0\u0ec1\u0e99\u0eb0\u0e99\u0eb3\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99\u0ec3\u0e99\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87 Cloud SQL Instance \u0eab\u0ebc\u0eb7 \u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0e97\u0eb5\u0ec8\u0ec3\u0e8a\u0ec9 Run Database \u0e99\u0eb1\u0ec9\u0e99\u0ec0\u0ead\u0e87. \u0ec0\u0e8a\u0eb4\u0ec8\u0e87\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99\u0e94\u0eb1\u0ec8\u0e87\u0e81\u0ec8\u0eb2\u0ea7\u0e99\u0eb5\u0ec9\u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0ec0\u0eae\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99 Google Cloud Console.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>\u0ec0\u0e9b\u0eb5\u0e94&nbsp;<a href=\"https:\/\/console.cloud.google.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Google Cloud Console<\/a><\/li><li>\u0ea2\u0eb9\u0ec8\u0ec0\u0ea1\u0e99\u0eb9\u0ec0\u0e9a\u0eb7\u0ec9\u0ead\u0e87\u0e8a\u0ec9\u0eb2\u0e8d\u0ec3\u0eab\u0ec9\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0ea1\u0e99\u0eb9&nbsp;<a href=\"https:\/\/console.cloud.google.com\/sql\" target=\"_blank\" rel=\"noreferrer noopener\">SQL<\/a>&nbsp;\u0ec0\u0e8a\u0eb4\u0ec8\u0e87\u0ea1\u0eb1\u0e99\u0e88\u0eb0\u0ea2\u0eb9\u0ec8\u0edd\u0ea7\u0e94\u0e82\u0ead\u0e87 Database<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"252\" height=\"344\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_yO3Rhto6doxKvNqHPrr3Qg.webp\" alt=\"\" class=\"wp-image-3524\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_yO3Rhto6doxKvNqHPrr3Qg.webp 252w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_yO3Rhto6doxKvNqHPrr3Qg-220x300.webp 220w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_yO3Rhto6doxKvNqHPrr3Qg-9x12.webp 9w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/figure>\n\n\n\n<p>3. \u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0edc\u0ec9\u0eb2\u0e97\u0eb5\u0ec8\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ea5\u0eb2\u0e8d\u0e81\u0eb2\u0e99\u0e82\u0ead\u0e87 Instance \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb5\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a SQL \u0ec1\u0ea5\u0ec9\u0ea7\u0ec3\u0eab\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0e81\u0ebb\u0e94 \u201c<strong>Create Instance<\/strong>\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"705\" height=\"167\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_bQSoLvPzOVsh06QxsWdAqA-1.webp\" alt=\"\" class=\"wp-image-3525\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_bQSoLvPzOVsh06QxsWdAqA-1.webp 705w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_bQSoLvPzOVsh06QxsWdAqA-1-300x71.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_bQSoLvPzOVsh06QxsWdAqA-1-18x4.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_bQSoLvPzOVsh06QxsWdAqA-1-600x142.webp 600w\" sizes=\"auto, (max-width: 705px) 100vw, 705px\" \/><\/figure>\n\n\n\n<p>4. \u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e81\u0ebb\u0e94\u0e9b\u0eb8\u0ec8\u0ea1 \u201c<strong>Create Instance<\/strong>\u201d \u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e88\u0eb0\u0ec3\u0eab\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81 Database Engine \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0ec1\u0e99\u0ec8\u0e99\u0ead\u0e99\u0ec3\u0e99\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0ec3\u0e8a\u0ec9 PostgreSQL. \u0e81\u0ebb\u0e94\u0e9b\u0eb8\u0ec8\u0ea1 \u201c<strong>Choose<\/strong>&nbsp;<strong>PostgreSQL\u201d<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"828\" height=\"238\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hZzQ-x0rZlXnI23w43FNrw.webp\" alt=\"\" class=\"wp-image-3527\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hZzQ-x0rZlXnI23w43FNrw.webp 828w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hZzQ-x0rZlXnI23w43FNrw-300x86.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hZzQ-x0rZlXnI23w43FNrw-768x221.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hZzQ-x0rZlXnI23w43FNrw-18x5.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hZzQ-x0rZlXnI23w43FNrw-600x172.webp 600w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<p>5. \u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e8a\u0ec8\u0ead\u0e87\u0e82\u0ead\u0e87&nbsp;<strong>Instance ID&nbsp;<\/strong>\u0ec3\u0e99\u0edc\u0ec9\u0eb2 Instance info \u0ec3\u0eab\u0ec9\u0e9b\u0ec9\u0ead\u0e99\u0e8a\u0eb7\u0ec8\u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0ec3\u0eaa\u0ec8\u0ec4\u0e94\u0ec9\u0ec0\u0ea5\u0eb5\u0e8d<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"383\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_EAPapJDYWYvQ0L1bhT8QwQ.webp\" alt=\"\" class=\"wp-image-3528\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_EAPapJDYWYvQ0L1bhT8QwQ.webp 551w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_EAPapJDYWYvQ0L1bhT8QwQ-300x209.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_EAPapJDYWYvQ0L1bhT8QwQ-18x12.webp 18w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<p id=\"2ec4\">6. \u0ec3\u0e99\u0e8a\u0ec8\u0ead\u0e87&nbsp;<strong>Password<\/strong>&nbsp;\u0ec1\u0ea1\u0ec8\u0e99\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a R<strong>oot User<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a&nbsp;<strong>Password Policy<\/strong>&nbsp;\u0e96\u0ec9\u0eb2\u0eab\u0eb2\u0e81\u0ec0\u0e9b\u0eb5\u0e94\u0ec3\u0e8a\u0ec9 \u0ec0\u0ea7\u0ea5\u0eb2\u0e97\u0eb5\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87 User \u0eab\u0ebc\u0eb7 \u0e9b\u0ec8\u0ebd\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0ec3\u0eab\u0ec9 User \u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0ec3\u0e8a\u0ec9\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87\u0ec4\u0ea7\u0ec9\u0ec3\u0e99 Password Policy \u0e99\u0eb5\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a Verify \u0e97\u0eb8\u0e81\u0e84\u0eb1\u0ec9\u0e87\u0e97\u0eb5\u0ec8\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0e94\u0eb3\u0ec0\u0e99\u0eb5\u0e99\u0e81\u0eb2\u0e99.<\/li><\/ul>\n\n\n\n<p id=\"e585\">7. \u0ec3\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e82\u0ead\u0e87&nbsp;<strong>Database version<\/strong>&nbsp;\u0ec1\u0ea1\u0ec8\u0e99\u0ec0\u0ea5\u0eb7\u0ead\u0e81 version \u0e82\u0ead\u0e87 database \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9, \u0e9c\u0eb9\u0ec9\u0e82\u0ebd\u0e99\u0e88\u0eb0\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec3\u0e8a\u0ec9&nbsp;<strong>Postgrsql12<\/strong>.<\/p>\n\n\n\n<p id=\"a75c\">8.<strong>&nbsp;Choose a configuration to start with<\/strong><\/p>\n\n\n\n<p id=\"7a33\">\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e82\u0ead\u0e87\u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0ec0\u0e8a\u0eb4\u0ec8\u0e87\u0e88\u0eb0\u0ec1\u0e8d\u0e81\u0ead\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99&nbsp;<strong>Production<\/strong>,&nbsp;<strong>Development<\/strong>&nbsp;\u0ec1\u0ea5\u0eb0&nbsp;<strong>Sandbox<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0e81\u0eb2\u0e99\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec3\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e99\u0eb5\u0ec9\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e88\u0eb0&nbsp;<strong>pre-fill<\/strong>&nbsp;\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec3\u0eab\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a spec \u0e82\u0ead\u0e87\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0eaa\u0ec9\u0eb2\u0e87\u0e95\u0eb2\u0ea1\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e97\u0eb5\u0ec8\u0ec0\u0ea5\u0eb7\u0ead\u0e81 \u0ec1\u0ea5\u0eb0 \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e94\u0eb1\u0ec8\u0e87\u0e81\u0ec8\u0eb2\u0ea7\u0ec0\u0eae\u0ebb\u0eb2\u0e8d\u0eb1\u0e87\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec4\u0e9b Custom \u0ec4\u0e94\u0ec9\u0ec0\u0ead\u0e87\u0e95\u0eb7\u0ec8\u0ea1\u0ead\u0eb5\u0e81. \u0ec3\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e99\u0eb5\u0ec9\u0e9c\u0eb9\u0ec9\u0e82\u0ebd\u0e99\u0e88\u0eb0\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99 Sandbox \u0ec0\u0e9e\u0eb2\u0eb0\u0e82\u0eb0\u0edc\u0eb2\u0e94\u0e99\u0ec9\u0ead\u0e8d.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"542\" height=\"601\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hrGc8-SOL37SzL6rbX7ZDQ.webp\" alt=\"\" class=\"wp-image-3529\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hrGc8-SOL37SzL6rbX7ZDQ.webp 542w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hrGc8-SOL37SzL6rbX7ZDQ-271x300.webp 271w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_hrGc8-SOL37SzL6rbX7ZDQ-11x12.webp 11w\" sizes=\"auto, (max-width: 542px) 100vw, 542px\" \/><\/figure>\n\n\n\n<p id=\"b302\">9.&nbsp;<strong>Choose region and zonal availability<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Region<\/strong>&nbsp;\u0ec1\u0ea1\u0ec8\u0e99\u0ec0\u0e9b\u0eb1\u0e99\u0e9a\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8&nbsp;<strong>Instance<\/strong>&nbsp;\u0e88\u0eb0\u0e96\u0eb7\u0e81\u0eaa\u0ec9\u0eb2\u0e87\u0e82\u0eb7\u0ec9\u0e99<\/li><li>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a&nbsp;<strong>Zonal availability&nbsp;<\/strong>\u0ec1\u0ea1\u0ec8\u0e99\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb2\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ea7\u0ec8\u0eb2\u0e87\u0e88\u0eb0\u0eaa\u0ec9\u0eb2\u0e87&nbsp;<strong>Instance<\/strong>&nbsp;\u0e82\u0eb7\u0ec9\u0e99\u0ea1\u0eb2\u0eaa\u0eb0\u0ec0\u0e9e\u0eb2\u0eb0&nbsp;<strong>Zone (Single Zone)<\/strong>&nbsp;\u0eab\u0ea5\u0eb7 \u0ea7\u0ec8\u0eb2\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0ec1\u0e9a\u0e9a&nbsp;<strong>Multi Zones<\/strong>. \u0e88\u0eb0\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99&nbsp;<strong>Signal zone.<\/strong><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"312\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_PVsvkzkNIT1SdfdX3RzuxA.webp\" alt=\"\" class=\"wp-image-3531\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_PVsvkzkNIT1SdfdX3RzuxA.webp 552w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_PVsvkzkNIT1SdfdX3RzuxA-300x170.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_PVsvkzkNIT1SdfdX3RzuxA-18x10.webp 18w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0e96\u0ec9\u0eb2\u0eab\u0eb2\u0e81\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99 Multi zones \u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ea7\u0ec8\u0eb2\u0e88\u0eb0\u0ec3\u0e8a\u0ec9 zone \u0ec3\u0e94\u0ec0\u0e9b\u0eb1\u0e99\u0e95\u0ebb\u0ea7\u0eab\u0ea5\u0eb1\u0e81 \u0ec1\u0ea5\u0eb0 zone \u0ec3\u0e94\u0ec0\u0e9b\u0eb1\u0e99\u0e95\u0ebb\u0ea7\u0eaa\u0eb3\u0eae\u0ead\u0e87<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"198\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_ZK-gHwf4cD9iffD9foBCYA.webp\" alt=\"\" class=\"wp-image-3532\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_ZK-gHwf4cD9iffD9foBCYA.webp 508w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_ZK-gHwf4cD9iffD9foBCYA-300x117.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_ZK-gHwf4cD9iffD9foBCYA-18x7.webp 18w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><\/figure>\n\n\n\n<p id=\"03f1\">10.&nbsp;<strong>Customize your instance<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Mechine Type:<\/strong>&nbsp;\u0ec0\u0e9b\u0eb1\u0e99\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0ec0\u0e8a\u0eb4\u0ec8\u0e87\u0e88\u0eb0\u0ea1\u0eb5&nbsp;<strong>Shared core<\/strong>,&nbsp;<strong>Lightweight, Standard \u0ec1\u0ea5\u0eb0 High memory<\/strong>. \u0ec3\u0e99\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99\u0e9b\u0eb0\u0ec0\u0e9e\u0e94 Shared core \u0ec1\u0ea5\u0eb0 \u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e95\u0ebb\u0ea7\u0e97\u0eb5\u0ec8 spec \u0e95\u0ec8\u0eb3\u0eaa\u0eb8\u0e94 (\u0e9b\u0eb0\u0ea2\u0eb1\u0e94\u0e87\u0ebb\u0e9a 5555).<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"213\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/9.webp\" alt=\"\" class=\"wp-image-3533\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/9.webp 525w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/9-300x122.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/9-18x7.webp 18w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Storage<\/strong>: \u0ec0\u0e9b\u0eb1\u0e99\u0e9b\u0eb0\u0ec0\u0e9e\u0e94 \u0ec1\u0ea5\u0eb0 \u0e84\u0ea7\u0eb2\u0ea1\u0e88\u0eb8\u0e82\u0ead\u0e87 storage \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a instance \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0eaa\u0ec9\u0eb2\u0e87<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"481\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/10.webp\" alt=\"\" class=\"wp-image-3535\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/10.webp 552w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/10-300x261.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/10-14x12.webp 14w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<p><em>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0eaa\u0ec8\u0ea7\u0e99\u0ead\u0eb7\u0ec8\u0e99\u0ec6\u0ec0\u0e8a\u0eb1\u0e99 Connections, Data Protection, Maintenance, Flags, Query insights \u0ec1\u0ea5\u0eb0 Labels \u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0e9b\u0eb0\u0ec0\u0e9b\u0eb1\u0e99\u0e84\u0ec8\u0eb2 Default \u0ec4\u0e9b\u0e81\u0ec8\u0ead\u0e99.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Connections:<\/strong>&nbsp;\u0ec0\u0e9b\u0eb1\u0e99\u0e9a\u0ec8\u0ead\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0e8a\u0ec8\u0ead\u0e87\u0e97\u0eb2\u0e87\u0e97\u0eb5\u0ec8\u0e88\u0eb0 connect \u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0eab\u0eb2 instance \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0eaa\u0ec9\u0eb2\u0e87 \u0ec2\u0e94\u0e8d Default \u0e8a\u0ec8\u0ead\u0e87\u0e82\u0ead\u0e87 Public IP \u0e88\u0eb0\u0e96\u0eb7\u0e81\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec4\u0ea7\u0ec9\u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ec3\u0eab\u0ec9\u0eaa\u0eb2\u0ea1\u0eb2\u0e94 connect \u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0eab\u0eb2 instance \u0e88\u0eb2\u0e81\u0e9e\u0eb2\u0e8d\u0e99\u0ead\u0e81\u0ec4\u0e94\u0ec9 (\u0ec3\u0e99\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e99\u0eb5\u0ec9\u0e88\u0eb0\u0ec3\u0e8a\u0ec9&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/cloud.google.com\/sql\/docs\/mysql\/connect-instance-auth-proxy#gcloud\" target=\"_blank\">Google Cloud SQL Proxy<\/a>&nbsp;)<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"558\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/11.webp\" alt=\"\" class=\"wp-image-3536\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/11.webp 552w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/11-297x300.webp 297w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/11-12x12.webp 12w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Data Protection:&nbsp;<\/strong>\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0e81\u0eb2\u0e99\u0ec0\u0eae\u0eb1\u0e94 Back Up, Recovery \u0ec1\u0ea5\u0eb0 instance deletion protection.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"467\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/12.webp\" alt=\"\" class=\"wp-image-3537\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/12.webp 553w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/12-300x253.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/12-14x12.webp 14w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Maintenance<\/strong>: \u0ec0\u0e9b\u0eb1\u0e99\u0e9a\u0ec8\u0ead\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ec3\u0eab\u0ec9 instance \u0eaa\u0eb2\u0ea1\u0eb2\u0e94 restart \u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0ea1\u0eb5\u0e81\u0eb2\u0e99 update. \u0e81\u0eb2\u0e99 update \u0ec3\u0e99\u0e97\u0eb5\u0ec8\u0e99\u0eb5\u0ec9\u0edd\u0eb2\u0e8d\u0ec0\u0e96\u0eb4\u0e87\u0e81\u0eb2\u0e99\u0ead\u0eb1\u0e9a\u0e97\u0eb5\u0ec8\u0e97\u0eb2\u0e87\u0e97\u0eb5\u0ea1\u0e87\u0eb2\u0e99\u0e82\u0ead\u0e87 GCP \u0ec0\u0e9b\u0eb1\u0e99\u0e84\u0ebb\u0e99\u0e88\u0eb1\u0e94\u0e81\u0eb2\u0e99 \u0ec1\u0e95\u0ec8\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ea7\u0ec8\u0eb2\u0e88\u0eb0\u0ec3\u0eab\u0ec9 update \u0ec4\u0e94\u0ec9 \u0eab\u0ea5\u0eb7 \u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9 \u0e99\u0eb1\u0ec9\u0e99\u0ec1\u0ea1\u0ec8\u0e99\u0ec0\u0eae\u0ebb\u0eb2\u0ec0\u0e9b\u0eb1\u0e99\u0e84\u0ebb\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ec0\u0ead\u0e87<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"505\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/13.webp\" alt=\"\" class=\"wp-image-3538\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/13.webp 553w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/13-300x274.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/13-13x12.webp 13w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Flags<\/strong>: \u0ec0\u0e9b\u0eb1\u0e99\u0e9a\u0ec8\u0ead\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94 Script \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0ea2\u0eb2\u0e81\u0ec3\u0eab\u0ec9 instance \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2 Run \u0ec0\u0ea1\u0eb7\u0ec8\u0ead Start<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"156\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/14.webp\" alt=\"\" class=\"wp-image-3539\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/14.webp 518w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/14-300x90.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/14-18x5.webp 18w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Query insights<\/strong>: \u0e96\u0ec9\u0eb2 enable \u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0ec4\u0e94\u0ec9\u0ea7\u0ec8\u0eb2\u0ec3\u0e99 instance \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb5 queries \u0eab\u0ea5\u0eb2\u0e8d\u0e9b\u0eb2\u0e99\u0ec3\u0e94\u0ec1\u0ea5\u0ec9\u0ea7\u0e97\u0eb5\u0ec8\u0e96\u0eb7\u0e81 executed \u0ec1\u0ea5\u0eb0 \u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94\u0e82\u0ead\u0e87 query \u0e99\u0eb1\u0ec9\u0e99\u0ec4\u0e94\u0ec9<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"481\" height=\"155\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/15.webp\" alt=\"\" class=\"wp-image-3540\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/15.webp 481w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/15-300x97.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/15-18x6.webp 18w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Labels<\/strong>: \u0ec0\u0e9b\u0eb1\u0e99 Key-Value pair \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e8a\u0ec8\u0ea7\u0e8d\u0ec3\u0e99\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e81\u0eb2\u0e99\u0e81\u0eb1\u0e9a Resource \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0ec3\u0e8a\u0ec9 \u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec3\u0e8a\u0ec9\u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ec0\u0eae\u0eb1\u0e94 filter resource \u0ec4\u0e94\u0ec9\u0e88\u0eb2\u0e81\u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87 Labels \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0e95\u0eb1\u0ec9\u0e87\u0ec4\u0ea7\u0ec9<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"514\" height=\"145\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/16.webp\" alt=\"\" class=\"wp-image-3541\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/16.webp 514w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/16-300x85.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/16-18x5.webp 18w\" sizes=\"auto, (max-width: 514px) 100vw, 514px\" \/><\/figure>\n\n\n\n<p id=\"0896\">11. \u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0e84\u0ec8\u0eb2\u0e95\u0eb2\u0ea1\u0e97\u0eb5\u0ec8\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0ec1\u0ea5\u0ec9\u0ea7\u0e81\u0ebb\u0e94 \u201c<strong>Create Instance<\/strong>\u201d<\/p>\n\n\n\n<p id=\"1a75\">\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87\u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2\u0edc\u0ec9\u0ead\u0e8d\u0edc\u0eb6\u0ec8\u0e87\u0e9b\u0eb0\u0ea1\u0eb2\u0e99 5 \u0e99\u0eb2\u0e97\u0eb5 \u0eab\u0ea5\u0eb7 \u0eab\u0ea5\u0eb2\u0e8d\u0e81\u0ea7\u0ec8\u0eb2\u0e99\u0eb1\u0ec9\u0e99 \u2026\u2026\u2026\u2026\u2026\u2026 (\u0e96\u0ec9\u0eb2\u0ec1\u0e9a\u0e9a\u0ec3\u0e88\u0ec0\u0ea2\u0eb1\u0e99\u0ec0\u0e94\u0eb5\u0ec9)<\/p>\n\n\n\n<p id=\"651f\">\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0eaa\u0ec9\u0eb2\u0e87\u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0e81\u0ecd\u0e88\u0eb0\u0ec4\u0e94\u0ec9 instance ID \u0e95\u0eb2\u0ea1\u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ec4\u0ea7\u0ec9\u0ec3\u0e99\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"380\" height=\"192\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/17.webp\" alt=\"\" class=\"wp-image-3542\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/17.webp 380w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/17-300x152.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/17-18x9.webp 18w\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" \/><\/figure>\n\n\n\n<p>12 . \u0e81\u0ebb\u0e94\u0e97\u0eb5\u0ec8 \u201c<strong>instance ID<\/strong>\u201d \u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0e82\u0ebd\u0e99\u0ec1\u0ea1\u0ec8\u0e99\u0e8a\u0eb7\u0ec8 \u201c<strong>choco<\/strong>\u201d \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0eaa\u0ec9\u0eb2\u0e87 Database \u0ec1\u0ea5\u0eb0 User \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0ec0\u0eae\u0eb1\u0e94 connection. \u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0e81\u0ebb\u0e94\u0ec1\u0ea5\u0ec9\u0ea7\u0e88\u0eb0\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0e97\u0eb5\u0ec8\u0edc\u0ec9\u0eb2 Overview \u0e82\u0ead\u0e87 instance<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"336\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18-1024x336.webp\" alt=\"\" class=\"wp-image-3543\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18-1024x336.webp 1024w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18-300x98.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18-768x252.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18-18x6.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18-600x197.webp 600w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/18.webp 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>13. \u0e81\u0ebb\u0e94\u0e97\u0eb5\u0ec8\u0ec0\u0ea1\u0e99\u0eb9 \u201c<strong>Users<\/strong>\u201d \u0ec1\u0ea5\u0ec9\u0ea7\u0e81\u0ebb\u0e94 \u201c<strong>Add User Account<\/strong>\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"492\" height=\"481\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/19.webp\" alt=\"\" class=\"wp-image-3545\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/19.webp 492w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/19-300x293.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/19-12x12.webp 12w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/figure>\n\n\n\n<p id=\"2a06\">\u0ec3\u0e99\u0e81\u0eb2\u0e99&nbsp;<strong>Add user account<\/strong>&nbsp;\u0e88\u0eb0\u0ea1\u0eb5\u0ec3\u0eab\u0ec9\u0ec0\u0ea5\u0eb7\u0ead\u0e81&nbsp;<strong>2<\/strong>&nbsp;\u0ec1\u0e9a\u0e9a\u0e84\u0eb7: \u0ec1\u0e9a\u0e9a&nbsp;<strong>Built-in authentication<\/strong>&nbsp;\u0ec1\u0ea5\u0eb0 \u0ec1\u0e9a\u0e9a&nbsp;<strong>Cloud IAM<\/strong>&nbsp;(\u0ec3\u0e99\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0eaa\u0ec9\u0eb2\u0e87\u0ec1\u0e9a\u0e9a&nbsp;<strong>Built-in authentication<\/strong>).<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>User name<\/strong>: \u0ec0\u0e9b\u0eb1\u0e99\u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87 User \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ec0\u0ead\u0e87<\/li><li><strong>Password<\/strong>&nbsp;\u0ec0\u0e9b\u0eb1\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a User \u0e99\u0eb5\u0ec9<\/li><li>\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9b\u0ec9\u0ead\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0e81\u0ebb\u0e94 \u201c<strong>Add<\/strong>\u201d<\/li><\/ul>\n\n\n\n<p id=\"8e45\">14. \u0e81\u0ebb\u0e94\u0e97\u0eb5\u0ec8\u0ec0\u0ea1\u0e99\u0eb9 \u201c<strong>Database<\/strong>\u201d \u0ec1\u0ea5\u0ec9\u0ea7\u0e81\u0ebb\u0e94 \u201c<strong>Create Database<\/strong>\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"193\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/20.webp\" alt=\"\" class=\"wp-image-3546\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/20.webp 489w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/20-300x118.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/20-18x7.webp 18w\" sizes=\"auto, (max-width: 489px) 100vw, 489px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Database Name<\/strong>: \u0e81\u0eb3\u0e99\u0ebb\u0e94\u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87 Database \u0e97\u0eb5\u0ec8\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99 (\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0e82\u0ebd\u0e99\u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0e95\u0eb1\u0ec9\u0e87\u0ec0\u0e9b\u0eb1\u0e99 \u201c<strong>choco<\/strong>\u201d)<\/li><li>\u0e81\u0ebb\u0e94 \u201c<strong>Create<\/strong>\u201d \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0eaa\u0ec9\u0eb2\u0e87, \u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0eaa\u0ec9\u0eb2\u0e87\u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0e81\u0ecd\u0e88\u0eb0\u0ec4\u0e94\u0ec9 Database \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0eaa\u0ec9\u0eb2\u0e87\u0e82\u0eb7\u0ec9\u0e99\u0ea1\u0eb2\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ec3\u0e99\u0ea5\u0eb2\u0e8d\u0e81\u0eb2\u0e99\u0e82\u0ead\u0e87 Databases<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"704\" height=\"438\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/21.webp\" alt=\"\" class=\"wp-image-3547\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/21.webp 704w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/21-300x187.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/21-18x12.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/21-600x373.webp 600w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><\/figure>\n\n\n\n<p>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99\u0e82\u0ead\u0e87\u0e81\u0eb2\u0e99 set up database \u0ea2\u0eb9\u0ec8 Cloud SQL \u0e95\u0ead\u0e99\u0e99\u0eb5\u0ec9\u0ec1\u0ea1\u0ec8\u0e99\u0e9e\u0ec9\u0ead\u0ea1\u0ec3\u0eab\u0ec9\u0ec0\u0eae\u0ebb\u0eb2 connect \u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0ec3\u0e8a\u0ec9\u0ec1\u0ea5\u0ec9\u0ea7.<\/p>\n\n\n\n<p><strong># \u0ec3\u0e8a\u0ec9 Google Cloud SQL Proxy<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>\u0ec0\u0e9b\u0eb5\u0e94 terminal \u0e97\u0eb5\u0ec8\u0e96\u0eb0\u0e99\u0eb1\u0e94\u0e82\u0eb7\u0ec9\u0e99\u0ea1\u0eb2<\/li><\/ol>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0e96\u0ec9\u0eb2\u0eab\u0eb2\u0e81\u0e8d\u0eb1\u0e87\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9 install Google Cloud SQL Proxy \u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0e95\u0eb2\u0ea1&nbsp;<a href=\"https:\/\/cloud.google.com\/sql\/docs\/mysql\/connect-instance-auth-proxy#linux-64-bit\" rel=\"noreferrer noopener\" target=\"_blank\">docs<\/a>&nbsp;\u0ec4\u0e94\u0ec9<\/li><\/ul>\n\n\n\n<p id=\"2a72\">   2. Command \u0ec3\u0e8a\u0ec9\u0ec3\u0e99\u0e81\u0eb2\u0e99 connect \u0ec4\u0e9b\u0eab\u0eb2 Cloud SQL<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cloud_sql_proxy -instances={instance-connection}={TCP-server} -enable_iam_login<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>instance-connection:&nbsp;<\/strong>\u0ec1\u0ea1\u0ec8\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0ec0\u0ead\u0ebb\u0eb2\u0ea2\u0eb9\u0ec8\u0e97\u0eb5\u0ec8&nbsp;<strong>instance<\/strong>&nbsp;\u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0eaa\u0ec9\u0eb2\u0e87\u0ec4\u0e94\u0ec9. \u0ec4\u0e9b\u0e97\u0eb5\u0ec8\u0ec0\u0ea1\u0e99\u0eb9 \u201c<strong>Connections<\/strong>\u201d \u0ec1\u0ea5\u0ec9\u0ea7 copy \u0ec0\u0ead\u0ebb\u0eb2&nbsp;<strong>connection name<\/strong><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"299\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/22.webp\" alt=\"\" class=\"wp-image-3548\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/22.webp 837w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/22-300x107.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/22-768x274.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/22-18x6.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/22-600x214.webp 600w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/figure>\n\n\n\n<p><em>\u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0ec4\u0e94\u0ec9 connection name \u201cphuangpheth:asia-southeast1:choco\u201d<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>TCP-server<\/strong>: \u0ec0\u0e9b\u0eb5\u0e94 TCP connection \u0ea2\u0eb9\u0ec8\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87 Local e.g., \u201ctcp:0.0.0.0:port\u201d<\/li><li><strong>-enable_iam_login<\/strong>: enable \u0ec3\u0eab\u0ec9 database user authentication \u0e94\u0ec9\u0ea7\u0e8d Cloud SQL\u2019s IAM DB Authentication (Postgres only).<\/li><\/ul>\n\n\n\n<p><em>\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec0\u0e9e\u0eb5\u0ec8\u0ea1\u0e95\u0eb7\u0ec8\u0ea1\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0ec3\u0e8a\u0ec9&nbsp;<\/em><strong>cloud_sql_proxy<\/strong><em>&nbsp;\u0ec4\u0e94\u0ec9\u0ec2\u0e94\u0e8d\u0e81\u0eb2\u0e99\u0ec0\u0e9e\u0eb5\u0ec8\u0ea1 \u201c&nbsp;<\/em><strong>\u2014 help<\/strong><em>\u201d<\/em><\/p>\n\n\n\n<p>\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0e88\u0eb0\u0ec4\u0e94\u0ec9 Command \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cloud_sql_proxy -instances=phuangpheth:asia-southeast1:choco=tcp:127.0.0.1:5432 -enable_iam_login<\/code><\/pre>\n\n\n\n<p>3. \u0ea5\u0ead\u0e87\u0ec0\u0ead\u0ebb\u0eb2 Command \u0ea1\u0eb2 Run \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e97\u0ebb\u0e94\u0eaa\u0ead\u0e9a\u0ea7\u0ec8\u0eb2\u0ec0\u0eae\u0ebb\u0eb2\u0eaa\u0eb2\u0ea1\u0eb2\u0e94 connect \u0ec4\u0e9b\u0eab\u0eb2 Cloud SQL \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ec1\u0e97\u0ec9\u0e9a\u0ecd<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"155\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23-1024x155.webp\" alt=\"\" class=\"wp-image-3549\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23-1024x155.webp 1024w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23-300x46.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23-768x117.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23-18x3.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23-600x91.webp 600w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/23.webp 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p id=\"719c\">\u0ec0\u0ea2\u0ec9 connect \u0ec4\u0e94\u0ec9\u0ec1\u0ea5\u0ec9\u0ea7\u0ea7\u0ea7\u0ea7\u0ea7<\/p>\n\n\n\n<p><em>#Note: \u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9 Run command \u0e99\u0eb5\u0ec9\u0e9b\u0eb0\u0ec4\u0ea7\u0ec9\u0e96\u0ec9\u0eb2\u0ec0\u0eae\u0ebb\u0eb2\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0e88\u0eb0 connect \u0ec4\u0e9b Cloud SQL. \u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0ec3\u0e94\u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0e9b\u0eb4\u0e94 \u0ec0\u0eae\u0ebb\u0eb2\u0e88\u0eb0\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec3\u0e8a\u0ec9 Cloud SQL \u0ea2\u0eb9\u0ec8\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87 Local \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9<\/em><\/p>\n\n\n\n<p id=\"ac36\">\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81 Run Command \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0eaa\u0ec9\u0eb2\u0e87 connection \u0ec4\u0ea7\u0ec9\u0ec1\u0ea5\u0ec9\u0ea7 \u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ec3\u0e8a\u0ec9 User \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0eaa\u0ec9\u0eb2\u0e87\u0ec4\u0ea7\u0ec9\u0ec0\u0e9e\u0eb7\u0ec8\u0ead Login \u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0ec3\u0e8a\u0ec9\u0e87\u0eb2\u0e99. \u0e88\u0eb0\u0ec3\u0e8a\u0ec9&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.postgresql.org\/docs\/current\/app-psql.html\" target=\"_blank\">psql<\/a>&nbsp;\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a interact with Postgres<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>psql -U {username}-p 5432 -d {databaseName} -W<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>username<\/strong>: \u0ec1\u0ea1\u0ec8\u0e99 user name \u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0e88\u0eb2\u0e81\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99&nbsp;<strong>Add User Account<\/strong><\/li><li><strong>databaseName<\/strong>: \u0ec1\u0ea1\u0ec8\u0e99 database name \u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0e88\u0eb2\u0e81\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99&nbsp;<strong>Create Database<\/strong><\/li><\/ul>\n\n\n\n<p>\u0e88\u0eb0\u0ec4\u0e94\u0ec9 command \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>psql -U choco -p 5432 -d choco -W<\/code><\/pre>\n\n\n\n<p>\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0e81\u0ebb\u0e94 \u201center\u201d \u0ea1\u0eb1\u0e99\u0e88\u0eb0\u0ec3\u0eab\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0e9b\u0ec9\u0ead\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99 (\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0eaa\u0ec9\u0eb2\u0e87\u0ec3\u0e99\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99 Add User Account).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"186\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/24.webp\" alt=\"\" class=\"wp-image-3550\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/24.webp 661w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/24-300x84.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/24-18x5.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/24-600x169.webp 600w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/figure>\n\n\n\n<p>\u0ec0\u0ea2\u0ec9\u0ec6 login \u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec3\u0e8a\u0ec9 database \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0eaa\u0ec9\u0eb2\u0e87\u0ec4\u0ea7\u0ec9\u0ec4\u0e94\u0ec9\u0ec1\u0ea5\u0ec9\u0ea7\u0ea7\u0ea7\u0ea7<\/p>\n\n\n\n<p><strong>#\u0ec3\u0e8a\u0ec9 Migration CLI<\/strong><\/p>\n\n\n\n<p id=\"67f8\">Migration CLI \u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0ec0\u0eae\u0eb1\u0e94 migrate database \u0ec1\u0e9a\u0e9a Step Up \u0eab\u0ea5\u0eb7 Step Down \u0ec4\u0e94\u0ec9\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0e9b\u0ec8\u0ebd\u0e99 Schema (<a href=\"https:\/\/github.com\/golang-migrate\/migrate\" rel=\"noreferrer noopener\" target=\"_blank\">More info<\/a>)<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Command \u0ec0\u0e9a\u0eb7\u0ec8\u0ead\u0e87\u0e95\u0ebb\u0ec9\u0e99 \u0ec1\u0ea5\u0eb0 \u0ead\u0eb0\u0e97\u0eb4\u0e9a\u0eb2\u0e8d\u0e81\u0eb2\u0e99\u0ec3\u0e8a\u0ec9\u0e87\u0eb2\u0e99(\u0ec1\u0e9a\u0e9a\u0eaa\u0eb1\u0ec9\u0e99\u0ec6)<\/li><\/ol>\n\n\n\n<ul class=\"wp-block-list\"><li>Command \u0ec3\u0e99\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87 files<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>migrate create -dir {directory} -seq -ext sql init<\/code><\/pre>\n\n\n\n<p id=\"62ef\"><strong>directory&nbsp;<\/strong>\u0ec0\u0e9b\u0eb1\u0e99\u0e9a\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0eab\u0ec9 migrate \u0ec0\u0e81\u0eb1\u0e9a files \u0ec4\u0ea7\u0ec9<\/p>\n\n\n\n<p id=\"b090\">\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e97\u0eb5\u0ec8 Run command \u0e94\u0ec9\u0eb2\u0e99\u0ec0\u0e97\u0eb5\u0e87\u0e95\u0ebb\u0ea7 migrate \u0e88\u0eb0\u0eaa\u0ec9\u0eb2\u0e87 Folder \u0e95\u0eb2\u0ea1\u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ec4\u0ea7\u0ec9\u0e9e\u0ec9\u0ead\u0ea1\u0e97\u0eb1\u0e87 files \u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99 Up \u0ec1\u0ea5\u0eb0 Down<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Up \u0ec0\u0e9b\u0eb1\u0e99 file \u0e97\u0eb5\u0ec8\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a upgrade \u0ec3\u0eab\u0ec9 database \u0ec0\u0e9b\u0eb1\u0e99 version \u0e96\u0eb1\u0e94\u0ec4\u0e9b<\/li><li>Down \u0ec0\u0e9b\u0eb1\u0e99 file \u0e97\u0eb5\u0ec8\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a downgrade \u0ec3\u0eab\u0ec9 database \u0ec0\u0e9b\u0eb1\u0e99 version \u0e81\u0ec8\u0ead\u0e99\u0eab\u0e99\u0ec9\u0eb2\u0e97\u0eb5\u0ec8 file \u0e96\u0eb7\u0e81\u0eaa\u0ec9\u0eb2\u0e87\u0e82\u0eb7\u0ec9\u0e99<\/li><\/ul>\n\n\n\n<p id=\"cda7\"><strong>\u0e95\u0ebb\u0ea7\u0ea2\u0ec8\u0eb2\u0e87<\/strong>: \u0e9b\u0eb1\u0e94\u0e88\u0eb8\u0eb8\u0e9a\u0eb1\u0e99\u0ec3\u0e99 database \u0ea1\u0eb5 table \u0e97\u0eb5\u0ec8\u0e8a\u0eb7\u0ec8\u0ea7\u0ec8\u0eb2 users \u0ec0\u0e8a\u0eb4\u0ec8\u0e87 version \u0e9b\u0eb1\u0e94\u0e88\u0eb8\u0e9a\u0eb1\u0e99\u0ea1\u0eb5 columns \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE users(\n  id TEXT NOT NULL PRIMARY KEY,\n  display_name TEXT NOT NULL\n);<\/code><\/pre>\n\n\n\n<p id=\"b840\">\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0ec1\u0e81\u0ec9\u0ec4\u0e82\u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0ec0\u0e9e\u0eb5\u0ec8\u0ea1 columns email \u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec0\u0e9b\u0eb1\u0e99 text \u0ec0\u0e82\u0ebb\u0ec9\u0eb2 table users<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Run migrate command<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>migrate create -dir {directory} -seq -ext sql init<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a file up<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER TABLE users\nADD email TEXT NOT NULL;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a file down<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER TABLE users\nDROP COLUMN email;<\/code><\/pre>\n\n\n\n<p>\u0e88\u0eb0\u0ec0\u0eab\u0eb1\u0e99\u0ec4\u0e94\u0ec9\u0ea7\u0ec8\u0eb2&nbsp;<strong>file up<\/strong>&nbsp;\u0ec3\u0e8a\u0ec9\u0ec0\u0e9e\u0eb5\u0ec8\u0ea1<strong>&nbsp;column email<\/strong>&nbsp;\u0ec0\u0e82\u0ebb\u0ec9\u0eb2 table&nbsp;<strong>users<em>.&nbsp;<\/em><\/strong>\u0ec3\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e82\u0ead\u0e87<strong><em>&nbsp;<\/em>file down<\/strong>&nbsp;\u0ec3\u0e8a\u0ec9\u0ea5\u0eb6\u0e9a&nbsp;<strong>column email<\/strong>&nbsp;\u0ead\u0ead\u0e81\u0e88\u0eb2\u0e81&nbsp;<strong>table users<\/strong>&nbsp;\u0ec0\u0e8a\u0eb4\u0ec8\u0e87\u0ec0\u0e9b\u0eb1\u0e99&nbsp;<strong>version<\/strong>&nbsp;\u0e9b\u0eb1\u0e94\u0e88\u0eb8\u0e9a\u0eb1\u0e99\u0e81\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8<strong>&nbsp;file up<\/strong>&nbsp;\u0e88\u0eb0\u0e96\u0eb7\u0e81&nbsp;<strong>execute<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Command \u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a run up \u0eab\u0ea5\u0eb7 down version<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>migrate -path {directory} -database \"{databaseURL}\" -verbose up\/down<\/code><\/pre>\n\n\n\n<p id=\"ba60\"><strong>&#8211; databaseURL:&nbsp;<\/strong>url \u0e82\u0ead\u0e87 database \u0e97\u0eb5\u0ec8\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99 migrate \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 (\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0ec3\u0eaa\u0ec8\u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87 database \u0e9e\u0ec9\u0ead\u0ea1)<br>&#8211;&nbsp;<strong>directory<\/strong>: \u0e97\u0eb5\u0ec8\u0ea2\u0eb9\u0ec8\u0e82\u0ead\u0e87 files migration (\u0ec3\u0eaa\u0ec8\u0eae\u0ead\u0e94\u0ec1\u0e95\u0ec8 Folder)<br>&#8211;&nbsp;<strong>up\/down<\/strong>: \u0e96\u0ec9\u0eb2\u0ec3\u0e8a\u0ec9 up \u0e95\u0ebb\u0ea7 migrate \u0e88\u0eb0 execute file up, \u0e96\u0ec9\u0eb2\u0ec3\u0e8a\u0ec9 down \u0e95\u0ebb\u0ea7 migrate \u0e88\u0eb0 execute file down<\/p>\n\n\n\n<p id=\"e42a\">\u0e95\u0ebb\u0ea7\u0ea2\u0ec8\u0eb2\u0e87 command \u0ec3\u0e99\u0e81\u0eb2\u0e99 execute file up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>migrate -path migrations -database \"postgresql:\/\/root:101023@127.0.0.1:5455\/choco?sslmode=disable\" -verbose up<\/code><\/pre>\n\n\n\n<p>\u0ec3\u0e99\u0e95\u0ebb\u0ea7\u0ea2\u0ec8\u0eb2\u0e87\u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0ec0\u0eae\u0eb1\u0e94 migrate \u0e88\u0eb2\u0e81 folder \u0e97\u0eb5\u0ec8\u0e8a\u0eb7\u0ec8\u0ea7\u0ec8\u0eb2 migrations \u0ec0\u0e82\u0ebb\u0ec9\u0eb2 database.<br>\u0ec0\u0e8a\u0eb4\u0ec8\u0e87\u0ec1\u0e8d\u0e81\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e88\u0eb2\u0e81 command \u0ead\u0ead\u0e81\u0ea1\u0eb2\u0e81\u0ecd\u0e88\u0eb0\u0ec4\u0e94\u0ec9\u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9:<\/p>\n\n\n\n<p><em>&#8211;&nbsp;<\/em><strong>driver<\/strong><em>: postgresql<\/em><br><em>&#8211;&nbsp;<\/em><strong>host<\/strong><em>: 127.0.0.1 (localhost \u0e99\u0eb1\u0ec9\u0e99\u0ec0\u0ead\u0e87)<\/em><br><em>&#8211;&nbsp;<\/em><strong>port<\/strong><em>: 5455<\/em><br><em>&#8211;&nbsp;<\/em><strong>user<\/strong><em>: root<\/em><br><em>&#8211;&nbsp;<\/em><strong>password<\/strong><em>: 101023<\/em><br><em>&#8211;<\/em><strong>&nbsp;database<\/strong><em>: choco<\/em><\/p>\n\n\n\n<p>2. \u0eaa\u0ec9\u0eb2\u0e87 Table products \u0e94\u0ec9\u0ea7\u0e8d Migrate CLI<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Run command \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ec3\u0eab\u0ec9 migrate \u0eaa\u0ec9\u0eb2\u0e87 files \u0ec4\u0ea7\u0ec9\u0ec3\u0e99 folder migrations<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>migrate create -dir migrations -seq -ext sql init<\/code><\/pre>\n\n\n\n<p>\u0e88\u0eb0\u0ec4\u0e94\u0ec9 folder \u0e8a\u0eb7\u0ec8 migrations \u0ec1\u0ea5\u0eb0 files \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"294\" height=\"64\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/25.webp\" alt=\"\" class=\"wp-image-3551\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/25.webp 294w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/25-18x4.webp 18w\" sizes=\"auto, (max-width: 294px) 100vw, 294px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>file up \u0ea1\u0eb5 code \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE products(\n  id TEXT NOT NULL PRIMARY KEY,\n  display_name TEXT NOT NULL,\n  currency TEXT NOT NULL,\n  price DECIMAL(18,2) NOT NULL,\n  qty DECIMAL(10,2) NOT NULL,\n  created_at TIMESTAMPTZ DEFAULT NOW(),\n  updated_at TIMESTAMPTZ DEFAULT NOW()\n);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>file down \u0ea1\u0eb5 code \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>DROP TABLE IF EXISTS products;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Run migration up \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ec0\u0ea5\u0eb5\u0ec8\u0ea1 migrate<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>migrate -path directory -database \"driverName:\/\/user:password@host:port\/db_name?sslmode=disable\" -verbose up<\/code><\/pre>\n\n\n\n<p>migrate \u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0e88\u0eb0\u0ec4\u0e94\u0ec9<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"102\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26-1024x102.webp\" alt=\"\" class=\"wp-image-3552\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26-1024x102.webp 1024w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26-300x30.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26-768x77.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26-18x2.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26-600x60.webp 600w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/26.webp 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0e81\u0ea7\u0e94\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0ec3\u0e99 database \u0e97\u0eb5\u0ec8\u0ec0\u0eae\u0ebb\u0eb2 migrate \u0e81\u0ecd\u0e88\u0eb0\u0ec0\u0eab\u0eb1\u0e99<strong>&nbsp;table products<\/strong>&nbsp;\u0ec1\u0ea5\u0eb0&nbsp;<strong>schema_migrations(<\/strong>\u0ec0\u0e9b\u0eb1\u0e99 table \u0e97\u0eb5\u0ec8\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a\u0e95\u0eb4\u0e94\u0e95\u0eb2\u0ea1\u0ea7\u0ec8\u0eb2\u0e9b\u0eb1\u0e94\u0e88\u0eb8\u0e9a\u0eb1\u0e99 database \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9 migrate \u0eae\u0ead\u0e94 version \u0ec3\u0e94\u0ec1\u0ea5\u0ec9\u0ea7<strong>)<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"327\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/27.webp\" alt=\"\" class=\"wp-image-3553\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/27.webp 872w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/27-300x113.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/27-768x288.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/27-18x7.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/27-600x225.webp 600w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\" \/><\/figure>\n\n\n\n<p><strong>#Update Golang API \u0ec3\u0eab\u0ec9\u0e94\u0eb6\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e88\u0eb2\u0e81 table products \u0ea1\u0eb2\u0ec0\u0e9b\u0eb1\u0e99 Response<\/strong><\/p>\n\n\n\n<p>1 file main.go<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n \"context\"\n \"database\/sql\"\n \"fmt\"\n \"log\"\n \"net\/http\"\n \"os\"\n \"os\/signal\"\n \"time\"\n\n \"github.com\/labstack\/echo\/v4\"\n \"github.com\/labstack\/echo\/v4\/middleware\"\n \"github.com\/shopspring\/decimal\"\n\n _ \"github.com\/lib\/pq\"\n)\n\nfunc getEnv(key, fallback string) string {\n if value := os.Getenv(key); value != \"\" {\n  return value\n }\n return fallback\n}\n\nfunc failOnError(err error, msg string) {\n if err != nil {\n  fmt.Println(msg, err)\n  os.Exit(1)\n }\n}\n\nfunc main() {\n ctx := context.Background()\n dbHost := os.Getenv(\"DB_HOST\")\n dbPort := os.Getenv(\"DB_PORT\")\n dbUser := os.Getenv(\"DB_USER\")\n dbPassword := os.Getenv(\"DB_PASSWORD\")\n dbName := os.Getenv(\"DB_NAME\")\n dbURL := fmt.Sprintf(\"host=%s port=%s user=%s password=%s dbname=%s sslmode=disable\", dbHost, dbPort, dbUser, dbPassword, dbName)\n\n db, err := sql.Open(\"postgres\", dbURL)\n failOnError(err, \"failed to open database\")\n defer func() {\n  err := db.Close()\n  failOnError(err, \"failed to close database\")\n }()\n\n h := &amp;handler{db: db}\n e := echo.New()\n\n e.Use(middleware.Logger())\n e.Use(middleware.Recover())\n\n e.GET(\"\/\", func(c echo.Context) error {\n  return c.JSON(http.StatusOK, echo.Map{\n   \"message\": \"Hello, this is a message from Golang running on CloudRun.\",\n  })\n })\n e.GET(\"\/products\", h.ListProducts)\n\n errCh := make(chan error, 1)\n go func() {\n  errCh &lt;- e.Start(fmt.Sprintf(\":%s\", getEnv(\"PORT\", \"3001\")))\n }()\n\n ctx, cancel := signal.NotifyContext(ctx, os.Kill, os.Interrupt)\n defer cancel()\n\n select {\n case err := &lt;-errCh:\n  if err != nil &amp;&amp; err != http.ErrServerClosed {\n   log.Fatal(\"failed to start server\")\n  }\n  log.Println(\"server shutdown gracefully\")\n\n case &lt;-ctx.Done():\n  ctx, cancel := context.WithTimeout(ctx, time.Second*15)\n  defer cancel()\n\n  log.Println(\"shutting down server...\")\n  if err := e.Shutdown(ctx); err != nil {\n   log.Fatal(\"failed to shutdown server\")\n  }\n  log.Println(\"shutdown server gracefully\")\n }\n}\n\ntype handler struct {\n db *sql.DB\n}\n\ntype Product struct {\n ID        string          `json:\"id\"`\n Name      string          `json:\"displayName\"`\n Currency  string          `json:\"currency\"`\n Price     decimal.Decimal `json:\"price\"`\n Quantity  decimal.Decimal `json:\"quantity\"`\n CreatedAt time.Time       `json:\"createdAt\"`\n UpdatedAt time.Time       `json:\"updatedAt\"`\n}\n\nfunc (h *handler) ListProducts(c echo.Context) error {\n products, err := listProducts(c.Request().Context(), h.db)\n if err != nil {\n  return err\n }\n\n return c.JSON(http.StatusOK, echo.Map{\n  \"products\": products,\n })\n}\n\nfunc listProducts(ctx context.Context, db *sql.DB) (&#91;]Product, error) {\n query := `SELECT id, display_name, currency, price, qty, created_at, updated_at FROM products`\n\n rows, err := db.QueryContext(ctx, query)\n if err != nil {\n  return nil, fmt.Errorf(\"db.QueryContext(): %w\", err)\n }\n\n products := make(&#91;]Product, 0)\n for rows.Next() {\n  var p Product\n  if err := rows.Scan(&amp;p.ID, &amp;p.Name, &amp;p.Currency, &amp;p.Price, &amp;p.Quantity, &amp;p.CreatedAt, &amp;p.UpdatedAt); err != nil {\n   return nil, fmt.Errorf(\"rows.Scan(): %w\", err)\n  }\n  products = append(products, p)\n }\n return products, nil\n}<\/code><\/pre>\n\n\n\n<p>2. file Dockerfile<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Start from golang base image as building stage\nFROM golang:1.19-alpine as builder\n\n# Set necessary environment variables needed for our image\nENV GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64\n\n# Set the current working directory inside the container\nWORKDIR \/build\n\n# Copy and download dependency using go mod\nCOPY go.mod .\nCOPY go.sum .\nRUN apk add --no-cache ca-certificates git tzdata &amp;&amp; \\\n  go mod tidy\n\n# Copy the code into the container\nCOPY . .\n\n# Build the Go application\nRUN go build -ldflags \"-s -w -extldflags '-static'\" -installsuffix cgo -o \/bin\/service main.go\n\n# Use alpine image as runtime\nFROM alpine:3.16 as release\n\nCOPY --from=builder \/usr\/share\/zoneinfo \/usr\/share\/zoneinfo\nCOPY --from=builder \/etc\/ssl\/certs\/ca-certificates.crt \/etc\/ssl\/certs\/\nCOPY --from=builder \/bin\/service \/bin\/service\n\n# Command to run \nENTRYPOINT &#91;\"\/bin\/service\"]<\/code><\/pre>\n\n\n\n<p>3. Build Golang API \u0e94\u0ec9\u0ea7\u0e8d Docker \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e81\u0ebd\u0ea1 Deploy to Google Cloud Run (\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94\u0e82\u0ead\u0e87\u0e81\u0eb2\u0e99 build \u0ec4\u0e94\u0ec9\u0e97\u0eb5\u0ec8&nbsp;<a href=\"https:\/\/medium.com\/laoitdev\/gcp-cloud-run-%E0%BA%A1%E0%BA%B2%E0%BA%A5%E0%BA%AD%E0%BA%87-hello-choco-%E0%BA%94%E0%BB%89%E0%BA%A7%E0%BA%8D-cloud-run-%E0%BA%81%E0%BA%B1%E0%BA%99%E0%BB%80%E0%BA%96%E0%BA%B2%E0%BA%B0-2af8f956a806#3f60\">\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0eab\u0e99\u0ec9\u0eb2\u0e99\u0eb5\u0ec9<\/a>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ndocker build -t asia-southeast1-docker.pkg.dev\/phuangpheth\/hal0kiity\/api:v1.0.0 .<\/code><\/pre>\n\n\n\n<p>4. Push Docker Image to Google Cloud Artifact Registory<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker push asia-southeast1-docker.pkg.dev\/phuangpheth\/hal0kiity\/api:v1.0.0<\/code><\/pre>\n\n\n\n<p><strong>#Deploy Golang API to Google Cloud Run<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>\u0ec0\u0e9b\u0eb5\u0e94&nbsp;<a href=\"https:\/\/console.cloud.google.com\/run\" rel=\"noreferrer noopener\" target=\"_blank\"><strong>Google Cloud Console<\/strong><\/a>&nbsp;\u0ec1\u0ea5\u0ec9\u0ea7\u0ec4\u0e9b\u0e97\u0eb5\u0ec8\u0ec0\u0ea1\u0e99\u0eb9&nbsp;<strong>Cloud Run<\/strong><\/li><li>\u0e81\u0ebb\u0e94\u0e97\u0eb5\u0ec8\u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87&nbsp;<strong>service<\/strong>&nbsp;\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9&nbsp;<strong>deploy (<\/strong>\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ead\u0e99\u0ea5\u0eb0\u0ead\u0ebd\u0e94\u0ec4\u0e94\u0ec9\u0e88\u0eb2\u0e81&nbsp;<a href=\"https:\/\/medium.com\/laoitdev\/gcp-cloud-run-%E0%BA%A1%E0%BA%B2%E0%BA%A5%E0%BA%AD%E0%BA%87-hello-choco-%E0%BA%94%E0%BB%89%E0%BA%A7%E0%BA%8D-cloud-run-%E0%BA%81%E0%BA%B1%E0%BA%99%E0%BB%80%E0%BA%96%E0%BA%B2%E0%BA%B0-2af8f956a806#10e5\">\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0eab\u0e99\u0ec9\u0eb2\u0e99\u0eb5\u0ec9<\/a><strong>)<\/strong><\/li><li>\u0e81\u0ebb\u0e94\u0e9b\u0eb8\u0ec8\u0ea1 \u201c<strong>Edit &amp; Deploy Revision<\/strong>\u201d<\/li><li>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a Container Image \u0ec3\u0eab\u0ec9\u0e81\u0ebb\u0e94 \u201cSelect\u201d \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ec0\u0ea5\u0eb7\u0ead\u0e81 Container Image \u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec3\u0e8a\u0ec9 deploy<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"490\" height=\"246\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/28.webp\" alt=\"\" class=\"wp-image-3555\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/28.webp 490w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/28-300x151.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/28-18x9.webp 18w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<p id=\"bf61\">\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0ec0\u0ea5\u0eb7\u0ead\u0e81 Container Image \u0e97\u0eb5\u0ec8\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0ec1\u0ea5\u0ec9\u0ea7\u0ec3\u0eab\u0ec9\u0e81\u0ebb\u0e94 \u201cSelect\u201d<\/p>\n\n\n\n<p id=\"a057\">5. \u0ec0\u0e9e\u0eb5\u0ec8\u0ea1 Environment Variables \u0e95\u0eb2\u0ea1\u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0ec4\u0ea7\u0ec9\u0ec3\u0e99 API \u0e97\u0eb5\u0ec8\u0eaa\u0ec9\u0eb2\u0e87 \u0e81\u0ecd\u0e88\u0eb0\u0ec0\u0e9b\u0eb1\u0e99 environment \u0e82\u0ead\u0e87\u0e81\u0eb2\u0e99 connect \u0ec4\u0e9b\u0eab\u0eb2 database \u0e99\u0eb1\u0ec9\u0e99\u0ec0\u0ead\u0e87<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"464\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/29.webp\" alt=\"\" class=\"wp-image-3556\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/29.webp 620w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/29-300x225.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/29-16x12.webp 16w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/29-600x449.webp 600w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>DB_HOST<\/strong>&nbsp;\u0ec1\u0ea1\u0ec8\u0e99\u0ec0\u0ead\u0ebb\u0eb2\u0e88\u0eb2\u0e81&nbsp;<strong>Cloud SQL instance<\/strong>&nbsp;\u0ec2\u0e94\u0e8d\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0e97\u0eb5\u0ec8\u0ec0\u0ea1\u0e99\u0eb9 \u201c<strong>SQL<\/strong>\u201d \u0ec1\u0ea5\u0ec9\u0ea7\u0e81\u0ebb\u0e94\u0ec0\u0ea5\u0eb7\u0ead\u0e81<strong>&nbsp;instance name<\/strong>&nbsp;\u0e97\u0eb5\u0ec8\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99 \u0ec3\u0e99\u0eab\u0e99\u0ec9\u0eb2&nbsp;<strong>Overview<\/strong>&nbsp;\u0e88\u0eb0\u0ec0\u0eab\u0eb1\u0e99 \u0eaa\u0ec8\u0ea7\u0e99\u0e82\u0ead\u0e87 \u201c<strong>Connect to instance<\/strong>\u201d \u0ec3\u0eab\u0ec9\u0e81\u0ebb\u0e94 copy \u0ec0\u0ead\u0ebb\u0eb2 \u201c<strong>Connection name<\/strong>\u201d<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"814\" height=\"411\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/30.webp\" alt=\"\" class=\"wp-image-3557\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/30.webp 814w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/30-300x151.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/30-768x388.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/30-18x9.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/30-600x303.webp 600w\" sizes=\"auto, (max-width: 814px) 100vw, 814px\" \/><\/figure>\n\n\n\n<p>\u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0ec4\u0e94\u0ec9&nbsp;<strong>connection name<\/strong>&nbsp;\u0ea1\u0eb2\u0ec1\u0ea5\u0ec9\u0ea7\u0ec3\u0eab\u0ec9\u0ec0\u0ead\u0ebb\u0eb2\u0ea1\u0eb2\u0e95\u0ecd\u0ec8\u0e81\u0eb1\u0e9a \u201c<strong>\/cloudsql\/{connectionName}<\/strong>\u201d \u0e88\u0eb0\u0ec4\u0e94\u0ec9 DB_HOST \u0e94\u0eb1\u0ec8\u0e87\u0e99\u0eb5\u0ec9<\/p>\n\n\n\n<p><strong>\/cloudsql\/<em>phuangpheth:asia-southeast1:choco<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a<strong>&nbsp;DB_PASSWORD&nbsp;<\/strong>\u0e88\u0eb0\u0e95\u0eb1\u0ec9\u0e87\u0ec0\u0e9b\u0eb1\u0e99&nbsp;<strong>Secrets<\/strong>&nbsp;\u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e9b\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0ec3\u0eab\u0ec9\u0e97\u0eb8\u0e81\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0eab\u0eb1\u0e99 Password \u0e99\u0eb5\u0ec9\u0ec4\u0e94\u0ec9<\/li><\/ul>\n\n\n\n<p id=\"5cbd\">6. \u0ec0\u0ea5\u0eb7\u0ead\u0e81 Cloud SQL instance \u0ec3\u0eab\u0ec9\u0e81\u0eb1\u0e9a Cloud SQL connections \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ec3\u0eab\u0ec9 Cloud Run \u0eaa\u0eb2\u0ea1\u0eb2\u0e94 connect \u0ec4\u0e9b\u0eab\u0eb2\u0ec4\u0e94\u0ec9<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"148\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/31.webp\" alt=\"\" class=\"wp-image-3558\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/31.webp 548w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/31-300x81.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/31-18x5.webp 18w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/figure>\n\n\n\n<p id=\"4815\">7. \u0ec0\u0ea1\u0eb7\u0ec8\u0ead\u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0e81\u0ebb\u0e94 \u201cDeploy\u201d<\/p>\n\n\n\n<p id=\"1a3f\">\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81 Deploy \u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94\u0ec0\u0eae\u0ebb\u0eb2\u0e81\u0ecd\u0e88\u0eb0\u0ec4\u0e94\u0ec9 URL \u0eaa\u0eb3\u0eab\u0ea5\u0eb1\u0e9a API \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2\u0e81\u0eb1\u0e99\u0ec1\u0ea5\u0ec9\u0ea7.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"793\" height=\"153\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/32.webp\" alt=\"\" class=\"wp-image-3559\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/32.webp 793w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/32-300x58.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/32-768x148.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/32-18x3.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/32-600x116.webp 600w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/figure>\n\n\n\n<p>\u0ea5\u0ead\u0e87 Request \u0ec4\u0e9b\u0eab\u0eb2 API \u0e82\u0ead\u0e87\u0ec0\u0eae\u0ebb\u0eb2\u0ea5\u0ead\u0e87\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0ea7\u0ec8\u0eb2\u0ea1\u0eb1\u0e99\u0e88\u0eb0 Work \u0eab\u0ea5\u0eb7\u0e9a\u0ecd\u0ec8<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"828\" height=\"432\" src=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/33.webp\" alt=\"\" class=\"wp-image-3560\" srcset=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/33.webp 828w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/33-300x157.webp 300w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/33-768x401.webp 768w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/33-18x9.webp 18w, https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/33-600x313.webp 600w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<p id=\"746c\">\u0ec0\u0ea2\u0ec9\u0ec6 It is working well\u2026\u2026 \u0e88\u0ebb\u0e9a\u0ec1\u0ea5\u0ec9\u0ea7\u0ec4\u0e94\u0ecb 555555<\/p>\n\n\n\n<p id=\"d75c\">Support by:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-lao-it-dev wp-block-embed-lao-it-dev\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"Ss593AHxrq\"><a href=\"https:\/\/laoitdev.com\/lao\/\">\u0edc\u0ec9\u0eb2\u0eab\u0ebc\u0eb1\u0e81<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Home&#8221; &#8212; Lao IT Dev\" src=\"https:\/\/laoitdev.com\/embed\/#?secret=z1qkyI77zS#?secret=Ss593AHxrq\" data-secret=\"Ss593AHxrq\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><a data-type=\"URL\" data-id=\"https:\/\/medium.com\/tag\/google-cloud-run\" href=\"https:\/\/medium.com\/tag\/google-cloud-run\" target=\"_blank\" rel=\"noreferrer noopener\">Google Cloud Run<\/a> <a data-type=\"URL\" data-id=\"https:\/\/medium.com\/tag\/google-cloud-sql\" href=\"https:\/\/medium.com\/tag\/google-cloud-sql\" target=\"_blank\" rel=\"noreferrer noopener\">Google Cloud Sql<\/a> <a data-type=\"URL\" data-id=\"https:\/\/medium.com\/tag\/golang\" href=\"https:\/\/medium.com\/tag\/golang\" target=\"_blank\" rel=\"noreferrer noopener\">Golang<\/a> <a data-type=\"URL\" data-id=\"https:\/\/medium.com\/tag\/postgresql\" href=\"https:\/\/medium.com\/tag\/postgresql\" target=\"_blank\" rel=\"noreferrer noopener\">Postresql<\/a> <a data-type=\"URL\" data-id=\"https:\/\/medium.com\/tag\/backend-dev\" href=\"https:\/\/medium.com\/tag\/backend-dev\" target=\"_blank\" rel=\"noreferrer noopener\">Backend Dev <\/a><\/p>\n\n\n\n<p>\u0e82\u0ebd\u0e99\u0ec2\u0e94\u0e8d: <a href=\"https:\/\/medium.com\/@pao.phouminith?source=post_page-----844973b4d9ea--------------------------------\">Pao Phouminith<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Database&nbsp;PostgreSQL&nbsp;\u0e82\u0ead\u0e87&nbsp;Google Cloud SQL. (source code&nbsp;here) \u0eaa\u0eb4\u0ec8\u0e87\u0e97\u0eb5\u0ec8\u0ec3\u0e8a\u0ec9: Golang&nbsp;\u0ec3\u0e8a\u0ec9\u0eaa\u0eb3\u0ea5\u0eb1\u0e9a\u0eaa\u0ec9\u0eb2\u0e87 &#8230; <a class=\"cz_readmore\" href=\"https:\/\/laoitdev.com\/lao\/2023\/3519\/\"><i class=\"fa fa-angle-right\"><\/i><span>\u0ead\u0ec8\u0eb2\u0e99\u0ec0\u0e9e\u0eb5\u0ec8\u0ea1\u0ec0\u0e95\u0eb5\u0ea1<\/span><\/a><\/p>","protected":false},"author":6,"featured_media":3520,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-3519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run - Lao IT Dev<\/title>\n<meta name=\"description\" content=\"\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Lao IT Dev [GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/laoitdev.com\/lao\/2023\/3519\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run - Lao IT Dev\" \/>\n<meta property=\"og:description\" content=\"\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Lao IT Dev [GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency\" \/>\n<meta property=\"og:url\" content=\"https:\/\/laoitdev.com\/lao\/2023\/3519\/\" \/>\n<meta property=\"og:site_name\" content=\"Lao IT Dev\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-12T04:47:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-07T13:57:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"1048\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"tokky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u0e82\u0ebd\u0e99\u0ec2\u0e94\u0e8d\" \/>\n\t<meta name=\"twitter:data1\" content=\"tokky\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u0ec0\u0ea7\u0ea5\u0eb2\u0ead\u0ec8\u0eb2\u0e99\u0ec2\u0e94\u0e8d\u0e9b\u0eb0\u0ea1\u0eb2\u0e99\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 \u0e99\u0eb2\u0e97\u0eb5\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/\"},\"author\":{\"name\":\"tokky\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#\\\/schema\\\/person\\\/62c6bcfc84b462debc10fa03342f78bf\"},\"headline\":\"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run\",\"datePublished\":\"2023-03-12T04:47:00+00:00\",\"dateModified\":\"2024-02-07T13:57:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/\"},\"wordCount\":820,\"publisher\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/laoitdev.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp\",\"articleSection\":[\"News\"],\"inLanguage\":\"lo\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/\",\"url\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/\",\"name\":\"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run - Lao IT Dev\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/laoitdev.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp\",\"datePublished\":\"2023-03-12T04:47:00+00:00\",\"dateModified\":\"2024-02-07T13:57:24+00:00\",\"description\":\"\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Lao IT Dev [GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#breadcrumb\"},\"inLanguage\":\"lo\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lo\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#primaryimage\",\"url\":\"https:\\\/\\\/laoitdev.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp\",\"contentUrl\":\"https:\\\/\\\/laoitdev.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp\",\"width\":1400,\"height\":1048},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/2023\\\/3519\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/laoitdev.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#website\",\"url\":\"https:\\\/\\\/laoitdev.com\\\/\",\"name\":\"Lao IT Dev - Lao ICT Solutions Group\",\"description\":\"LAOITDEV\",\"publisher\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#organization\"},\"alternateName\":\"Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/laoitdev.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"lo\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#organization\",\"name\":\"Lao IT Dev Co., Ltd.\",\"url\":\"https:\\\/\\\/laoitdev.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lo\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/laoitdev.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/Default-feature-image.jpg\",\"contentUrl\":\"https:\\\/\\\/laoitdev.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/Default-feature-image.jpg\",\"width\":800,\"height\":600,\"caption\":\"Lao IT Dev Co., Ltd.\"},\"image\":{\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/laoitdev.com\\\/#\\\/schema\\\/person\\\/62c6bcfc84b462debc10fa03342f78bf\",\"name\":\"tokky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lo\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/27a02a239b23482f31f7926e9d4fcc9213d6ec730a49849035affbfd90580ab0?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/27a02a239b23482f31f7926e9d4fcc9213d6ec730a49849035affbfd90580ab0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/27a02a239b23482f31f7926e9d4fcc9213d6ec730a49849035affbfd90580ab0?s=96&d=mm&r=g\",\"caption\":\"tokky\"},\"url\":\"https:\\\/\\\/laoitdev.com\\\/lao\\\/author\\\/tokky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run - Lao IT Dev","description":"\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Lao IT Dev [GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/laoitdev.com\/lao\/2023\/3519\/","og_locale":"en_US","og_type":"article","og_title":"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run - Lao IT Dev","og_description":"\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Lao IT Dev [GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency","og_url":"https:\/\/laoitdev.com\/lao\/2023\/3519\/","og_site_name":"Lao IT Dev","article_published_time":"2023-03-12T04:47:00+00:00","article_modified_time":"2024-02-07T13:57:24+00:00","og_image":[{"width":1400,"height":1048,"url":"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp","type":"image\/webp"}],"author":"tokky","twitter_card":"summary_large_image","twitter_misc":{"\u0e82\u0ebd\u0e99\u0ec2\u0e94\u0e8d":"tokky","\u0ec0\u0ea7\u0ea5\u0eb2\u0ead\u0ec8\u0eb2\u0e99\u0ec2\u0e94\u0e8d\u0e9b\u0eb0\u0ea1\u0eb2\u0e99":"14 \u0e99\u0eb2\u0e97\u0eb5"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/laoitdev.com\/2023\/3519\/#article","isPartOf":{"@id":"https:\/\/laoitdev.com\/2023\/3519\/"},"author":{"name":"tokky","@id":"https:\/\/laoitdev.com\/#\/schema\/person\/62c6bcfc84b462debc10fa03342f78bf"},"headline":"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run","datePublished":"2023-03-12T04:47:00+00:00","dateModified":"2024-02-07T13:57:24+00:00","mainEntityOfPage":{"@id":"https:\/\/laoitdev.com\/2023\/3519\/"},"wordCount":820,"publisher":{"@id":"https:\/\/laoitdev.com\/#organization"},"image":{"@id":"https:\/\/laoitdev.com\/2023\/3519\/#primaryimage"},"thumbnailUrl":"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp","articleSection":["News"],"inLanguage":"lo"},{"@type":"WebPage","@id":"https:\/\/laoitdev.com\/2023\/3519\/","url":"https:\/\/laoitdev.com\/2023\/3519\/","name":"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run - Lao IT Dev","isPartOf":{"@id":"https:\/\/laoitdev.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/laoitdev.com\/2023\/3519\/#primaryimage"},"image":{"@id":"https:\/\/laoitdev.com\/2023\/3519\/#primaryimage"},"thumbnailUrl":"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp","datePublished":"2023-03-12T04:47:00+00:00","dateModified":"2024-02-07T13:57:24+00:00","description":"\u0eab\u0ea5\u0eb1\u0e87\u0e88\u0eb2\u0e81\u0e9a\u0ebb\u0e94\u0e84\u0ea7\u0eb2\u0ea1\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 Sample API \u0ec1\u0ea5\u0ec9\u0ea7&nbsp;Deploy to Google Cloud Run&nbsp;\u0e81\u0eb1\u0e99\u0ec4\u0e9b\u0ec1\u0ea5\u0ec9\u0ea7 \u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0eae\u0ebb\u0eb2\u0ea1\u0eb2\u0ea5\u0ead\u0e87\u0e82\u0ebd\u0e99 API \u0e97\u0eb5\u0ec8 fetch \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ea1\u0eb2\u0e88\u0eb2\u0e81 Lao IT Dev [GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency","breadcrumb":{"@id":"https:\/\/laoitdev.com\/2023\/3519\/#breadcrumb"},"inLanguage":"lo","potentialAction":[{"@type":"ReadAction","target":["https:\/\/laoitdev.com\/2023\/3519\/"]}]},{"@type":"ImageObject","inLanguage":"lo","@id":"https:\/\/laoitdev.com\/2023\/3519\/#primaryimage","url":"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp","contentUrl":"https:\/\/laoitdev.com\/wp-content\/uploads\/2023\/04\/1_nW99Q5O1XYp7HbPVcZ-oEg.webp","width":1400,"height":1048},{"@type":"BreadcrumbList","@id":"https:\/\/laoitdev.com\/2023\/3519\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/laoitdev.com\/"},{"@type":"ListItem","position":2,"name":"[GCP Cloud SQL] Connect to Cloud SQL for PostgreSQL from Cloud Run"}]},{"@type":"WebSite","@id":"https:\/\/laoitdev.com\/#website","url":"https:\/\/laoitdev.com\/","name":"Lao IT Dev - Lao ICT Solutions Group","description":"LAOITDEV","publisher":{"@id":"https:\/\/laoitdev.com\/#organization"},"alternateName":"Domestic and international ICT services, consultants, Mobile app, Web development, application development, Blockchain, AI and Cryptocurrency","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/laoitdev.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"lo"},{"@type":"Organization","@id":"https:\/\/laoitdev.com\/#organization","name":"Lao IT Dev Co., Ltd.","url":"https:\/\/laoitdev.com\/","logo":{"@type":"ImageObject","inLanguage":"lo","@id":"https:\/\/laoitdev.com\/#\/schema\/logo\/image\/","url":"https:\/\/laoitdev.com\/wp-content\/uploads\/2021\/08\/Default-feature-image.jpg","contentUrl":"https:\/\/laoitdev.com\/wp-content\/uploads\/2021\/08\/Default-feature-image.jpg","width":800,"height":600,"caption":"Lao IT Dev Co., Ltd."},"image":{"@id":"https:\/\/laoitdev.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/laoitdev.com\/#\/schema\/person\/62c6bcfc84b462debc10fa03342f78bf","name":"tokky","image":{"@type":"ImageObject","inLanguage":"lo","@id":"https:\/\/secure.gravatar.com\/avatar\/27a02a239b23482f31f7926e9d4fcc9213d6ec730a49849035affbfd90580ab0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/27a02a239b23482f31f7926e9d4fcc9213d6ec730a49849035affbfd90580ab0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/27a02a239b23482f31f7926e9d4fcc9213d6ec730a49849035affbfd90580ab0?s=96&d=mm&r=g","caption":"tokky"},"url":"https:\/\/laoitdev.com\/lao\/author\/tokky\/"}]}},"_links":{"self":[{"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/posts\/3519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/comments?post=3519"}],"version-history":[{"count":11,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/posts\/3519\/revisions"}],"predecessor-version":[{"id":3633,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/posts\/3519\/revisions\/3633"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/media\/3520"}],"wp:attachment":[{"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/media?parent=3519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/categories?post=3519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/laoitdev.com\/lao\/wp-json\/wp\/v2\/tags?post=3519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}