{"id":2345,"date":"2025-03-24T08:47:38","date_gmt":"2025-03-23T23:47:38","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2345"},"modified":"2025-03-24T08:48:00","modified_gmt":"2025-03-23T23:48:00","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91terraform%e3%81%a7docker%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e3%82%92%e7%ae%a1%e7%90%86%e3%81%99%e3%82%8b5%e3%81%a4%e3%81%ae%e5%ae%9f%e8%b7%b5%e6%89%8b","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2345","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Terraform\u3067Docker\u30b3\u30f3\u30c6\u30ca\u3092\u7ba1\u7406\u3059\u308b5\u3064\u306e\u5b9f\u8df5\u624b\u6cd5 2024\u5e74\u6700\u65b0\u7248"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Terraform\u3067Docker\u30b3\u30f3\u30c6\u30ca\u3092\u7ba1\u7406\u3059\u308b\u30e1\u30ea\u30c3\u30c8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u30a4\u30f3\u30d5\u30e9\u306e\u30b3\u30fc\u30c9\u5316\u306b\u3088\u308b\u4e00\u8cab\u6027\u306e\u78ba\u4fdd<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u30b3\u30f3\u30c6\u30ca\u74b0\u5883\u306e\u8fc5\u901f\u306a\u30c7\u30d7\u30ed\u30a4\u3068\u518d\u73fe\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Terraform\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30ca\u7ba1\u7406\u306e\u57fa\u672c\u8a2d\u5b9a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u5fc5\u8981\u306a\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8a2d\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">Docker Provider\u306e\u521d\u671f\u5316\u3068\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">\u5b9f\u8df5\u7684\u306aTerraform\u30b3\u30fc\u30c9\u306e\u66f8\u304d\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">Docker\u30a4\u30e1\u30fc\u30b8\u306e\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-8\">\u30b3\u30f3\u30c6\u30ca\u306e\u8a2d\u5b9a\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u30dc\u30ea\u30e5\u30fc\u30e0\u3068\u30c7\u30fc\u30bf\u306e\u6c38\u7d9a\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">\u672c\u756a\u74b0\u5883\u3067\u306e\u904b\u7528\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3068\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u6700\u9069\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-13\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u30ed\u30b0\u7ba1\u7406\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Terraform\u3067Docker\u30b3\u30f3\u30c6\u30ca\u3092\u7ba1\u7406\u3059\u308b\u30e1\u30ea\u30c3\u30c8<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30a4\u30f3\u30d5\u30e9\u306e\u30b3\u30fc\u30c9\u5316\u306b\u3088\u308b\u4e00\u8cab\u6027\u306e\u78ba\u4fdd<\/h3>\n\n\n\n<p>Terraform\u3092\u4f7f\u7528\u3057\u3066Docker\u30b3\u30f3\u30c6\u30ca\u3092\u7ba1\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u30b3\u30fc\u30c9\u3068\u3057\u3066\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u91cd\u8981\u306a\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u5b9f\u73fe<\/strong><\/li>\n\n\n\n<li>\u30a4\u30f3\u30d5\u30e9\u306e\u5909\u66f4\u5c65\u6b74\u3092 Git \u306a\u3069\u3067\u8ffd\u8de1\u53ef\u80fd<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u306e\u5909\u66f4\u3092 PR \u3067\u30ec\u30d3\u30e5\u30fc\u53ef\u80fd<\/li>\n\n\n\n<li>\u554f\u984c\u767a\u751f\u6642\u306e\u8fc5\u901f\u306a\u30ed\u30fc\u30eb\u30d0\u30c3\u30af<\/li>\n\n\n\n<li><strong>\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u8a2d\u5b9a\u5171\u6709<\/strong><\/li>\n\n\n\n<li>\u6a19\u6e96\u5316\u3055\u308c\u305f\u8a2d\u5b9a\u3092\u30c1\u30fc\u30e0\u5185\u3067\u5171\u6709<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b3\u30fc\u30c9\u306e\u4e00\u5143\u7ba1\u7406<\/li>\n\n\n\n<li>\u77e5\u8b58\u306e\u5c5e\u4eba\u5316\u3092\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Docker\u30b3\u30f3\u30c6\u30ca\u306e\u8a2d\u5b9a\u4f8b\nresource \"docker_container\" \"web_app\" {\n  name  = \"web-application\"\n  image = docker_image.nginx.name\n\n  # \u74b0\u5883\u8a2d\u5b9a\u306e\u6a19\u6e96\u5316\n  env = {\n    \"ENVIRONMENT\" = \"production\"\n    \"APP_VERSION\" = \"1.0.0\"\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30b3\u30f3\u30c6\u30ca\u74b0\u5883\u306e\u8fc5\u901f\u306a\u30c7\u30d7\u30ed\u30a4\u3068\u518d\u73fe\u6027<\/h3>\n\n\n\n<p>Terraform\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30ca\u7ba1\u7406\u306f\u3001\u74b0\u5883\u306e\u30c7\u30d7\u30ed\u30a4\u3068\u518d\u73fe\u6027\u306b\u304a\u3044\u3066\u5927\u304d\u306a\u5229\u70b9\u3092\u3082\u305f\u3089\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8fc5\u901f\u306a\u74b0\u5883\u69cb\u7bc9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>terraform apply<\/code> \u30b3\u30de\u30f3\u30c9\u4e00\u3064\u3067\u74b0\u5883\u69cb\u7bc9<\/li>\n\n\n\n<li>\u8907\u6570\u30b3\u30f3\u30c6\u30ca\u306e\u540c\u6642\u30c7\u30d7\u30ed\u30a4\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u74b0\u5883\u69cb\u7bc9\u6642\u9593\u306e\u5927\u5e45\u306a\u77ed\u7e2e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b8c\u5168\u306a\u518d\u73fe\u6027\u306e\u78ba\u4fdd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u30fb\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30fb\u672c\u756a\u74b0\u5883\u306e\u4e00\u8cab\u6027<\/li>\n\n\n\n<li>\u74b0\u5883\u5dee\u7570\u306b\u3088\u308b\u554f\u984c\u3092\u4e8b\u524d\u306b\u9632\u6b62<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u6b63\u78ba\u306a\u8907\u88fd\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8907\u6570\u74b0\u5883\u306e\u5b9a\u7fa9\u4f8b\nresource \"docker_network\" \"app_network\" {\n  name = \"app-${var.environment}\"\n}\n\nresource \"docker_container\" \"app\" {\n  count = var.instance_count\n  name  = \"app-${var.environment}-${count.index}\"\n\n  networks_advanced {\n    name = docker_network.app_network.name\n  }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Terraform\u3067Docker\u30b3\u30f3\u30c6\u30ca\u3092\u7ba1\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u4fe1\u983c\u6027\u3068\u52b9\u7387\u6027\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30c1\u30fc\u30e0\u3084\u8907\u96d1\u306a\u30b7\u30b9\u30c6\u30e0\u3092\u904b\u7528\u3059\u308b\u5834\u5408\u3001\u3053\u308c\u3089\u306e\u30e1\u30ea\u30c3\u30c8\u306f\u975e\u5e38\u306b\u91cd\u8981\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Terraform\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30ca\u7ba1\u7406\u306e\u57fa\u672c\u8a2d\u5b9a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u5fc5\u8981\u306a\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8a2d\u5b9a<\/h3>\n\n\n\n<p>Terraform\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u57fa\u672c\u8a2d\u5b9a\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">terraform {\n  required_version = \"&gt;= 0.13.0\"\n\n  required_providers {\n    docker = {\n      source  = \"kreuzwerker\/docker\"\n      version = \"~&gt; 3.0.0\"\n    }\n  }\n}\n\n# Docker\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u8a2d\u5b9a\nprovider \"docker\" {\n  host = \"unix:\/\/\/var\/run\/docker.sock\"\n\n  # \u30ea\u30e2\u30fc\u30c8\u30db\u30b9\u30c8\u306e\u5834\u5408\n  # host = \"tcp:\/\/docker-host:2376\"\n  # cert_path = \"~\/.docker\/certs\"\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">Docker Provider\u306e\u521d\u671f\u5316\u3068\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u521d\u671f\u5316\u624b\u9806<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u521d\u671f\u5316\nterraform init\n\n# \u8a2d\u5b9a\u306e\u691c\u8a3c\nterraform plan\n\n# \u30a4\u30f3\u30d5\u30e9\u306e\u30c7\u30d7\u30ed\u30a4\nterraform apply<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u5b9a\u7fa9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30e1\u30fc\u30b8\u306e\u5b9a\u7fa9\nresource \"docker_image\" \"nginx\" {\n  name         = \"nginx:latest\"\n  keep_locally = true\n}\n\n# \u30b3\u30f3\u30c6\u30ca\u306e\u5b9a\u7fa9\nresource \"docker_container\" \"web\" {\n  name  = \"nginx-server\"\n  image = docker_image.nginx.name\n\n  ports {\n    internal = 80\n    external = 8080\n  }\n\n  volumes {\n    container_path = \"\/usr\/share\/nginx\/html\"\n    host_path      = \"\/path\/to\/html\"\n    read_only      = true\n  }\n}\n\n# \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5b9a\u7fa9\nresource \"docker_network\" \"private_network\" {\n  name = \"app_network\"\n  driver = \"bridge\"\n\n  ipam_config {\n    subnet = \"172.20.0.0\/16\"\n  }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5909\u6570\u3068\u30ed\u30fc\u30ab\u30eb\u5024\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">variable \"container_count\" {\n  description = \"Number of containers to create\"\n  type        = number\n  default     = 2\n}\n\nlocals {\n  container_names = [for i in range(var.container_count) : \"web-${i}\"]\n}\n\n# \u8907\u6570\u30b3\u30f3\u30c6\u30ca\u306e\u4f5c\u6210\nresource \"docker_container\" \"web_servers\" {\n  count = var.container_count\n  name  = local.container_names[count.index]\n  image = docker_image.nginx.name\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u57fa\u672c\u8a2d\u5b9a\u306b\u3088\u308a\u3001Terraform\u3092\u4f7f\u7528\u3057\u3066Docker\u30b3\u30f3\u30c6\u30ca\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3067\u304d\u308b\u57fa\u76e4\u304c\u6574\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">\u5b9f\u8df5\u7684\u306aTerraform\u30b3\u30fc\u30c9\u306e\u66f8\u304d\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">Docker\u30a4\u30e1\u30fc\u30b8\u306e\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30e1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\nresource \"docker_image\" \"app\" {\n  name = \"my-app:${var.app_version}\"\n  build {\n    context = \"${path.module}\/app\"\n    dockerfile = \"Dockerfile\"\n    build_args = {\n      VERSION = var.app_version\n    }\n  }\n}\n\n# \u30a4\u30e1\u30fc\u30b8\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406\nresource \"docker_image\" \"cached_app\" {\n  name         = \"my-app:${var.app_version}\"\n  keep_locally = true\n  pull_triggers = [var.app_version]\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30b3\u30f3\u30c6\u30ca\u306e\u8a2d\u5b9a\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u74b0\u5883\u306e\u69cb\u7bc9\nresource \"docker_network\" \"app_network\" {\n  name   = \"app-network\"\n  driver = \"bridge\"\n\n  ipam_config {\n    subnet = \"172.20.0.0\/16\"\n  }\n}\n\nresource \"docker_container\" \"app\" {\n  name  = \"app-server\"\n  image = docker_image.app.name\n\n  networks_advanced {\n    name = docker_network.app_network.name\n    aliases = [\"app-server\"]\n  }\n\n  healthcheck {\n    test         = [\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:8080\/health\"]\n    interval     = \"30s\"\n    timeout      = \"10s\"\n    retries      = 3\n    start_period = \"40s\"\n  }\n\n  env = [\n    \"DATABASE_URL=${var.db_url}\",\n    \"API_KEY=${var.api_key}\"\n  ]\n}\n\n# \u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u306e\u8a2d\u5b9a\nresource \"docker_container\" \"nginx\" {\n  name  = \"nginx-proxy\"\n  image = \"nginx:latest\"\n\n  networks_advanced {\n    name = docker_network.app_network.name\n  }\n\n  ports {\n    internal = 80\n    external = 80\n  }\n\n  volumes {\n    container_path = \"\/etc\/nginx\/conf.d\"\n    host_path      = \"${path.module}\/nginx\"\n    read_only      = true\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30dc\u30ea\u30e5\u30fc\u30e0\u3068\u30c7\u30fc\u30bf\u306e\u6c38\u7d9a\u5316<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6c38\u7d9a\u5316\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u4f5c\u6210\nresource \"docker_volume\" \"db_data\" {\n  name = \"db-data\"\n\n  driver = \"local\"\n  driver_opts = {\n    type   = \"none\"\n    device = \"\/data\/postgres\"\n    o      = \"bind\"\n  }\n}\n\n# \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b3\u30f3\u30c6\u30ca\u306e\u8a2d\u5b9a\nresource \"docker_container\" \"db\" {\n  name  = \"postgres\"\n  image = \"postgres:13\"\n\n  networks_advanced {\n    name = docker_network.app_network.name\n    aliases = [\"db\"]\n  }\n\n  volumes {\n    volume_name    = docker_volume.db_data.name\n    container_path = \"\/var\/lib\/postgresql\/data\"\n  }\n\n  env = [\n    \"POSTGRES_PASSWORD=${var.db_password}\",\n    \"POSTGRES_DB=${var.db_name}\"\n  ]\n\n  restart = \"unless-stopped\"\n}\n\n# \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u8a2d\u5b9a\nresource \"docker_container\" \"backup\" {\n  name  = \"db-backup\"\n  image = \"postgres:13\"\n\n  volumes {\n    volume_name    = docker_volume.db_data.name\n    container_path = \"\/source\"\n    read_only      = true\n  }\n\n  volumes {\n    host_path      = \"\/backup\"\n    container_path = \"\/backup\"\n  }\n\n  command = [\n    \"\/bin\/bash\",\n    \"-c\",\n    \"pg_dump -h db -U postgres ${var.db_name} &gt; \/backup\/dump_$(date +%Y%m%d).sql\"\n  ]\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u306f\u3001\u672c\u756a\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd\u306a\u5805\u7262\u306a\u30b3\u30f3\u30c6\u30ca\u74b0\u5883\u306e\u69cb\u7bc9\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">\u672c\u756a\u74b0\u5883\u3067\u306e\u904b\u7528\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u5b9a\u7fa9\nresource \"docker_container\" \"secure_app\" {\n  name  = \"secure-app\"\n  image = docker_image.app.name\n\n  security_opts = [\n    \"no-new-privileges=true\",\n    \"seccomp=unconfined\"\n  ]\n\n  capabilities {\n    drop = [\"ALL\"]\n    add  = [\"NET_BIND_SERVICE\"]\n  }\n\n  # \u30ea\u30bd\u30fc\u30b9\u5236\u9650\n  memory    = 512\n  memory_swap = 1024\n  cpu_shares = 512\n\n  # \u6a5f\u5bc6\u60c5\u5831\u306e\u7ba1\u7406\n  env = [\n    \"API_KEY=${var.api_key}\",\n    \"DB_PASSWORD=${var.db_password}\"\n  ]\n}\n\n# \u8a3c\u660e\u66f8\u306e\u7ba1\u7406\nresource \"docker_container\" \"ssl_proxy\" {\n  name  = \"ssl-proxy\"\n  image = \"nginx:latest\"\n\n  volumes {\n    host_path      = \"\/etc\/letsencrypt\"\n    container_path = \"\/etc\/letsencrypt\"\n    read_only      = true\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3068\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u6700\u9069\u5316<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u52d5\u7684\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u8a2d\u5b9a\nlocals {\n  app_instances = {\n    development = 1\n    staging     = 2\n    production  = 3\n  }\n\n  memory_allocation = {\n    development = 512\n    staging     = 1024\n    production  = 2048\n  }\n}\n\nresource \"docker_container\" \"scalable_app\" {\n  count = local.app_instances[var.environment]\n  name  = \"app-${count.index}\"\n  image = docker_image.app.name\n\n  memory = local.memory_allocation[var.environment]\n\n  # \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\n  healthcheck {\n    test     = [\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:8080\/health\"]\n    interval = \"30s\"\n    timeout  = \"10s\"\n    retries  = 3\n  }\n\n  # \u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b7\u30f3\u30b0\u8a2d\u5b9a\n  labels {\n    \"traefik.enable\"                = \"true\"\n    \"traefik.http.routers.app.rule\" = \"Host(`app.example.com`)\"\n  }\n}\n\n# \u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a\nresource \"docker_container\" \"monitoring\" {\n  name  = \"prometheus\"\n  image = \"prom\/prometheus:latest\"\n\n  volumes {\n    host_path      = \"${path.module}\/prometheus\"\n    container_path = \"\/etc\/prometheus\"\n    read_only      = true\n  }\n\n  ports {\n    internal = 9090\n    external = 9090\n  }\n}\n\n# \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u6226\u7565\nresource \"docker_container\" \"backup\" {\n  name  = \"backup-service\"\n  image = \"backup-image:latest\"\n\n  volumes {\n    volume_name    = docker_volume.data.name\n    container_path = \"\/data\"\n    read_only      = true\n  }\n\n  env = [\n    \"BACKUP_INTERVAL=24h\",\n    \"RETENTION_DAYS=30\",\n    \"S3_BUCKET=${var.backup_bucket}\"\n  ]\n}<\/pre>\n\n\n\n<p>\u904b\u7528\u306e\u30dd\u30a4\u30f3\u30c8:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u5236\u9650\u5024\u306f\u74b0\u5883\u3054\u3068\u306b\u9069\u5207\u306b\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u81ea\u52d5\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\u30e1\u30c8\u30ea\u30af\u30b9\u306b\u57fa\u3065\u3044\u3066\u5224\u65ad<\/li>\n\n\n\n<li>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u5b9a\u671f\u7684\u306b\u5b9f\u884c\u3057\u3001\u4e16\u4ee3\u7ba1\u7406\u3092\u5b9f\u65bd<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u66f4\u65b0\u306f\u81ea\u52d5\u5316\u3057\u3066\u9069\u7528<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a8\u30e9\u30fc: Error: Unable to create container\n# \u89e3\u6c7a\u7b56: \u30b3\u30f3\u30c6\u30ca\u8a2d\u5b9a\u306e\u78ba\u8a8d\nresource \"docker_container\" \"debug_example\" {\n  name  = \"debug-container\"\n  image = docker_image.app.name\n\n  # \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u306e\u6709\u52b9\u5316\n  env = [\n    \"DEBUG=true\",\n    \"LOG_LEVEL=debug\"\n  ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a8\u30e9\u30fc: Error: Network not found\n# \u89e3\u6c7a\u7b56: \u4f9d\u5b58\u95a2\u4fc2\u306e\u660e\u793a\nresource \"docker_network\" \"debug_network\" {\n  name = \"debug-network\"\n}\n\nresource \"docker_container\" \"networked_app\" {\n  depends_on = [docker_network.debug_network]\n\n  networks_advanced {\n    name = docker_network.debug_network.name\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30ed\u30b0\u7ba1\u7406\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ed\u30ae\u30f3\u30b0\u8a2d\u5b9a\nresource \"docker_container\" \"app_with_logging\" {\n  name  = \"logged-app\"\n  image = docker_image.app.name\n\n  log_driver = \"json-file\"\n  log_opts = {\n    \"max-size\" = \"10m\"\n    \"max-file\" = \"3\"\n  }\n}\n\n# Grafana\u306b\u3088\u308b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\nresource \"docker_container\" \"monitoring_stack\" {\n  name  = \"grafana\"\n  image = \"grafana\/grafana:latest\"\n\n  ports {\n    internal = 3000\n    external = 3000\n  }\n\n  volumes {\n    container_path = \"\/var\/lib\/grafana\"\n    volume_name    = docker_volume.grafana_data.name\n  }\n\n  env = [\n    \"GF_SECURITY_ADMIN_PASSWORD=${var.grafana_password}\",\n    \"GF_INSTALL_PLUGINS=grafana-piechart-panel\"\n  ]\n}\n\n# \u30c7\u30d0\u30c3\u30b0\u7528\u306e\u4e00\u6642\u7684\u306a\u30b3\u30f3\u30c6\u30ca\nresource \"docker_container\" \"debug_tools\" {\n  count = var.enable_debug ? 1 : 0\n  name  = \"debug-tools\"\n  image = \"nicolaka\/netshoot:latest\"\n\n  network_mode = \"host\"\n\n  capabilities {\n    add = [\"NET_ADMIN\", \"SYS_ADMIN\"]\n  }\n}<\/pre>\n\n\n\n<p>\u4e3b\u8981\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30dd\u30a4\u30f3\u30c8:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u554f\u984c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>terraform init -reconfigure<\/code>\u3067\u518d\u521d\u671f\u5316<\/li>\n\n\n\n<li>\u72b6\u614b\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u7af6\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>terraform import<\/code>\u3067\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u660e\u793a\u7684\u306a\u5b9a\u7fa9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c6\u30ca\u306e\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u554f\u984c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u9069\u7528<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u306e\u5b9a\u671f\u5b9f\u884c<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":{"0":"post-2345","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2345"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2345\/revisions"}],"predecessor-version":[{"id":2346,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2345\/revisions\/2346"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}