{
    "archive_path": "archive/1717347608.906901",
    "base_url": "tomomano.github.io/learn-aws-by-coding",
    "basename": "",
    "bookmarked_date": "2024-06-02 17:00",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/tomomano.github.io/learn-aws-by-coding",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=tomomano.github.io",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "tomomano.github.io/learn-aws-by-coding/index.html"
    },
    "domain": "tomomano.github.io",
    "extension": "",
    "hash": "1YQ42591PV9E5ATASHN3",
    "history": {
        "archive_org": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.5.0 (aarch64-unknown-linux-gnu)",
                    "https://web.archive.org/save/https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "curl 8.5.0 (aarch64-unknown-linux-gnu)",
                "end_ts": "2024-06-02T17:01:59.400311+00:00",
                "index_texts": null,
                "output": "https://web.archive.org/web/20240602170143/https://tomomano.github.io/learn-aws-by-coding/",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:40.107481+00:00",
                "status": "succeeded"
            }
        ],
        "dom": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--disable-sync",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--dump-dom",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "Chromium 121.0.6167.57",
                "end_ts": "2024-06-02T17:01:21.438188+00:00",
                "index_texts": null,
                "output": "output.html",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:14.880525+00:00",
                "status": "succeeded"
            }
        ],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "60",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.5.0 (aarch64-unknown-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=tomomano.github.io"
                ],
                "cmd_version": "curl 8.5.0 (aarch64-unknown-linux-gnu)",
                "end_ts": "2024-06-02T17:00:09.255857+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:00:08.978449+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.5.0 (aarch64-unknown-linux-gnu)",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "curl 8.5.0 (aarch64-unknown-linux-gnu)",
                "end_ts": "2024-06-02T17:00:09.504279+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:00:09.265048+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [
            {
                "cmd": [
                    "yt-dlp",
                    "--restrict-filenames",
                    "--trim-filenames",
                    "128",
                    "--write-description",
                    "--write-info-json",
                    "--write-annotations",
                    "--write-thumbnail",
                    "--no-call-home",
                    "--write-sub",
                    "--write-auto-subs",
                    "--convert-subs=srt",
                    "--yes-playlist",
                    "--continue",
                    "--no-abort-on-error",
                    "--ignore-errors",
                    "--geo-bypass",
                    "--add-metadata",
                    "--format=(bv*+ba/b)[filesize<=750m][filesize_approx<=?750m]/(bv*+ba/b)",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "2023.12.30",
                "end_ts": "2024-06-02T17:01:40.097969+00:00",
                "index_texts": [],
                "output": "media",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:38.032748+00:00",
                "status": "succeeded"
            }
        ],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2024-06-02T17:01:37.857225+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:30.627649+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--disable-sync",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--print-to-pdf",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "Chromium 121.0.6167.57",
                "end_ts": "2024-06-02T17:01:09.237800+00:00",
                "index_texts": null,
                "output": "output.pdf",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:00:41.055403+00:00",
                "status": "succeeded"
            }
        ],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpsr_6omka",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2024-06-02T17:01:30.615783+00:00",
                "index_texts": [
                    "\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u3084\u6559\u79d1\u66f8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3067\u516c\u958b\u3057\u3066\u3044\u308b\uff0e\n\n\ud83d\udcd7\u544a\u77e5\ud83d\udcd7\n\u5404\u65b9\u9762\u3067\u3054\u597d\u8a55\u3092\u3044\u305f\u3060\u3044\u3066\u3044\u308b\u672c\u8b1b\u7fa9\u8cc7\u6599\u3067\u3059\u304c\uff0c\u3053\u306e\u5ea6\u5897\u88dc\u30fb\u6539\u8a02\u306e\u3046\u3048\u66f8\u7c4d\u3068\u3057\u3066\u51fa\u7248\u3059\u308b\u3053\u3068\u304c\u6c7a\u5b9a\u3044\u305f\u3057\u307e\u3057\u305f\uff01\n\u66f8\u7c4d\u9650\u5b9a\u306e\u66f8\u304d\u4e0b\u308d\u3057\u306e\uff13\u7ae0 (\u7d04100\u30da\u30fc\u30b8\u5206\uff01)\u3092\u65b0\u305f\u306b\u8ffd\u52a0\u3057\u3066\uff0c2021\u5e749\u670827\u65e5\u306b\u767a\u58f2\u4e88\u5b9a\u3067\u3059\uff0e\n\u3053\u306e\u8cc7\u6599\u3092\u6c17\u306b\u5165\u3063\u3066\u3044\u305f\u3060\u3044\u305f\u65b9\u306f\uff0c\u624b\u306b\u53d6\u3063\u3066\u3044\u305f\u3060\u3051\u308b\u3068\u3042\u308a\u304c\u305f\u3044\u3067\u3059\uff0e\n\u3053\u3053\u3067\u516c\u958b\u3057\u3066\u3044\u308b\u8cc7\u6599\u306f\u5f15\u304d\u7d9a\u304d\u30aa\u30f3\u30e9\u30a4\u30f3\u3067\u7121\u6599\u3067\u8aad\u3081\u307e\u3059\u306e\u3067\uff0c\u3054\u5b89\u5fc3\u304f\u3060\u3055\u3044\ud83d\ude47\n\u66f8\u7c4d\u540d: AWS\u3067\u306f\u3058\u3081\u308b \u30af\u30e9\u30a6\u30c9\u958b\u767a\u5165\u9580 (\u771f\u91ce\u667a\u4e4b\u8457\uff0c\u30de\u30a4\u30ca\u30d3\u51fa\u7248\uff0c360\u30da\u30fc\u30b8)\n\n\n\nAmazon (\u7d19\u5a92\u4f53 or Kindle) \u21d2 https://www.amazon.co.jp/dp/4839977607/\n\n\n\u30de\u30a4\u30ca\u30d3\u30d6\u30c3\u30af\u30b9 (\u7d19\u5a92\u4f53 or PDF) \u21d2 https://book.mynavi.jp/ec/products/detail/id=124113\n\n\n\nCDK v2 \u3078\u306e\u5bfe\u5fdc\n\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u8b1b\u7fa9\u8cc7\u6599\u306f CDK v1 \u3067\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\uff0e\n\u304c\uff0c AWS \u306f2023\u5e746\u67081\u65e5\u3067 v1 \u306e\u30b5\u30dd\u30fc\u30c8\u3092\u7d42\u4e86\u3057\uff0cCDK v2 \u3078\u306e\u79fb\u884c\u3092\u63a8\u5968\u3057\u3066\u3044\u307e\u3059\uff0e\n(\u8a18\u4e8b)\uff0e\n\n\u73fe\u5728\uff0c\u30b3\u30fc\u30c9\u3092\u30ec\u30d3\u30e5\u30fc\u4e2d\u306a\u306e\u3067\uff0c\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3055\u308c\u308b\u306e\u306f\u3082\u3046\u5c11\u3057\u5148\u306b\u306a\u308a\u307e\u3059\uff0e\n\u3082\u3046\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\uff01\n\ud83c\udf0e\u82f1\u8a9e\u30d0\u30fc\u30b8\u30e7\u30f3\ud83c\udf0e\n\u3053\u3061\u3089\n\u306e\u30ea\u30f3\u30af\u306b\u3066\u92ed\u610f\u4f5c\u6210\u4e2d\uff01\n\n\n1. \u306f\u3058\u3081\u306b\n\n\n1.1. \u672c\u66f8\u306e\u76ee\u7684\u30fb\u5185\u5bb9\n\u672c\u66f8\u306f\uff0c\u6771\u4eac\u5927\u5b66\u8a08\u6570\u5de5\u5b66\u79d1\u30672021\u5e74\u5ea6S1/S2\u30bf\u30fc\u30e0\u306b\u958b\u8b1b\u3055\u308c\u3066\u3044\u308b\"\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u5de5\u5b66\u7279\u8ad6\"\u306e\u8b1b\u7fa9\u8cc7\u6599\u3068\u3057\u3066\u4f5c\u6210\u3055\u308c\u305f\uff0e\n\u672c\u66f8\u306e\u76ee\u7684\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u521d\u5fc3\u8005\u3092\u5bfe\u8c61\u3068\u3057\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u57fa\u790e\u7684\u306a\u77e5\u8b58\u30fb\u6982\u5ff5\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u307e\u305f\uff0c Amazon Web Services (\u4ee5\u4e0b\uff0c AWS) \u306e\u63d0\u4f9b\u3059\u308b\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u3092\u5b9f\u4f8b\u3068\u3057\u3066\uff0c\u5177\u4f53\u7684\u306a\u30af\u30e9\u30a6\u30c9\u306e\u5229\u7528\u65b9\u6cd5\u3092\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u901a\u3057\u3066\u5b66\u3076\uff0e\n\u3068\u304f\u306b\uff0c\u79d1\u5b66\u30fb\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u306e\u5b66\u751f\u3092\u5bfe\u8c61\u3068\u3057\u3066\uff0c\u7814\u7a76\u306a\u3069\u306e\u76ee\u7684\u3067\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306e\u5b9f\u8df5\u7684\u306a\u624b\u9806\u3092\u7d39\u4ecb\u3059\u308b\uff0e\n\u77e5\u8b58\u30fb\u7406\u8ad6\u306e\u8aac\u660e\u306f\u6700\u5c0f\u9650\u306b\u7559\u3081\uff0c\u5b9f\u8df5\u3092\u884c\u3046\u4e2d\u3067\u5fc5\u8981\u306a\u6982\u5ff5\u306e\u89e3\u8aac\u3092\u884c\u3046\u4e88\u5b9a\u3067\u3042\u308b\uff0e\n\u8aad\u8005\u304c\u4eca\u5f8c\uff0c\u7814\u7a76\u306a\u3069\u3067\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u969b\u306e\uff0c\u8db3\u304c\u304b\u308a\u3068\u306a\u308c\u3070\u672c\u66f8\u306e\u76ee\u7684\u306f\u5341\u5206\u9054\u6210\u3055\u308c\u305f\u3053\u3068\u306b\u306a\u308b\uff0e\n\u672c\u66f8\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u4e09\u90e8\u69cb\u6210\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\nTable 1. \u672c\u66f8\u306e\u69cb\u6210\n\n\n\n\n\n\n\n\n\u30c6\u30fc\u30de\n\u30cf\u30f3\u30ba\u30aa\u30f3\n\n\n\n\n\u7b2c\u4e00\u90e8 (1\u7ae0-4\u7ae0)\n\u30af\u30e9\u30a6\u30c9\u306e\u57fa\u790e\n\n\n\nAWS\u306b\u81ea\u5206\u306e\u30b5\u30fc\u30d0\u30fc\u3092\u7acb\u3061\u4e0a\u3052\u308b\n\n\n\n\n\n\u7b2c\u4e8c\u90e8 (5\u7ae0-9\u7ae0)\n\u30af\u30e9\u30a6\u30c9\u3092\u6d3b\u7528\u3057\u305f\u6a5f\u68b0\u5b66\u7fd2\n\n\n\nAWS \u3068 Jupyter \u3092\u4f7f\u3063\u3066\u59cb\u3081\u308b\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\n\n\n\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u81ea\u52d5\u8cea\u554f\u56de\u7b54\u30dc\u30c3\u30c8\u3092\u4f5c\u308b\n\n\n\u4e26\u5217\u5316\u3055\u308c\u305f\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u306e\u5b9f\u88c5\n\n\n\n\n\n\u7b2c\u4e09\u90e8 (10\u7ae0-13\u7ae0)\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u5165\u9580\n\n\n\nLambda, DynamoDB, S3 \u306e\u6f14\u7fd2\n\n\n\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308b SNS \"Bashoutter\" \u3092\u4f5c\u308b\n\n\n\n\n\n\n\u7b2c\u4e00\u90e8\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u57fa\u790e\u3068\u306a\u308b\u6982\u5ff5\u30fb\u77e5\u8b58\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3084\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306a\u3069\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u4e0a\u3067\u6700\u4f4e\u9650\u304a\u3055\u3048\u306a\u3051\u308c\u3070\u3044\u3051\u306a\u3044\u30dd\u30a4\u30f3\u30c8\u3092\u8aac\u660e\u3059\u308b\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u306f\u3058\u3081\u3066\u306e\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092 AWS \u306b\u7acb\u3061\u4e0a\u3052\u308b\u6f14\u7fd2\u3092\u884c\u3046\uff0e\n\u7b2c\u4e8c\u90e8\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u79d1\u5b66\u8a08\u7b97 (\u3068\u304f\u306b\u6a5f\u68b0\u5b66\u7fd2) \u3092\u8d70\u3089\u305b\u308b\u305f\u3081\u306e\u5165\u9580\u3068\u306a\u308b\u77e5\u8b58\u30fb\u6280\u8853\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u3042\u308f\u305b\u3066\uff0c\nDocker\n\u3068\u3088\u3070\u308c\u308b\u4eee\u60f3\u8a08\u7b97\u74b0\u5883\u306e\u4f7f\u7528\u65b9\u6cd5\u3092\u7d39\u4ecb\u3059\u308b\uff0e\n\u4e00\u3064\u76ee\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c AWS \u306e\u30af\u30e9\u30a6\u30c9\u3067 Jupyter Notebook \u3092\u8d77\u52d5\u3057\u7c21\u5358\u306a\u6a5f\u68b0\u5b66\u7fd2\u306e\u8a08\u7b97\u3092\u8d70\u3089\u305b\u308b\u8ab2\u984c\u3092\u5b9f\u8df5\u3059\u308b\uff0e\n\u4e8c\u3064\u76ee\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u6df1\u5c64\u5b66\u7fd2\u3092\u7528\u3044\u305f\u81ea\u7136\u8a00\u8a9e\u51e6\u7406\u306b\u3088\u308a\uff0c\u8cea\u554f\u306b\u81ea\u52d5\u3067\u56de\u7b54\u3092\u751f\u6210\u3059\u308b\u30dc\u30c3\u30c8\u3092\u4f5c\u6210\u3059\u308b\uff0e\n\u6700\u5f8c\u306b\uff0c\u8907\u6570\u53f0\u306e GPU \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306a\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8d77\u52d5\u3057\uff0c\u4e26\u5217\u306b\u6df1\u5c64\u5b66\u7fd2\u306e\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u3092\u884c\u3046\u65b9\u6cd5\u3092\u7d39\u4ecb\u3059\u308b\uff0e\n\u7b2c\u4e09\u90e8\u3067\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u3088\u3070\u308c\u308b\u6700\u65b0\u306e\u30af\u30e9\u30a6\u30c9\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u7d39\u4ecb\u3059\u308b\uff0e\n\u3053\u308c\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u306e\u51e6\u7406\u80fd\u529b\u3092\u8ca0\u8377\u306b\u5fdc\u3058\u3066\u3088\u308a\u67d4\u8edf\u306b\u62e1\u5927\u30fb\u7e2e\u5c0f\u3059\u308b\u305f\u3081\u306e\u6982\u5ff5\u3067\u3042\u308a\uff0c\u305d\u308c\u4ee5\u524d (Serverful \u3068\u3057\u3070\u3057\u3070\u3088\u3070\u308c\u308b) \u3068\u8cea\u7684\u306b\u7570\u306a\u308b\u8a2d\u8a08\u601d\u60f3\u3092\u30af\u30e9\u30a6\u30c9\u306b\u5c0e\u5165\u3059\u308b\u3082\u306e\u3067\u3042\u308b\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u4e3b\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u3042\u308b Lambda, DynamoDB, S3 \u306e\u6f14\u7fd2\u3092\u63d0\u4f9b\u3059\u308b\uff0e\n\u3055\u3089\u306b\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u6280\u8853\u3092\u4f7f\u7528\u3057\u3066\u7c21\u5358\u306a SNS \u3092\u30af\u30e9\u30a6\u30c9\u4e0a\u306b\u4f5c\u6210\u3059\u308b\uff0e\n\u3053\u308c\u3089\u306e\u8c4a\u5bcc\u306a\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u3088\u308a\uff0c AWS \u4e0a\u306b\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u958b\u767a\u3059\u308b\u305f\u3081\u306e\u77e5\u8b58\u3068\u6280\u8853\u304c\u8eab\u306b\u3064\u304f\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3044\u305a\u308c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3082\uff0c\u5b9f\u7528\u6027\u3092\u91cd\u8996\u3057\u305f\u3082\u306e\u306b\u306a\u3063\u3066\u304a\u308a\uff0c\u3053\u308c\u3089\u3092\u30d9\u30fc\u30b9\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u65bd\u3059\u3053\u3068\u3067\u69d8\u3005\u306a\u5fdc\u7528\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\n1.2. \u672c\u66f8\u306e\u30d5\u30a3\u30ed\u30bd\u30d5\u30a3\u30fc\n\u672c\u66f8\u306e\u30d5\u30a3\u30ed\u30bd\u30d5\u30a3\u30fc\u3092\u4e00\u8a00\u3067\u8868\u3059\u306a\u3089\uff0c \"\u30ed\u30b1\u30c3\u30c8\u3067\u5b87\u5b99\u307e\u3067\u98db\u3093\u3067\u3044\u3063\u3066\u4e00\u5ea6\u5730\u7403\u3092\u773a\u3081\u3066\u307f\u3088\u3046\uff01\" \u3067\u3042\u308b\uff0e\n\u3069\u3046\u3044\u3046\u3053\u3068\u304b\uff1f\n\u3053\u3053\u3067\u3044\u3046\"\u5730\u7403\"\u3068\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u5168\u4f53\u50cf\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u8a00\u3046\u307e\u3067\u3082\u306a\u304f\uff0c\u30af\u30e9\u30a6\u30c9\u3068\u3044\u3046\u6280\u8853\u306f\u975e\u5e38\u306b\u5e83\u7bc4\u304b\u3064\u8907\u96d1\u306a\u6982\u5ff5\u3067\uff0c\u5e7e\u591a\u306e\u60c5\u5831\u6280\u8853\u30fb\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30fb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u7cbe\u7dfb\u306b\u7d44\u307f\u5408\u308f\u3055\u3063\u3066\u3067\u304d\u305f\u7dcf\u4f53\u3067\u3042\u308b\uff0e\n\u305d\u3057\u3066\uff0c\u4eca\u65e5\u3067\u306f\u79d1\u5b66\u7814\u7a76\u304b\u3089\u65e5\u5e38\u306e\u30a4\u30f3\u30d5\u30e9\u8a2d\u5099\u306b\u81f3\u308b\u307e\u3067\uff0c\u6211\u3005\u306e\u793e\u4f1a\u306e\u591a\u304f\u306e\u90e8\u5206\u304c\u30af\u30e9\u30a6\u30c9\u6280\u8853\u306b\u3088\u3063\u3066\u652f\u3048\u3089\u308c\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u3044\u3046\"\u30ed\u30b1\u30c3\u30c8\"\u3068\u306f\u3053\u306e\u8b1b\u7fa9\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u3053\u306e\u8b1b\u7fa9\u3067\u306f\uff0c\u30ed\u30b1\u30c3\u30c8\u306b\u4e57\u3063\u3066\u5b87\u5b99\u307e\u3067\u98db\u3073\u7acb\u3061\uff0c\u5730\u7403(\u30af\u30e9\u30a6\u30c9)\u306e\u5168\u4f53\u3092\u81ea\u8eab\u306e\u76ee\u3067\u773a\u3081\u3066\u3082\u3089\u3046\uff0e\n\u305d\u306e\u969b\uff0c\u30ed\u30b1\u30c3\u30c8\u306e\u6210\u308a\u7acb\u3061\u3084\u4ed5\u7d44\u307f (\u80cc\u5f8c\u306b\u3042\u308b\u8981\u7d20\u6280\u8853\u3084\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9) \u3092\u6df1\u304f\u306f\u554f\u308f\u306a\u3044\uff0e\n\u5c06\u6765\uff0c\u81ea\u5206\u304c\u7814\u7a76\u306a\u3069\u306e\u76ee\u7684\u3067\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306b\u306a\u3063\u305f\u969b\u306b\uff0c\u6539\u3081\u3066\u5b66\u3093\u3067\u3082\u3089\u3048\u3070\u826f\u3044\uff0e\n\u672c\u66f8\u306e\u76ee\u7684\u306f\u3080\u3057\u308d\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u6700\u5148\u7aef\u306b\u5b9f\u969b\u306b\u89e6\u308c\uff0c\u305d\u3053\u304b\u3089\u3069\u3093\u306a\u666f\u8272\u304c\u898b\u3048\u308b\u304b(\u3069\u3093\u306a\u5fdc\u7528\u304c\u53ef\u80fd\u304b)\u3092\u5b9f\u611f\u3057\u3066\u3082\u3089\u3046\u3053\u3068\u3067\u3042\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u7406\u7531\u3067\uff0c\u672c\u66f8\u306f\u30af\u30e9\u30a6\u30c9\u306e\u57fa\u790e\u304b\u3089\u5fdc\u7528\u307e\u3067\u5e45\u5e83\u3044\u30c6\u30fc\u30de\u3092\u53d6\u308a\u6271\u3046\uff0e\n\u7b2c\u4e00\u90e8\u306f\u30af\u30e9\u30a6\u30c9\u306e\u57fa\u790e\u304b\u3089\u59cb\u3081\uff0c\u7b2c\u4e8c\u90e8\u3067\u306f\u4e00\u6c17\u306b\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u3057\u6a5f\u68b0\u5b66\u7fd2(\u6df1\u5c64\u5b66\u7fd2)\u3092\u30af\u30e9\u30a6\u30c9\u3067\u5b9f\u884c\u3059\u308b\u624b\u6cd5\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u3055\u3089\u306b\u7b2c\u4e09\u90e8\u3067\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30fb\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u3044\u3046\u3053\u3053\u6570\u5e74\u306e\u3046\u3061\u306b\u78ba\u7acb\u3057\u305f\u5168\u304f\u65b0\u3057\u3044\u30af\u30e9\u30a6\u30c9\u306e\u8a2d\u8a08\u306b\u3064\u3044\u3066\u89e3\u8aac\u3059\u308b\uff0e\n\u305d\u308c\u305e\u308c\u3067\u672c\u4e00\u518a\u5206\u4ee5\u4e0a\u306e\u5185\u5bb9\u306b\u76f8\u5f53\u3059\u308b\u3082\u306e\u3067\u3042\u308b\u304c\uff0c\u672c\u66f8\u306f\u3042\u3048\u3066\u3053\u308c\u3089\u3092\u4e00\u518a\u306b\u307e\u3068\u3081\u9023\u7d9a\u7684\u306b\u4fef\u77b0\u3059\u308b\u3068\u3044\u3046\u91ce\u5fc3\u7684\u306a\u610f\u56f3\u3092\u3082\u3063\u3066\u57f7\u7b46\u3055\u308c\u305f\uff0e\n\u6c7a\u3057\u3066\u697d\u306a\u642d\u4e57\u4f53\u9a13\u3067\u306f\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\u304c\uff0c\u3053\u306e\u30ed\u30b1\u30c3\u30c8\u306b\u3057\u304c\u307f\u3064\u3044\u3066\u304d\u3066\u3082\u3089\u3048\u308c\u3070\uff0c\u3068\u3066\u3082\u30a8\u30ad\u30b5\u30a4\u30c6\u30a3\u30f3\u30b0\u306a\u666f\u8272\u304c\u898b\u3089\u308c\u308b\u3053\u3068\u3092\u7d04\u675f\u3057\u305f\u3044\uff0e\n\n\n\n\n\n\n\n1.3. AWS\u30a2\u30ab\u30a6\u30f3\u30c8\n\u672c\u66f8\u3067\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u5f62\u5f0f\u3067 AWS \u306e\u30af\u30e9\u30a6\u30c9\u3092\u5b9f\u969b\u306b\u52d5\u304b\u3059\u6f14\u7fd2\u3092\u63d0\u4f9b\u3059\u308b\uff0e\n\u81ea\u5206\u3067\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3057\u3066\u307f\u305f\u3044\u8aad\u8005\u306f\uff0c\u5404\u81ea\u3067 AWS \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u3092\u3057\u3066\u3044\u305f\u3060\u304f\uff0e\nAWS \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u306e\u4ed5\u65b9\u306f\u5dfb\u672b\u4ed8\u9332 (Section 15.1) \u306b\u7c21\u5358\u306b\u8a18\u8f09\u3057\u305f\u306e\u3067\uff0c\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u53c2\u7167\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\nAWS \u306b\u306f\u3044\u304f\u3064\u304b\u306e\u6a5f\u80fd\u306b\u5bfe\u3057\u3066\u7121\u6599\u5229\u7528\u67a0\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u304a\u308a\uff0c\u3044\u304f\u3064\u304b\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\u7121\u6599\u306e\u7bc4\u56f2\u5185\u3067\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\u4e00\u65b9\uff0c\u307b\u304b\u306e\u30cf\u30f3\u30ba\u30aa\u30f3 (\u3068\u304f\u306b\u6a5f\u68b0\u5b66\u7fd2\u3092\u6271\u3046\u3082\u306e) \u3067\u306f\u6570\u30c9\u30eb\u7a0b\u5ea6\u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3054\u3068\u306b\u767a\u751f\u3059\u308b\u304a\u304a\u3088\u305d\u306e\u30b3\u30b9\u30c8\u306b\u3064\u3044\u3066\u8a18\u8ff0\u304c\u3042\u308b\u306e\u3067\uff0c\u6ce8\u610f\u3092\u3057\u306a\u304c\u3089\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u307e\u305f\uff0c\u5927\u5b66\u306a\u3069\u306e\u6559\u80b2\u6a5f\u95a2\u306b\u304a\u3051\u308b\u8b1b\u7fa9\u3067 AWS \u3092\u4f7f\u7528\u3059\u308b\u969b\u306f\uff0c AWS Educate \u3068\u3044\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3053\u308c\u306f\uff0c\u8b1b\u7fa9\u306e\u62c5\u5f53\u8005\u304c\u7533\u8acb\u3092\u884c\u3046\u3053\u3068\u3067\uff0c\u53d7\u8b1b\u3059\u308b\u5b66\u751f\u306b\u5bfe\u3057 AWS \u30af\u30ec\u30b8\u30c3\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u308b\u3068\u3044\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3042\u308b\uff0e\nAWS Educate \u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u91d1\u92ad\u7684\u306a\u8ca0\u62c5\u306a\u3057\u306b AWS \u3092\u4f53\u9a13\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u307e\u305f\uff0c\u8b1b\u7fa9\u3092\u7d4c\u7531\u305b\u305a\u500b\u4eba\u3067\u3082 AWS Educate \u306b\u53c2\u52a0\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\nAWS Educate \u304b\u3089\u306f\u69d8\u3005\u306a\u5b66\u7fd2\u6559\u6750\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u305c\u3072\u6d3b\u7528\u3057\u3066\u3082\u3089\u3044\u305f\u3044\uff0e\n\n\n1.4. \u74b0\u5883\u69cb\u7bc9\n\u672c\u66f8\u3067\u306f\uff0c AWS \u4e0a\u306b\u30af\u30e9\u30a6\u30c9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5c55\u958b\u3059\u308b\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u65bd\u3059\u308b\uff0e\n\u305d\u3053\u3067\u7d39\u4ecb\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u306f\uff0c\u4ee5\u4e0b\u306e\u8a08\u7b97\u6a5f\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3042\u308b\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\uff0c\u5dfb\u672b\u4ed8\u9332 (Section 15) \u306b\u8a18\u3057\u3066\u3042\u308b\uff0e\n\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u53c2\u7167\u3057\uff0c\u74b0\u5883\u69cb\u7bc9\u3092\u5404\u81ea\u5b9f\u65bd\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\n\n\nUNIX \u7cfb\u30b3\u30f3\u30bd\u30fc\u30eb:\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u7d39\u4ecb\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u305f\u308a\uff0c SSH \u3067\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\uff0c UNIX \u7cfb\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3042\u308b\uff0e\nMac \u307e\u305f\u306f Linux \u306e\u30e6\u30fc\u30b6\u30fc\u306f\uff0c OS \u306b\u6a19\u6e96\u642d\u8f09\u306e\u30b3\u30f3\u30bd\u30fc\u30eb(\u30bf\u30fc\u30df\u30ca\u30eb\u3068\u3082\u547c\u3070\u308c\u308b)\u3092\u4f7f\u7528\u3059\u308c\u3070\u3088\u3044\uff0e\nWindows \u306e\u30e6\u30fc\u30b6\u30fc\u306f\uff0c\nWindows Subsystem for Linux (WSL)\n\u3092\u4f7f\u3044\uff0c Linux \u306e\u4eee\u60f3\u74b0\u5883\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u63a8\u5968\u3059\u308b (Section 15.5 \u53c2\u7167)\uff0e\n\n\nDocker:\n\u672c\u66f8\u3067\u306f Docker \u3068\u3088\u3070\u308c\u308b\u4eee\u60f3\u8a08\u7b97\u74b0\u5883\u306e\u5229\u7528\u65b9\u6cd5\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u306b\u3064\u3044\u3066\u306f Section 15.6 \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\nPython:\nVersion 3.6 \u4ee5\u4e0a\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\n\u3068\u304f\u306b\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f venv \u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\uff0e\nvenv \u306e\u4f7f\u3044\u65b9\u306f Section 15.7 \u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\nNode.js:\nversion 12.0 \u4ee5\u4e0a \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\n\n\nAWS CLI:\nVersion 2\n\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u306b\u3064\u3044\u3066\u306f Section 15.3 \u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\nAWS CDK:\nVersion 1.100 \u4ee5\u4e0a\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\nVersion 2 \u4ee5\u964d\u306b\u306f\u672a\u5bfe\u5fdc\u3067\u3042\u308b\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u306b\u3064\u3044\u3066\u306f Section 15.4 \u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\nAWS \u8a8d\u8a3c\u9375\u306e\u8a2d\u5b9a:\nAWS API \u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u547c\u3076\u306b\u306f\uff0c\u8a8d\u8a3c\u9375 (secret key) \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u8a8d\u8a3c\u9375\u306e\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306f Section 15.3 \u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\n\n\n1.4.1. \u30cf\u30f3\u30ba\u30aa\u30f3\u5b9f\u884c\u7528\u306e Docker Image\nPython, Node.js, AWS CDK \u306a\u3069\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30d7\u30ed\u30b0\u30e9\u30e0/\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u306e Docker image \u3092\u7528\u610f\u3057\u305f\uff0e\n\u307e\u305f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3082\u30af\u30ed\u30fc\u30f3\u6e08\u307f\u3067\u3042\u308b\uff0e\nDocker \u306e\u4f7f\u3044\u65b9\u3092\u77e5\u3063\u3066\u3044\u308b\u8aad\u8005\u306f\uff0c\u3053\u308c\u3092\u4f7f\u3048\u3070\uff0c\u8af8\u3005\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u3059\u308b\u5fc5\u8981\u306a\u304f\uff0c\u3059\u3050\u306b\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u8d77\u52d5\u3059\u308b\uff0e\n\n$ docker run -it tomomano/labc\n\n\u3053\u306e Docker image \u306e\u4f7f\u3044\u65b9\u3084\u8a73\u7d30\u306f Section 15.8 \u306b\u8a18\u8f09\u3057\u3066\u3044\u308b\uff0e\n\n\n\n1.5. \u524d\u63d0\u77e5\u8b58\n\u672c\u66f8\u3092\u8aad\u3080\u306b\u3042\u305f\u308a\uff0c\u8981\u6c42\u3059\u308b\u524d\u63d0\u77e5\u8b58\u306f\u5927\u5b66\u521d\u7b49\u7a0b\u5ea6\u306e\u8a08\u7b97\u6a5f\u79d1\u5b66\u306e\u77e5\u8b58 (OS\uff0c\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306a\u3069)\u306e\u307f\u3067\u3042\u308b\uff0e\n\u305d\u308c\u4ee5\u4e0a\u306e\u524d\u63d0\u77e5\u8b58\u306f\u3068\u304f\u306b\u4eee\u5b9a\u3057\u306a\u3044\uff0e\n\u30af\u30e9\u30a6\u30c9\u306e\u5229\u7528\u7d4c\u9a13\u3082\u30bc\u30ed\u3067\u554f\u984c\u306a\u3044\uff0e\n\u304c\uff0c\u4ee5\u4e0b\u306e\u4e8b\u524d\u77e5\u8b58\u304c\u3042\u308b\u3068\u3088\u308a\u30b9\u30e0\u30fc\u30ba\u306b\u7406\u89e3\u3092\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\n\n\nPython \u306e\u57fa\u672c\u7684\u306a\u7406\u89e3:\n\u672c\u66f8\u3067\u306fPython\u3092\u4f7f\u3063\u3066\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4f5c\u6210\u3092\u884c\u3046\uff0e\n\u4f7f\u7528\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u5341\u5206\u62bd\u8c61\u5316\u3055\u308c\u3066\u304a\u308a\uff0c\u95a2\u6570\u306e\u540d\u524d\u3092\u898b\u305f\u3060\u3051\u3067\u610f\u5473\u304c\u660e\u77ad\u306a\u3082\u306e\u304c\u307b\u3068\u3093\u3069\u3067\u3042\u308b\u306e\u3067\uff0c Python \u306b\u8a73\u3057\u304f\u306a\u304f\u3066\u3082\u5fc3\u914d\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\uff0e\n\n\nLinux \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u57fa\u790e\u7684\u306a\u7406\u89e3:\n\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u969b\uff0c\u30af\u30e9\u30a6\u30c9\u4e0a\u306b\u7acb\u3061\u4e0a\u304c\u308b\u30b5\u30fc\u30d0\u30fc\u306f\u57fa\u672c\u7684\u306b Linux \u3067\u3042\u308b\uff0e\nLinux \u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306b\u3064\u3044\u3066\u77e5\u8b58\u304c\u3042\u308b\u3068\uff0c\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c8\u306a\u3069\u304c\u5bb9\u6613\u306b\u306a\u308b\uff0e\n\u7b46\u8005\u306e\u304a\u3059\u3059\u3081\u306e\u53c2\u8003\u66f8\u306f\nThe Linux Command Line by William Shotts\n\u3067\u3042\u308b\uff0e\n\u30a6\u30a7\u30d6\u3067\u7121\u6599\u3067\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\uff0c\u8aad\u3093\u3060\u3053\u3068\u306e\u306a\u3044\u4eba\u306f\u305c\u3072\u4e00\u8aad\u3092\uff0e\n\n\n\n\n\n1.6. \u8b1b\u7fa9\u306b\u95a2\u9023\u3059\u308b\u8cc7\u6599\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u3084\u6559\u79d1\u66f8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3067\u516c\u958b\u3057\u3066\u3044\u308b\uff0e\n\n\n\n1.7. \u672c\u66f8\u3067\u4f7f\u7528\u3059\u308b\u30ce\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306a\u3069\n\n\n\n\u30b3\u30fc\u30c9\u3084\u30b7\u30a7\u30eb\u306e\u30b3\u30de\u30f3\u30c9\u306f monospace letter \u3067\u8a18\u8ff0\u3059\u308b\uff0e\n\n\n\u30b7\u30a7\u30eb\u306b\u5165\u529b\u3059\u308b\u30b3\u30de\u30f3\u30c9\u306f\uff0c\u305d\u308c\u304c\u30b7\u30a7\u30eb\u30b3\u30de\u30f3\u30c9\u3067\u3042\u308b\u3068\u660e\u793a\u3059\u308b\u76ee\u7684\u3067\uff0c\u5148\u982d\u306b $ \u304c\u3064\u3051\u3066\u3042\u308b\uff0e\n$ \u306f\u30b3\u30de\u30f3\u30c9\u3092\u30b3\u30d4\u30fc&\u30da\u30fc\u30b9\u30c8\u3059\u308b\u3068\u304d\u306f\u9664\u304b\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u9006\u306b\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u51fa\u529b\u306b\u306f $ \u306f\u3064\u3044\u3066\u3044\u306a\u3044\u70b9\u306b\u7559\u610f\u3059\u308b\uff0e\n\n\n\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u6ce8\u610f\u3084\u30c1\u30c3\u30d7\u30b9\u3092\u63d0\u4f9b\u3059\u308b\uff0e\n\n\n\n\n\n\n\n\n2. \u30af\u30e9\u30a6\u30c9\u6982\u8ad6\n\n\n2.1. \u30af\u30e9\u30a6\u30c9\u3068\u306f\uff1f\n\n\n\n\n\u30af\u30e9\u30a6\u30c9\u3068\u306f\u306a\u306b\u304b\uff1f\n\u30af\u30e9\u30a6\u30c9\u3068\u3044\u3046\u8a00\u8449\u306f\uff0c\u305d\u308c\u81ea\u8eab\u304c\u3068\u3066\u3082\u5e83\u3044\u610f\u5473\u3092\u3082\u3064\u306e\u3067\uff0c\u53b3\u5bc6\u306a\u5b9a\u7fa9\u4ed8\u3051\u3092\u884c\u3046\u3053\u3068\u306f\u96e3\u3057\u3044\uff0e\n\n\n\n\nFigure 2. The NIST Definition of Cloud Computing\n\n\u3053\u308c\u306b\u3088\u308b\u3068\uff0c\u30af\u30e9\u30a6\u30c9\u3068\u306f\u4ee5\u4e0b\u306e\u8981\u4ef6\u304c\u6e80\u305f\u3055\u308c\u305f\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2/\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u7dcf\u4f53\u306e\u3053\u3068\u3092\u3044\u3046\uff0e\n\n\n\nOn-demand self-service\n\u5229\u7528\u8005\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5fdc\u3058\u3066\u8a08\u7b97\u8cc7\u6e90\u304c\u81ea\u52d5\u7684\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\n\n\nBroad network access\n\u5229\u7528\u8005\u306f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u901a\u3058\u3066\u30af\u30e9\u30a6\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\uff0e\n\n\nResource pooling\n\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306f\uff0c\u6240\u6709\u3059\u308b\u8a08\u7b97\u8cc7\u6e90\u3092\u5206\u5272\u3059\u308b\u3053\u3068\u3067\u8907\u6570\u306e\u5229\u7528\u8005\u306b\u8a08\u7b97\u8cc7\u6e90\u3092\u5272\u308a\u5f53\u3066\u308b\uff0e\n\n\nRapid elasticity\n\u5229\u7528\u8005\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5fdc\u3058\u3066\uff0c\u8fc5\u901f\u306b\u8a08\u7b97\u8cc7\u6e90\u306e\u62e1\u5927\u3042\u308b\u3044\u306f\u7e2e\u5c0f\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\nMeasured service\n\u8a08\u7b97\u8cc7\u6e90\u306e\u5229\u7528\u91cf\u3092\u8a08\u6e2c\u30fb\u76e3\u8996\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\u2026\u200b\u3068\uff0c\u3044\u308f\u308c\u3066\u3082\u62bd\u8c61\u7684\u3067\u3088\u304f\u308f\u304b\u3089\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\u3082\u3046\u5c11\u3057\u5177\u4f53\u7684\u306a\u8a71\u3092\u3059\u308b\uff0e\n\u500b\u4eba\u304c\u6240\u6709\u3059\u308b\u8a08\u7b97\u6a5f\u3067\uff0c CPU \u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3088\u3046\u3068\u601d\u3063\u305f\u3089\uff0c\u7269\u7406\u7684\u306b\u7b50\u4f53\u3092\u958b\u3051\uff0cCPU\u30bd\u30b1\u30c3\u30c8\u3092\u9732\u51fa\u3055\u305b\uff0c\u65b0\u3057\u3044CPU\u306b\u4ea4\u63db\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3060\u308d\u3046\uff0e\n\u3042\u308b\u3044\u306f\uff0c\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u3089\uff0c\u53e4\u3044\u30c7\u30a3\u30b9\u30af\u3092\u629c\u304d\u53d6\u308a\uff0c\u65b0\u3057\u3044\u30c7\u30a3\u30b9\u30af\u3092\u633f\u5165\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u8a08\u7b97\u6a5f\u306e\u5834\u6240\u3092\u79fb\u52d5\u3055\u305b\u305f\u3068\u304d\u306b\u306f\uff0c\u65b0\u3057\u3044\u90e8\u5c4b\u306e LAN \u30b1\u30fc\u30d6\u30eb\u3092\u5dee\u3057\u8fbc\u307e\u306a\u3044\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u306f\u63a5\u7d9a\u3067\u304d\u306a\u3044\uff0e\n\u30af\u30e9\u30a6\u30c9\u3067\u306f\uff0c\u3053\u308c\u3089\u306e\u64cd\u4f5c\u304c\u30d7\u30ed\u30b0\u30e9\u30e0\u304b\u3089\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u3063\u3066\u5b9f\u884c\u3067\u304d\u308b\uff0e\nCPU\u304c1000\u500b\u6b32\u3057\u3044\u3068\u601d\u3063\u305f\u306a\u3089\u3070\uff0c\u305d\u306e\u3088\u3046\u306b\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308c\u3070\u826f\u3044\uff0e\n\u3059\u308b\u3068\uff0c\u6570\u5206\u3082\u3057\u306a\u3044\u3046\u3061\u306b 1000 CPU\u306e\u8a08\u7b97\u8cc7\u6e90\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\n\u30b9\u30c8\u30ec\u30fc\u30b8\u30921TB\u304b\u308910TB\u306b\u62e1\u5f35\u3057\u3088\u3046\u3068\u601d\u3063\u305f\u306a\u3089\u3070\uff0c\u305d\u306e\u3088\u3046\u306b\u30b3\u30de\u30f3\u30c9\u3092\u9001\u308c\u3070\u3088\u3044 (\u3053\u308c\u306f\uff0cGoogle Drive \u3084 Dropbox \u306a\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306a\u3069\u3067\u99b4\u67d3\u307f\u306e\u3042\u308b\u4eba\u3082\u591a\u3044\u3060\u308d\u3046)\uff0e\n\u8a08\u7b97\u8cc7\u6e90\u3092\u4f7f\u3044\u7d42\u308f\u3063\u305f\u3089\uff0c\u305d\u306e\u3053\u3068\u3092\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u4f1d\u3048\u308c\u3070\uff0c\u5272\u308a\u5f53\u3066\u5206\u306f\u3059\u3050\u3055\u307e\u524a\u9664\u3055\u308c\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306f\uff0c\u4f7f\u3063\u305f\u8a08\u7b97\u8cc7\u6e90\u306e\u91cf\u3092\u6b63\u78ba\u306b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3057\u3066\u304a\u308a\uff0c\u305d\u306e\u91cf\u3092\u3082\u3068\u306b\u5229\u7528\u6599\u91d1\u306e\u8a08\u7b97\u304c\u884c\u308f\u308c\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u672c\u8cea\u306f\u7269\u7406\u7684\u306a\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u306e\u4eee\u60f3\u5316\u30fb\u62bd\u8c61\u5316\u3067\u3042\u308a\uff0c\u5229\u7528\u8005\u306f\u30b3\u30de\u30f3\u30c9\u3092\u901a\u3058\u3066\uff0c\u307e\u308b\u3067\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u4e00\u90e8\u304b\u306e\u3088\u3046\u306b\uff0c\u7269\u7406\u7684\u306a\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u306e\u7ba1\u7406\u30fb\u904b\u7528\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3082\u3061\u308d\u3093\uff0c\u80cc\u5f8c\u3067\u306f\uff0c\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306b\u7f6e\u304b\u308c\u305f\u81a8\u5927\u306a\u6570\u306e\u8a08\u7b97\u6a5f\u304c\u5927\u91cf\u306e\u96fb\u529b\u3092\u6d88\u8cbb\u3057\u306a\u304c\u3089\u7a3c\u50cd\u3057\u3066\u3044\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306f\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u8a08\u7b97\u8cc7\u6e90\u3092\u4e0a\u624b\u306b\u3084\u308a\u304f\u308a\u3057\uff0c\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3068\u3057\u3066\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\uff0c\u3053\u306e\u3088\u3046\u306a\u4eee\u60f3\u5316\u30fb\u62bd\u8c61\u5316\u3092\u9054\u6210\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u8996\u70b9\u304b\u3089\u3059\u308b\u3068\uff0c\u5927\u52e2\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u8a08\u7b97\u6a5f\u3092\u8cb8\u3057\u51fa\u3057\uff0c\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u7a3c\u50cd\u7387\u3092\u5e38\u6642100%\u306b\u8fd1\u3065\u3051\u308b\u3053\u3068\u3067\uff0c\u5229\u76ca\u7387\u306e\u6700\u5927\u5316\u3092\u56f3\u3063\u3066\u3044\u308b\u306e\u3067\u3042\u308b\uff0e\n\u8457\u8005\u306e\u8a00\u8449\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u91cd\u8981\u306a\u7279\u6027\u3092\u5b9a\u7fa9\u3059\u308b\u306a\u3089\u3070\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308b\uff0e\n\n\n\u30af\u30e9\u30a6\u30c9\u3068\u306f\u8a08\u7b97\u6a5f\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u306e\u62bd\u8c61\u5316\u3067\u3042\u308b\uff0e\u3064\u307e\u308a\uff0c\u7269\u7406\u7684\u306a\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u3092\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u4e00\u90e8\u304b\u306e\u3088\u3046\u306b\u81ea\u5728\u306b\u64cd\u4f5c\u30fb\u62e1\u5927\u30fb\u63a5\u7d9a\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u6280\u8853\u3067\u3042\u308b\uff0e\n\n\n\u5148\u8ff0\u306e The NIST Definition of Cloud Computing \u306b\u623b\u308b\u3068\uff0c\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u3088\u308b\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u306e\u5f62\u614b\u3068\u3057\u3066\u306f\uff0c\u6b21\u306e\u4e09\u3064\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b (Figure 2)\uff0e\n\n\n\nSoftware as a Service (SaaS):\n\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u5b9f\u884c\u3055\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u5229\u7528\u8005\u306b\u63d0\u4f9b\u3059\u308b\u5f62\u614b\uff0e\n\u4f8b\u3068\u3057\u3066\uff0c Google Drive \u3084 Slack \u306a\u3069\u304c\u6319\u3052\u3089\u308c\u308b\uff0e\n\u5229\u7528\u8005\u306f\uff0c\u80cc\u5f8c\u306b\u3042\u308b\u30af\u30e9\u30a6\u30c9\u306e\u30a4\u30f3\u30d5\u30e9 (\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3084\u30b5\u30fc\u30d0\u30fc\u306a\u3069) \u306b\u306f\u76f4\u63a5\u89e6\u308c\u305a\uff0c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u3092\u4eab\u53d7\u3059\u308b\uff0e\n\n\nPlatform as a Service (PaaS):\n\u9867\u5ba2\u306e\u4f5c\u6210\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 (\u591a\u304f\u306e\u5834\u5408\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068 API \u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u3092\u884c\u3046\u30b5\u30fc\u30d0\u30fc\u306e\u30b3\u30fc\u30c9\u304b\u3089\u69cb\u6210\u3055\u308c\u308b) \u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u74b0\u5883\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u5229\u7528\u8005\u306b\u63d0\u4f9b\u3059\u308b\u5f62\u614b\uff0e\nPaaS \u3067\u306f\u5229\u7528\u8005\u306f\u30af\u30e9\u30a6\u30c9\u306e\u30a4\u30f3\u30d5\u30e9\u306b\u76f4\u63a5\u89e6\u308c\u308b\u3053\u3068\u306f\u306a\u304f\uff0c\u8a08\u7b97\u8ca0\u8377\u304c\u5897\u6e1b\u3057\u305f\u969b\u306e\u30b5\u30fc\u30d0\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u3088\u3063\u3066\u306a\u3055\u308c\u308b\uff0e\n\u4f8b\u3068\u3057\u3066\u306f\uff0c Google App Engine \u3084 Heroku \u306a\u3069\u304c\u3042\u308b\uff0e\n\n\nInfrastructure as a Service (IaaS):\n\u30af\u30e9\u30a6\u30c9\u4e0a\u306e\u8a08\u7b97\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u30fc\u3092\u5f93\u91cf\u8ab2\u91d1\u5236\u3067\u5229\u7528\u8005\u306b\u63d0\u4f9b\u3059\u308b\u5f62\u614b\uff0e\n\u5229\u7528\u8005\u306f\u5fc5\u8981\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30fb\u30b5\u30fc\u30d0\u30fc\u30fb\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304b\u3089\u501f\u308a\u53d7\u3051\uff0c\u305d\u3053\u306b\u81ea\u8eab\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5c55\u958b\u3057\u904b\u7528\u3059\u308b\uff0e\nIaaS \u306e\u4f8b\u3068\u3057\u3066\u306f AWS EC2 \u306a\u3069\u304c\u6319\u3052\u3089\u308c\u308b\uff0e\n\n\n\n\u672c\u66f8\u304c\u6271\u3046\u306e\u306f\uff0c\u4e3b\u306b IaaS \u306b\u304a\u3051\u308b\u30af\u30e9\u30a6\u30c9\u958b\u767a\u3067\u3042\u308b\uff0e\n\u3059\u306a\u308f\u3061\uff0c\u958b\u767a\u8005\u304c\u30af\u30e9\u30a6\u30c9\u306e\u30a4\u30f3\u30d5\u30e9\u3092\u76f4\u63a5\u64cd\u4f5c\u3057\uff0c\u6240\u671b\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30fb\u30b5\u30fc\u30d0\u30fc\u30fb\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069\u3092\u4e00\u304b\u3089\u69cb\u6210\u3057\uff0c\u305d\u3053\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5c55\u958b\u3059\u308b\u3068\u3044\u3046\u30af\u30e9\u30a6\u30c9\u958b\u767a\u3067\u3042\u308b\uff0e\n\u3053\u306e\u610f\u5473\u306b\u304a\u3044\u3066\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u958b\u767a\u3068\u306f\u30af\u30e9\u30a6\u30c9\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u30fc\u3092\u5b9a\u7fa9\u30fb\u5c55\u958b\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u30b9\u30c6\u30c3\u30d7\u3068\u30a4\u30f3\u30d5\u30e9\u4e0a\u3067\u5b9f\u969b\u306b\u8d70\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u30b9\u30c6\u30c3\u30d7\u306e\u4e8c\u3064\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3053\u306e\u4e8c\u3064\u306f\uff0c\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306e\u6280\u8853\u3068\u3057\u3066\u306f\u3042\u308b\u7a0b\u5ea6\u5206\u696d\u3092\u884c\u3046\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\u304c\uff0c\u6700\u3082\u52b9\u7387\u5316\u30fb\u6700\u9069\u5316\u3055\u308c\u305f\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u306f\u4e21\u65b9\u306e\u7406\u89e3\u304c\u5fc5\u9808\u3067\u3042\u308b\uff0e\n\u672c\u66f8\u3067\u306f\uff0c\u524d\u8005 (\u30af\u30e9\u30a6\u30c9\u30a4\u30f3\u30d5\u30e9\u306e\u8a18\u8ff0) \u306b\u91cd\u304d\u3092\u7f6e\u304d\u3064\u3064\uff0c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30a4\u30e4\u30fc\u306e\u8a71\u984c\u3082\u53d6\u308a\u6271\u3046\uff0e\nPaaS \u3068\u306f\uff0c\u958b\u767a\u8005\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30a4\u30e4\u30fc\u306e\u958b\u767a\u306b\u6ce8\u529b\u3057\uff0c\u30af\u30e9\u30a6\u30c9\u30a4\u30f3\u30d5\u30e9\u306e\u90e8\u5206\u306f\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u4f9d\u5b58\u3059\u308b\u3068\u3044\u3046\u6982\u5ff5\u3067\u3042\u308b\uff0e\nPaaS \u306f\uff0c\u30af\u30e9\u30a6\u30c9\u30a4\u30f3\u30d5\u30e9\u306e\u958b\u767a\u304c\u4e0d\u8981\u306b\u306a\u308b\u3053\u3068\u3067\u958b\u767a\u306e\u6642\u9593\u304c\u77ed\u7e2e\u3055\u308c\u308b\u304c\uff0c\u7d30\u304b\u306a\u30a4\u30f3\u30d5\u30e9\u306e\u6319\u52d5\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u9650\u754c\u304c\u3042\u308b\uff0e\n\u672c\u66f8\u3067\u306f PaaS \u306b\u3064\u3044\u3066\u306f\u3068\u304f\u306b\u53d6\u308a\u6271\u308f\u306a\u3044\uff0e\nSaaS \u306f\u672c\u66f8\u306e\u6587\u8108\u3067\u306f\u958b\u767a\u306b\u3088\u308b\"\u6210\u679c\u7269\"\u3068\u6349\u3048\u3089\u308c\u308b\u3060\u308d\u3046\uff0e\n\u3059\u306a\u308f\u3061\uff0c IaaS \u3092\u69cb\u6210\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3057\u5c55\u958b\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\uff0c\u4e00\u822c\u306e\u4eba\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306a\u30a6\u30a7\u30d6\u4e0a\u306e\u8a08\u7b97\u30b5\u30fc\u30d3\u30b9\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u958b\u767a\u306e\u6700\u7d42\u30b4\u30fc\u30eb\u3067\u3042\u308b\uff0e\n\u672c\u66f8\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\u305d\u306e\u5b9f\u4f8b\u3068\u3057\u3066\uff0c\u30b7\u30f3\u30d7\u30eb\u306a SNS \u306e\u4f5c\u6210 (Section 13) \u306a\u3069\u306e\u6f14\u7fd2\u3092\u63d0\u4f9b\u3059\u308b\uff0e\n\u306a\u304a\uff0c\u6700\u8fd1\u3067\u306f Function as a Service (FaaS) \u3084\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306a\u3069\u3082\u65b0\u305f\u306a\u30af\u30e9\u30a6\u30c9\u306e\u30ab\u30c6\u30b4\u30ea\u3068\u3057\u3066\u8a8d\u77e5\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3089\u306e\u6982\u5ff5\u306b\u3064\u3044\u3066\u306f Section 12 \u306a\u3069\u306e\u7ae0\u3067\u8a73\u3057\u304f\u89e6\u308c\u3066\u3044\u304f\uff0e\n\u672c\u66f8\u3092\u8aad\u307f\u9032\u3081\u308b\u4e2d\u3067\u660e\u3089\u304b\u306b\u306a\u308b\u3088\u3046\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u6280\u8853\u306f\u65e5\u9032\u6708\u6b69\u3067\u3042\u308b\uff0e\n\u672c\u66f8\u3067\u306f\u5b9f\u7528\u7684\u30fb\u6559\u80b2\u7684\u306a\u89b3\u70b9\u304b\u3089\uff0c\u5f93\u6765\u7684\u306a\u30af\u30e9\u30a6\u30c9\u306e\u8a2d\u8a08\u6982\u5ff5\u306b\u89e6\u308c\u305f\u3042\u3068\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306a\u3069\u306e\u6700\u65b0\u306e\u6280\u8853\u3082\u7db2\u7f85\u3059\u308b\u306e\u3067\uff0c\u697d\u3057\u307f\u306b\u3057\u306a\u304c\u3089\u8aad\u307f\u9032\u3081\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u6700\u5f8c\u306b\uff0cThe NIST Definition of Cloud Computing \u306b\u3088\u308b\u3068\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u904b\u7528\u5f62\u614b\u306b\u3064\u3044\u3066\u6b21\u306e\u3088\u3046\u306a\u5b9a\u7fa9\u304c\u306a\u3055\u308c\u3066\u3044\u308b (Figure 2)\uff0e\n\u7279\u5b9a\u306e\u7d44\u7e54\u30fb\u56e3\u4f53\u30fb\u4f01\u696d\u306e\u5185\u90e8\u306e\u307f\u3067\u4f7f\u7528\u3055\u308c\u308b\u30af\u30e9\u30a6\u30c9\u3092\uff0c\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30af\u30e9\u30a6\u30c9 (private cloud) \u3068\u3088\u3076\uff0e\n\u4f8b\u3048\u3070\uff0c\u5927\u5b66\u3084\u7814\u7a76\u6a5f\u95a2\u3067\u306f\uff0c\u305d\u306e\u6a5f\u95a2\u306e\u69cb\u6210\u54e1\u5411\u3051\u306e\u5927\u898f\u6a21\u8a08\u7b97\u6a5f\u30b5\u30fc\u30d0\u30fc\u304c\u904b\u7528\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u591a\u3044\uff0e\n\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30af\u30e9\u30a6\u30c9\u306f\uff0c\u7d44\u7e54\u306e\u69cb\u6210\u54e1\u306a\u3089\u3070\u7121\u6599\u3082\u3057\u304f\u306f\u6975\u3081\u3066\u5272\u5b89\u306e\u30b3\u30b9\u30c8\u3067\u8a08\u7b97\u3092\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\u3057\u304b\u3057\uff0c\u4f7f\u7528\u3067\u304d\u308b\u8a08\u7b97\u8cc7\u6e90\u306e\u4e0a\u9650\u306f\u9650\u3089\u308c\u308b\u5834\u5408\u304c\u591a\u304f\uff0c\u62e1\u5f35\u6642\u306e\u67d4\u8edf\u6027\u306b\u6b20\u3051\u308b\u5834\u5408\u3082\u3042\u308b\uff0e\n\u4e00\u65b9\uff0c\u5546\u7528\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u4e00\u822c\u306e\u9867\u5ba2\u306b\u5411\u3051\u305f\u30af\u30e9\u30a6\u30c9\u306e\u3053\u3068\u3092\uff0c\u30d1\u30d6\u30ea\u30c3\u30af\u30af\u30e9\u30a6\u30c9 (public cloud) \u3068\u3088\u3076\uff0e\n\u6709\u540d\u306a\u30d1\u30d6\u30ea\u30c3\u30af\u30af\u30e9\u30a6\u30c9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4f8b\u3092\u6319\u3052\u308b\u3068\uff0c Google\u793e\u304c\u63d0\u4f9b\u3059\u308b Google Cloud Platform (GCP)\uff0c Microsoft \u793e\u304c\u63d0\u4f9b\u3059\u308b Azure\uff0c Amazon \u793e\u304c\u63d0\u4f9b\u3059\u308b Amazon Web Services (AWS) \u306a\u3069\u304c\u3042\u308b\uff0e\n\u30d1\u30d6\u30ea\u30c3\u30af\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u5834\u5408\u306f\uff0c\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u8a2d\u5b9a\u3057\u305f\u5229\u7528\u6599\u91d1\u3092\u652f\u6255\u3046\u3053\u3068\u306b\u306a\u308b\uff0e\n\u305d\u306e\u5206\uff0c\u5de8\u5927\u306a\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3092\u904b\u7528\u3059\u308b\u4f01\u696d\u306e\u8a08\u7b97\u8cc7\u6e90\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\uff0c\u8a08\u7b97\u306e\u30ad\u30e3\u30d1\u30b7\u30c6\u30a3\u306f\u7121\u5c3d\u8535\u306b\u3042\u308b\u3068\u3044\u3063\u3066\u904e\u8a00\u3067\u306a\u3044\uff0e\n\u7b2c\u4e09\u306e\u30af\u30e9\u30a6\u30c9\u306e\u904b\u7528\u5f62\u614b\u3068\u3057\u3066\uff0c\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30af\u30e9\u30a6\u30c9 (community cloud) \u304c\u6319\u3052\u3089\u308c\u308b\uff0e\n\u3053\u308c\u306f\uff0c\u4f8b\u3048\u3070\u653f\u5e9c\u306e\u7701\u5e81\u30fb\u6a5f\u95a2\u306a\u3069\u76ee\u7684\u30fb\u5f79\u5272\u3092\u5171\u6709\u3059\u308b\u56e3\u4f53\u30fb\u7d44\u7e54\u304c\u5171\u6709\u3057\u3066\u904b\u7528\u3059\u308b\u30af\u30e9\u30a6\u30c9\u3092\u6307\u3059\uff0e\n\u6700\u5f8c\u306b\uff0c\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u30af\u30e9\u30a6\u30c9 (hybrid cloud) \u3068\u3044\u3046\u5f62\u614b\u3082\u3042\u308a\uff0c\u3053\u308c\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30fb\u30d1\u30d6\u30ea\u30c3\u30af\u30fb\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30af\u30e9\u30a6\u30c9\u306e\u4e8c\u3064\u4ee5\u4e0a\u306e\u7d44\u307f\u5408\u308f\u305b\u306b\u3088\u3063\u3066\u69cb\u6210\u3055\u308c\u308b\u30af\u30e9\u30a6\u30c9\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u30c7\u30fc\u30bf\u4fdd\u8b77\u306e\u89b3\u70b9\u304b\u3089\uff0c\u3044\u304f\u3064\u304b\u306e\u6a5f\u5bc6\u30c7\u30fc\u30bf\u3084\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u306b\u95a2\u308f\u308b\u60c5\u5831\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30af\u30e9\u30a6\u30c9\u306b\u4fdd\u6301\u3057\uff0c\u6b8b\u308a\u306e\u30b7\u30b9\u30c6\u30e0\u3092\u30d1\u30d6\u30ea\u30c3\u30af\u30af\u30e9\u30a6\u30c9\u306b\u4f9d\u5b58\u3059\u308b\uff0c\u306a\u3069\u306e\u5f62\u614b\u304c\u60f3\u5b9a\u3055\u308c\u308b\uff0e\n\u672c\u66f8\u3067\u8aac\u660e\u3059\u308b\u306e\u306f\uff0c\u57fa\u672c\u7684\u306b\u30d1\u30d6\u30ea\u30c3\u30af\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3063\u305f\u30af\u30e9\u30a6\u30c9\u958b\u767a\u3067\u3042\u308b\uff0e\n\u7279\u306b\uff0cAmazon Web Services (AWS) \u3092\u4f7f\u7528\u3057\u3066\uff0c\u5177\u4f53\u7684\u306a\u6280\u8853\u3068\u6982\u5ff5\u3092\u5b66\u3093\u3067\u3044\u304f\uff0e\n\u4e00\u65b9\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3084\u4eee\u60f3\u8a08\u7b97\u74b0\u5883\u306a\u3069\u306e\u30c6\u30af\u30cb\u30c3\u30af\u306f\u3059\u3079\u3066\u306e\u30af\u30e9\u30a6\u30c9\u306b\u5171\u901a\u306a\u6982\u5ff5\u3067\u3042\u308b\u306e\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u304c\u5909\u308f\u308d\u3046\u3068\u4e00\u822c\u306b\u901a\u7528\u3059\u308b\u77e5\u8b58\u3082\u540c\u6642\u306b\u8eab\u306b\u3064\u304f\u306f\u305a\u3060\uff0e\n\n\n2.2. \u306a\u305c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u306e\u304b\uff1f\n\u4e0a\u8ff0\u306e\u3088\u3046\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u3068\u306f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u901a\u3058\u3066\u81ea\u7531\u306b\u8a08\u7b97\u8cc7\u6e90\u3092\u64cd\u4f5c\u3059\u308b\u3053\u3068\u306e\u3067\u304d\u308b\u8a08\u7b97\u74b0\u5883\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30ea\u30a2\u30eb\u306a\u30ed\u30fc\u30ab\u30eb\u8a08\u7b97\u74b0\u5883\u3068\u6bd4\u3079\u3066\uff0c\u306a\u305c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u3068\u826f\u3044\u3053\u3068\u304c\u3042\u308b\u306e\u304b\u306b\u3064\u3044\u3066\u8ff0\u3079\u305f\u3044\uff0e\n\n\n\n\u81ea\u7531\u306b\u30b5\u30fc\u30d0\u30fc\u306e\u30b5\u30a4\u30ba\u3092\u30b9\u30b1\u30fc\u30eb\u3067\u304d\u308b\n\u306a\u306b\u304b\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u59cb\u3081\u308b\u3068\u304d\uff0c\u3042\u3089\u304b\u3058\u3081\u5fc5\u8981\u306a\u30b5\u30fc\u30d0\u30fc\u306e\u30b9\u30da\u30c3\u30af\u3092\u77e5\u308b\u306e\u306f\u96e3\u3057\u3044\uff0e\n\u3044\u304d\u306a\u308a\u5927\u304d\u306a\u30b5\u30fc\u30d0\u30fc\u3092\u8cb7\u3046\u306e\u306f\u30ea\u30b9\u30af\u304c\u9ad8\u3044\uff0e\n\u4e00\u65b9\u3067\uff0c\u5c0f\u3055\u3059\u304e\u308b\u30b5\u30fc\u30d0\u30fc\u3067\u306f\uff0c\u5f8c\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u9762\u5012\u3067\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308c\u3070\uff0c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9032\u3081\u306a\u304c\u3089\uff0c\u5fc5\u8981\u306a\u5206\u3060\u3051\u306e\u8a08\u7b97\u8cc7\u6e90\u3092\u78ba\u4fdd\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\u81ea\u5206\u3067\u30b5\u30fc\u30d0\u30fc\u3092\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\n\u60b2\u3057\u3044\u3053\u3068\u306b\uff0c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3068\u306f\u53e4\u304f\u306a\u308b\u3082\u306e\u3067\u3042\u308b\uff0e\u6700\u8fd1\u306e\u6280\u8853\u306e\u9032\u6b69\u306e\u901f\u5ea6\u304b\u3089\u3059\u308b\u3068\uff0c5\u5e74\u3082\u7d4c\u3066\u3070\uff0c\u3082\u306f\u3084\u5f53\u6642\u306e\u6700\u65b0\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3082\u5316\u77f3\u3068\u540c\u3058\u3067\u3042\u308b\uff0e\n5\u5e74\u3054\u3068\u306b\u30b5\u30fc\u30d0\u30fc\u3092\u5165\u308c\u66ff\u3048\u308b\u306e\u306f\u76f8\u5f53\u306a\u624b\u9593\u3067\u3042\u308b\uff0e\n\u307e\u305f\u30b5\u30fc\u30d0\u30fc\u306e\u505c\u96fb\u3084\u6545\u969c\u306a\u3069\u4e0d\u610f\u306e\u969c\u5bb3\u3078\u306e\u5bfe\u5fdc\u3082\u5fc5\u8981\u3067\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u3067\u306f\uff0c\u305d\u306e\u3088\u3046\u306a\u30a4\u30f3\u30d5\u30e9\u306e\u6574\u5099\u3084\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306f\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u81ea\u52d5\u3067\u3084\u3063\u3066\u304f\u308c\u308b\u306e\u3067\uff0c\u30e6\u30fc\u30b6\u30fc\u304c\u5fc3\u914d\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\uff0e\n\n\n\u521d\u671f\u30b3\u30b9\u30c80\n\u81ea\u524d\u306e\u8a08\u7b97\u74b0\u5883\u3068\u30af\u30e9\u30a6\u30c9\u306e\uff0c\u7d4c\u6e08\u7684\u306a\u30b3\u30b9\u30c8\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u793a\u3057\u305f\u306e\u304c Figure 3 \u3067\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u5834\u5408\u306e\u521d\u671f\u30b3\u30b9\u30c8\u306f\u57fa\u672c\u7684\u306b0\u3067\u3042\u308b\uff0e\n\u305d\u306e\u5f8c\uff0c\u4f7f\u3063\u305f\u5229\u7528\u91cf\u306b\u5fdc\u3058\u3066\u30b3\u30b9\u30c8\u304c\u5897\u5927\u3057\u3066\u3044\u304f\uff0e\n\u4e00\u65b9\uff0c\u81ea\u524d\u306e\u8a08\u7b97\u74b0\u5883\u3067\u306f\uff0c\u5927\u304d\u306a\u521d\u671f\u30b3\u30b9\u30c8\u304c\u751f\u3058\u308b\uff0e\n\u305d\u306e\u5206\uff0c\u521d\u671f\u6295\u8cc7\u5f8c\u306e\u30b3\u30b9\u30c8\u306e\u5897\u52a0\u306f\uff0c\u96fb\u6c17\u5229\u7528\u6599\u3084\u30b5\u30fc\u30d0\u30fc\u7dad\u6301\u8cbb\u306a\u3069\u306b\u7559\u307e\u308b\u305f\u3081\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3057\u305f\u5834\u5408\u3088\u308a\u3082\u50be\u304d\u306f\u5c0f\u3055\u304f\u306a\u308b\uff0e\n\u81ea\u524d\u306e\u8a08\u7b97\u6a5f\u3067\u306f\uff0c\u3042\u308b\u4e00\u5b9a\u671f\u9593\u5f8c\uff0c\u30b5\u30fc\u30d0\u30fc\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u306a\u3069\u306b\u3088\u308b\u652f\u51fa\u304c\u751f\u3058\u308b\u3053\u3068\u304c\u3042\u308b\uff0e\n\u4e00\u65b9\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u5834\u5408\u306f\uff0c\u305d\u306e\u3088\u3046\u306a\u975e\u9023\u7d9a\u306a\u30b3\u30b9\u30c8\u306e\u5897\u5927\u306f\u57fa\u672c\u7684\u306b\u751f\u3058\u306a\u3044\uff0e\n\u30af\u30e9\u30a6\u30c9\u306e\u30b3\u30b9\u30c8\u306e\u30ab\u30fc\u30d6\u304c\uff0c\u81ea\u524d\u8a08\u7b97\u74b0\u5883\u306e\u30b3\u30b9\u30c8\u306e\u30ab\u30fc\u30d6\u306e\u4e0b\u306b\u3042\u308b\u7bc4\u56f2\u306b\u304a\u3044\u3066\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u3053\u3068\u306f\u7d4c\u6e08\u7684\u306a\u30b3\u30b9\u30c8\u524a\u6e1b\u306b\u3064\u306a\u304c\u308b\uff0e\n\n\n\nFigure 3. \u30af\u30e9\u30a6\u30c9\u3068\u81ea\u524d\u8a08\u7b97\u6a5f\u74b0\u5883\u306e\u7d4c\u6e08\u7684\u30b3\u30b9\u30c8\u306e\u6bd4\u8f03\n\n\n\n\n\u3068\u304f\u306b\uff0c1.\u306e\u70b9\u306f\u7814\u7a76\u306e\u5834\u9762\u3067\u306f\u91cd\u8981\u3067\u3042\u308b\u3068\u7b46\u8005\u306f\u611f\u3058\u308b\uff0e\n\u7814\u7a76\u3092\u3084\u3063\u3066\u3044\u3066\uff0c\u56db\u516d\u6642\u4e2d\u8a08\u7b97\u3092\u8d70\u3089\u305b\u7d9a\u3051\u308b\u3068\u3044\u3046\u5834\u5408\u306f\u5c11\u306a\u3044\uff0e\n\u3080\u3057\u308d\uff0c\u65b0\u3057\u3044\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u5b8c\u6210\u3057\u305f\u3068\u304d\u30fb\u65b0\u3057\u3044\u30c7\u30fc\u30bf\u304c\u5c4a\u3044\u305f\u3068\u304d\uff0c\u96c6\u4e2d\u7684\u30fb\u7a81\u767a\u7684\u306b\u8a08\u7b97\u30bf\u30b9\u30af\u304c\u5897\u5927\u3059\u308b\u3053\u3068\u304c\u591a\u3044\u3060\u308d\u3046\uff0e\n\u305d\u3046\u3044\u3063\u305f\u3068\u304d\u306b\uff0c\u30d5\u30ec\u30ad\u30b7\u30d6\u30eb\u306b\u8a08\u7b97\u529b\u3092\u5897\u5f37\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u5927\u304d\u306a\u30e1\u30ea\u30c3\u30c8\u3067\u3042\u308b\uff0e\n\u3053\u3053\u307e\u3067\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u30e1\u30ea\u30c3\u30c8\u3092\u8ff0\u3079\u305f\u304c\uff0c\u9006\u306b\uff0c\u30c7\u30e1\u30ea\u30c3\u30c8\u3068\u3044\u3046\u306e\u3082\u5f53\u7136\u5b58\u5728\u3059\u308b\uff0e\n\n\n\n\u30af\u30e9\u30a6\u30c9\u306f\u8ce2\u304f\u4f7f\u308f\u306a\u3044\u3068\u3044\u3051\u306a\u3044\nFigure 3 \u3067\u793a\u3057\u305f\u30b3\u30b9\u30c8\u306e\u30ab\u30fc\u30d6\u306b\u3042\u308b\u3068\u304a\u308a\uff0c\u4f7f\u3044\u65b9\u306b\u3088\u3063\u3066\u306f\u81ea\u524d\u306e\u8a08\u7b97\u74b0\u5883\u306e\u307b\u3046\u304c\u30b3\u30b9\u30c8\u7684\u306b\u6709\u5229\u306a\u5834\u9762\u306f\u5b58\u5728\u3057\u3046\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u969b\u306f\uff0c\u4f7f\u3044\u7d42\u308f\u3063\u305f\u8a08\u7b97\u8cc7\u6e90\u306f\u3059\u3050\u306b\u524a\u9664\u3059\u308b\u306a\u3069\uff0c\u5229\u7528\u8005\u304c\u8ce2\u304f\u7ba1\u7406\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\uff0c\u3053\u308c\u3092\u6020\u308b\u3068\u601d\u3044\u3082\u3057\u306a\u3044\u984d\u306e\u8acb\u6c42\u304c\u5c4a\u304f\u53ef\u80fd\u6027\u304c\u3042\u308b\uff0e\n\n\n\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\n\u30af\u30e9\u30a6\u30c9\u306f\uff0c\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3092\u901a\u3058\u3066\u4e16\u754c\u306e\u3069\u3053\u304b\u3089\u3067\u3082\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u72b6\u614b\u306b\u3042\u308a\uff0c\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7ba1\u7406\u3092\u6020\u308b\u3068\u7c21\u5358\u306b\u30cf\u30c3\u30ad\u30f3\u30b0\u306e\u5bfe\u8c61\u3068\u306a\u308a\u3046\u308b\uff0e\n\u30cf\u30c3\u30ad\u30f3\u30b0\u3092\u53d7\u3051\u308b\u3068\uff0c\u60c5\u5831\u6d41\u51fa\u3060\u3051\u3067\u306a\u304f\uff0c\u7d4c\u6e08\u7684\u306a\u640d\u5931\u3092\u88ab\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\uff0e\n\n\n\u30e9\u30fc\u30cb\u30f3\u30b0\u30ab\u30fc\u30d6\n\u4e0a\u8a18\u306e\u3088\u3046\u306b\uff0c\u30b3\u30b9\u30c8\u30fb\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306a\u3069\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u969b\u306b\u7559\u610f\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u70b9\u306f\u591a\u3044\uff0e\n\u8ce2\u304f\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u306b\u306f\uff0c\u5341\u5206\u306a\u30af\u30e9\u30a6\u30c9\u306e\u7406\u89e3\u304c\u5fc5\u8981\u3067\u3042\u308a\uff0c\u305d\u306e\u30e9\u30fc\u30cb\u30f3\u30b0\u30ab\u30fc\u30d6\u3092\u4e57\u308a\u8d8a\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\n3. AWS\u5165\u9580\n\n\n3.1. AWS\u3068\u306f\uff1f\n\u672c\u66f8\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u5b9f\u8df5\u3092\u884c\u3046\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3068\u3057\u3066\uff0c AWS \u3092\u7528\u3044\u308b\uff0e\n\u5b9f\u8df5\u306b\u3042\u305f\u3063\u3066\uff0c\u6700\u4f4e\u9650\u5fc5\u8981\u306a AWS \u306e\u77e5\u8b58\u3092\u672c\u7ae0\u3067\u306f\u89e3\u8aac\u3057\u3088\u3046\uff0e\nAWS (Amazon Web Services) \u306fAmazon\u793e\u304c\u63d0\u4f9b\u3059\u308b\u7dcf\u5408\u7684\u306a\u30af\u30e9\u30a6\u30c9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3042\u308b\uff0e\nAWS \u306f Amazon \u793e\u304c\u6301\u3064\u81a8\u5927\u306a\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u3092\u8cb8\u3057\u51fa\u3059\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\uff0c2006\u5e74\u306b\u8a95\u751f\u3057\u305f\uff0e\n2021\u5e74\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u3057\u3066\u6700\u5927\u306e\u30de\u30fc\u30b1\u30c3\u30c8\u30b7\u30a7\u30a2 (\u7d0432%) \u3092\u4fdd\u6301\u3057\u3066\u3044\u308b\n(\u53c2\u7167)\uff0e\nNetflix \u3084 Slack \u3092\u306f\u3058\u3081\u3068\u3057\u305f\u591a\u304f\u306e\u30a6\u30a7\u30d6\u95a2\u9023\u306e\u30b5\u30fc\u30d3\u30b9\u3067\uff0c\u4e00\u90e8\u307e\u305f\u306f\u5168\u3066\u306e\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u304c AWS \u304b\u3089\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u3068\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u3088\u3063\u3066\uff0c\u77e5\u3089\u306a\u3044\u3046\u3061\u306b AWS \u306e\u6069\u6075\u306b\u3042\u305a\u304b\u3063\u3066\u3044\u308b\u4eba\u3082\u5c11\u306a\u304f\u306a\u3044\u306f\u305a\u3060\uff0e\n\u6700\u5927\u306e\u30b7\u30a7\u30a2\u3092\u3082\u3064\u3060\u3051\u306b\uff0c\u6a5f\u80fd\u30fb\u30b5\u30fc\u30d3\u30b9\u306e\u5e45\u5e83\u3055\u306f\u307b\u304b\u306e\u30af\u30e9\u30a6\u30c9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3068\u6bd4\u3079\u629c\u304d\u3093\u3067\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u5229\u7528\u8005\u6570\u304c\u591a\u3044\u3053\u3068\u3092\u53cd\u6620\u3057\u3066\uff0c\u516c\u5f0f\u3042\u308b\u3044\u306f\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u306b\u3088\u308b\u6280\u8853\u7d39\u4ecb\u8a18\u4e8b\u304c\u6570\u591a\u304f\u30a6\u30a7\u30d6\u4e0a\u306b\u5b58\u5728\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u306a\u304f\uff0c\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30e6\u30fc\u30b6\u30fc\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3082\u5927\u304d\u304f\u554f\u984c\u89e3\u6c7a\u304c\u6357\u308b\u306e\u3082\u9b45\u529b\u306e\u4e00\u3064\u3060\uff0e\n\u521d\u671f\u306e\u3053\u308d\u30a6\u30a7\u30d6\u30d3\u30b8\u30cd\u30b9\u3092\u884c\u3046\u4f01\u696d\u304c\u30e6\u30fc\u30b6\u30fc\u306e\u5927\u534a\u3092\u5360\u3081\u3066\u3044\u305f\u304c\uff0c\u6700\u8fd1\u306f\u5927\u5b66\u306a\u3069\u3067\u306e\u79d1\u5b66\u7814\u7a76\u7528\u9014\u3068\u3057\u3066\u3082\u983b\u7e41\u306b\u7528\u3044\u3089\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u3066\u3044\u308b\uff0e\n\n\n3.2. AWS\u306e\u6a5f\u80fd\u30fb\u30b5\u30fc\u30d3\u30b9\nFigure 4 \u306f\uff0c\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3044\u3066AWS\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u4e3b\u8981\u306a\u6a5f\u80fd\u30fb\u30b5\u30fc\u30d3\u30b9\u306e\u4e00\u89a7\u3067\u3042\u308b\uff0e\n\n\n\nFigure 4. AWS\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u4e3b\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u4e00\u89a7\n\n\u8a08\u7b97\uff0c\u30b9\u30c8\u30ec\u30fc\u30b8\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\uff0c\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\uff0c\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306a\u3069\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u69cb\u7bc9\u306b\u5fc5\u8981\u306a\u69d8\u3005\u306a\u8981\u7d20\u304c\u72ec\u7acb\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u3057\u3066\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u57fa\u672c\u7684\u306b\uff0c\u3053\u308c\u3089\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u4e00\u3064\u306e\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u304c\u3067\u304d\u3042\u304c\u308b\uff0e\n\u307e\u305f\uff0c\u6a5f\u68b0\u5b66\u7fd2\u30fb\u97f3\u58f0\u8a8d\u8b58\u30fbAR/VR \u306a\u3069\uff0c\u7279\u5b9a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u6e08\u307f\u306e\u30b5\u30fc\u30d3\u30b9\u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3089\u3092\u5408\u8a08\u3059\u308b\u3068\u5168\u90e8\u3067170\u500b\u4ee5\u4e0a\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u3068\u306e\u3053\u3068\u3067\u3042\u308b (\u53c2\u7167)\uff0e\nAWS \u306e\u521d\u5fc3\u8005\u304c\u9665\u308a\u304c\u3061\u306a\u306e\u306f\uff0c\u5927\u91cf\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u6570\u306b\u5727\u5012\u3055\u308c\uff0c\u3069\u3053\u304b\u3089\u624b\u3092\u3064\u3051\u305f\u3089\u3088\u3044\u306e\u304b\u308f\u304b\u3089\u306a\u304f\u306a\u308b\uff0c\u3068\u3044\u3046\u72b6\u6cc1\u3067\u3042\u308b\uff0e\n\u305f\u304f\u3055\u3093\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u4e2d\u304b\u3089\uff0c\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u3069\u306e\u9806\u756a\u3067\u5b66\u3093\u3067\u3044\u3063\u305f\u3089\u3044\u3044\u306e\u304b\uff0c\u305d\u306e\u9053\u7b4b\u3059\u3089\u660e\u3089\u304b\u3067\u306a\u304f\uff0c\u5927\u304d\u306a\u53c2\u5165\u969c\u58c1\u3068\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u306f\u9593\u9055\u3044\u306a\u3044\uff0e\n\u3060\u304c\u5b9f\u306e\u3068\u3053\u308d\uff0c AWS \u306e\u57fa\u672c\u7684\u306a\u69cb\u6210\u8981\u7d20\u306f\u305d\u306e\u3046\u3061\u306e\u6570\u500b\u306e\u307f\u306b\u9650\u3089\u308c\u308b\uff0e\n\u57fa\u672c\u8981\u7d20\u3068\u306a\u308b\u6a5f\u80fd\u306e\u4f7f\u3044\u65b9\u3092\u77e5\u308c\u3070\uff0c AWS \u306e\u304a\u304a\u3088\u305d\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u3044\u3053\u306a\u3059\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b\uff0e\n\u307b\u304b\u306e\u6a5f\u80fd\u306e\u591a\u304f\u306f\uff0c\u57fa\u672c\u306e\u8981\u7d20\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u7279\u5b9a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u7279\u5316\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066 AWS \u304c\u7528\u610f\u3057\u305f\u3082\u306e\u3067\u3042\u308b\uff0e\n\u305d\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u8a8d\u77e5\u3059\u308b\u3053\u3068\u304c\uff0c AWS \u306e\u5b66\u7fd2\u306e\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c AWS \u4e0a\u3067\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u3068\u304d\u306e\u57fa\u672c\u3068\u306a\u308b\u69cb\u6210\u8981\u7d20\u3092\u5217\u6319\u3059\u308b\uff0e\n\u3053\u308c\u3089\u306f\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u5b9f\u969b\u306b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u304d\u306a\u304c\u3089\u4f53\u9a13\u3059\u308b\uff0e\n\u73fe\u6642\u70b9\u3067\u306f\uff0c\u540d\u524d\u3060\u3051\u3067\u3082\u982d\u306e\u7247\u9685\u306b\u8a18\u61b6\u3057\u3066\u3082\u3089\u3048\u308c\u3070\u3088\u3044\uff0e\n\n3.2.1. \u8a08\u7b97\n\nEC2 (Elastic Compute Cloud)\n\u69d8\u3005\u306a\u30b9\u30da\u30c3\u30af\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u3092\u4f5c\u6210\u3057\uff0c\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u306e\u6700\u3082\u57fa\u672c\u3068\u306a\u308b\u69cb\u6210\u8981\u7d20\u3067\u3042\u308b\uff0e\nSection 4, Section 6, Section 9 \u3067\u8a73\u3057\u304f\u89e6\u308c\u308b\uff0e\n\nLambda\nFunction as a Service (FaaS) \u3068\u3088\u3070\u308c\u308b\uff0c\u5c0f\u3055\u306a\u8a08\u7b97\u3092\u30b5\u30fc\u30d0\u30fc\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u30b5\u30fc\u30d3\u30b9\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7ae0 (Section 11) \u3067\u8a73\u3057\u304f\u89e3\u8aac\u3059\u308b\uff0e\n\n\n3.2.2. \u30b9\u30c8\u30ec\u30fc\u30b8\n\nEBS (Elastic Block Store)\nEC2\u306b\u4ed8\u4e0e\u3059\u308b\u3053\u3068\u306e\u3067\u304d\u308b\u4eee\u60f3\u30c7\u30fc\u30bf\u30c9\u30e9\u30a4\u30d6\uff0e\n\u3044\u308f\u3086\u308b\"\u666e\u901a\u306e\"(\u4e00\u822c\u7684\u306aOS\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b)\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u601d\u3044\u6d6e\u304b\u3079\u3066\u304f\u308c\u305f\u3089\u3088\u3044\uff0e\n\nS3 (Simple Storage Service)\nObject Storage \u3068\u3088\u3070\u308c\u308b\uff0cAPI\u3092\u4f7f\u3063\u3066\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\u3092\u884c\u3046\uff0c\u3044\u3046\u306a\u308c\u3070\u201d\u30af\u30e9\u30a6\u30c9\u30fb\u30cd\u30a4\u30c6\u30a3\u30d6\u201d\u306a\u30c7\u30fc\u30bf\u306e\u683c\u7d0d\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7ae0 (Section 11) \u3067\u8a73\u3057\u304f\u89e3\u8aac\u3059\u308b\uff0e\n\n\n3.2.3. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\n\nDynamoDB\nNoSQL \u578b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9 (\u77e5\u3063\u3066\u3044\u308b\u4eba\u306f mongoDB \u306a\u3069\u3092\u601d\u3044\u6d6e\u304b\u3079\u305f\u3089\u3088\u3044)\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7ae0 (Section 11) \u3067\u8a73\u3057\u304f\u89e3\u8aac\u3059\u308b\uff0e\n\n\n3.2.4. \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\n\nVPC(Virtual Private Cloud)\nAWS \u4e0a\u306b\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u74b0\u5883\u3092\u4f5c\u6210\u3057\uff0c\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u9593\u306e\u63a5\u7d9a\u3092\u5b9a\u7fa9\u3057\u305f\u308a\uff0c\u5916\u90e8\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u306a\u3069\u3092\u7ba1\u7406\u3059\u308b\uff0e\nEC2 \u306f VPC \u306e\u5185\u90e8\u306b\u914d\u7f6e\u3055\u308c\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\nAPI Gateway\n\nAPI \u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3068\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u30b5\u30fc\u30d3\u30b9 (Lambda \u306a\u3069) \u3092\u63a5\u7d9a\u3059\u308b\u969b\u306b\u7528\u3044\u308b\uff0c\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3068\u3057\u3066\u306e\u5f79\u5272\u3092\u62c5\u3046\uff0e\nSection 13 \u3067\u8a73\u3057\u304f\u89e3\u8aac\u3059\u308b\uff0e\n\n\n\n3.3. Region \u3068 Availability Zone\nAWS \u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u77e5\u3063\u3066\u304a\u304b\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u91cd\u8981\u306a\u6982\u5ff5\u3068\u3057\u3066\uff0c \u30ea\u30fc\u30b8\u30e7\u30f3 (Region) \u3068 Availability Zone (AZ) \u304c\u3042\u308b (Figure 5)\uff0e\n\u4ee5\u4e0b\u3067\u306f\u3053\u306e\u6982\u5ff5\u306b\u3064\u3044\u3066\u7c21\u5358\u306b\u8a18\u8ff0\u3059\u308b\uff0e\n\n\n\nFigure 5. AWS\u306b\u304a\u3051\u308b Region \u3068 Availability Zones\n\n\u30ea\u30fc\u30b8\u30e7\u30f3 (Region) \u3068\u306f\uff0c\u304a\u304a\u307e\u304b\u306b\u8a00\u3046\u3068\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u6240\u5728\u5730\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3044\u3066\uff0c AWS \u306f\u4e16\u754c\u306e25\u306e\u56fd\u3068\u5730\u57df\u3067\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3092\u6240\u6709\u3057\u3066\u3044\u308b\uff0e\nFigure 6 \u306f\u57f7\u7b46\u6642\u70b9\u3067\u5229\u7528\u3067\u304d\u308b\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u4e16\u754c\u5730\u56f3\u3092\u793a\u3057\u3066\u3044\u308b\uff0e\n\u65e5\u672c\u3067\u306f\u6771\u4eac\u3068\u5927\u962a\u306b\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u304c\u3042\u308b\uff0e\n\u5404\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u306f\u56fa\u6709\u306e ID \u304c\u3064\u3044\u3066\u304a\u308a\uff0c\u4f8b\u3048\u3070\u6771\u4eac\u306f ap-northeast-1, \u7c73\u56fd\u30aa\u30cf\u30a4\u30aa\u5dde\u306f us-east-2\uff0c\u306a\u3069\u3068\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\uff0e\n\n\n\n\n\nAWS\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3068\uff0c\u753b\u9762\u53f3\u4e0a\u306e\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u3067\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b(Figure 7, \u8d64\u4e38\u3067\u56f2\u3063\u305f\u7b87\u6240)\uff0e\nEC2, S3 \u306a\u3069\u306eAWS\u306e\u30ea\u30bd\u30fc\u30b9\u306f\uff0c\u30ea\u30fc\u30b8\u30e7\u30f3\u3054\u3068\u306b\u5b8c\u5168\u306b\u72ec\u7acb\u3067\u3042\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u30ea\u30bd\u30fc\u30b9\u3092\u65b0\u305f\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u969b\uff0c\u3042\u308b\u3044\u306f\u30c7\u30d7\u30ed\u30a4\u6e08\u307f\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u95b2\u89a7\u3059\u308b\u969b\u306f\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\uff0c\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u30a6\u30a7\u30d6\u30d3\u30b8\u30cd\u30b9\u3092\u5c55\u958b\u3059\u308b\u5834\u5408\u306a\u3069\u306f\uff0c\u4e16\u754c\u306e\u5404\u5730\u306b\u30af\u30e9\u30a6\u30c9\u3092\u5c55\u958b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304c\uff0c\u500b\u4eba\u7684\u306a\u7814\u7a76\u7528\u9014\u3068\u3057\u3066\u7528\u3044\u308b\u5834\u5408\u306f\uff0c\u6700\u5bc4\u308a\u306e\u30ea\u30fc\u30b8\u30e7\u30f3 (i.e. \u6771\u4eac) \u3092\u4f7f\u3048\u3070\u57fa\u672c\u7684\u306b\u554f\u984c\u306a\u3044\uff0e\n\n\n\nFigure 7. AWS\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u9078\u629e\n\nAvaialibity Zone (AZ) \u3068\u306f\uff0c\u30ea\u30fc\u30b8\u30e7\u30f3\u5185\u3067\u5730\u7406\u7684\u306b\u9694\u96e2\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u305d\u308c\u305e\u308c\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u306f2\u500b\u4ee5\u4e0a\u306eAZ\u3092\u6709\u3057\u3066\u304a\u308a\uff0c\u3082\u3057\u4e00\u3064\u306eAZ\u3067\u706b\u707d\u3084\u505c\u96fb\u306a\u3069\u304c\u8d77\u304d\u305f\u5834\u5408\u3067\u3082\uff0c\u307b\u304b\u306eAZ\u304c\u305d\u306e\u969c\u5bb3\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u307e\u305f\uff0c AZ \u9593\u306f\u9ad8\u901f\u306a AWS \u5c02\u7528\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u56de\u7dda\u3067\u7d50\u3070\u308c\u3066\u3044\u308b\u305f\u3081\uff0c AZ \u9593\u306e\u30c7\u30fc\u30bf\u8ee2\u9001\u306f\u6975\u3081\u3066\u65e9\u3044\uff0e\nAZ \u306f\uff0c\u30d3\u30b8\u30cd\u30b9\u306a\u3069\u3067\u30b5\u30fc\u30d0\u30fc\u30c0\u30a6\u30f3\u304c\u8a31\u5bb9\u3055\u308c\u306a\u3044\u5834\u5408\u306a\u3069\u306b\u6ce8\u610f\u3059\u3079\u304d\u6982\u5ff5\u3067\u3042\u308a\uff0c\u500b\u4eba\u7684\u306a\u7528\u9014\u3067\u4f7f\u3046\u9650\u308a\u306b\u304a\u3044\u3066\u306f\u3042\u307e\u308a\u6df1\u304f\u8003\u616e\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\uff0e\u8a00\u8449\u306e\u610f\u5473\u3060\u3051\u77e5\u3063\u3066\u304a\u3051\u3070\u5341\u5206\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\nAWS \u3092\u4f7f\u7528\u3059\u308b\u969b\uff0c\u3069\u3053\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u306e\u304c\u3088\u3044\u306e\u3060\u308d\u3046\u304b\uff1f\n\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u63a5\u7d9a\u901f\u5ea6\u306e\u89b3\u70b9\u304b\u3089\u306f\uff0c\u5730\u7406\u7684\u306b\u4e00\u756a\u8fd1\u3044\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u306e\u304c\u4e00\u822c\u7684\u306b\u3088\u3044\u3060\u308d\u3046\uff0e\n\u4e00\u65b9\uff0c EC2 \u306e\u5229\u7528\u6599\u306a\u3069\u306f\u30ea\u30fc\u30b8\u30e7\u30f3\u3054\u3068\u306b\u4fa1\u683c\u8a2d\u5b9a\u304c\u82e5\u5e72 (10-20%\u7a0b\u5ea6) \u7570\u306a\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u81ea\u5206\u304c\u6700\u3082\u983b\u7e41\u306b\u5229\u7528\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u4fa1\u683c\u304c\u6700\u3082\u5b89\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\uff0c\u3068\u3044\u3046\u306e\u3082\u91cd\u8981\u306a\u8996\u70b9\u3067\u3042\u308b\uff0e\n\u307e\u305f\uff0c\u3044\u304f\u3064\u304b\u306e\u30b5\u30fc\u30d3\u30b9\u306f\uff0c\u7279\u5b9a\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u5229\u7528\u3067\u304d\u306a\u3044\u5834\u5408\u3082\u3042\u308b\uff0e\n\u3053\u308c\u3089\u306e\u30dd\u30a4\u30f3\u30c8\u304b\u3089\u7dcf\u5408\u7684\u306b\u5224\u65ad\u3057\u3066\u4f7f\u7528\u3059\u308b\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u6c7a\u3081\u308b\u3068\u826f\u3044\uff0e\n\n\n\n\n\n\n\n\n\n\n\nAWS Educate \u3092\u5229\u7528\u3057\u3066\u3044\u308b\u8aad\u8005\u3078\n\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3044\u3066\uff0cAWS Educate \u306b\u3088\u308b Starter Account \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306f us-east-1 region \u306e\u307f\u5229\u7528\u3067\u304d\u308b\n(\u53c2\u7167)\uff0e\n\n\n\n\n\n\n\n3.4. AWS\u3067\u306e\u30af\u30e9\u30a6\u30c9\u958b\u767a\nAWS \u306e\u30af\u30e9\u30a6\u30c9\u306e\u5168\u4f53\u50cf\u304c\u308f\u304b\u3063\u3066\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u6b21\u306e\u30c8\u30d4\u30c3\u30af\u3068\u3057\u3066\uff0c\u3069\u306e\u3088\u3046\u306b\u3057\u3066AWS\u4e0a\u306b\u30af\u30e9\u30a6\u30c9\u306e\u958b\u767a\u3092\u884c\u3044\uff0c\u5c55\u958b\u3057\u3066\u3044\u304f\u304b\u306b\u3064\u3044\u3066\u306e\u6982\u7565\u3092\u89e3\u8aac\u3057\u3088\u3046\uff0e\nAWS \u306e\u30ea\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u30fb\u7de8\u96c6\u30fb\u524a\u9664\u3059\u308b\u306a\u3069\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u7528\u3044\u308b\u65b9\u6cd5\u3068\uff0c API \u3092\u7528\u3044\u308b\u65b9\u6cd5\u306e\uff0c\u4e8c\u3064\u306e\u7d4c\u8def\u304c\u3042\u308b\uff0e\n\n3.4.1. \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u304b\u3089\u30ea\u30bd\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\nAWS \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3068\uff0c\u307e\u305a\u6700\u521d\u306b\u8868\u793a\u3055\u308c\u308b\u306e\u304c AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u3042\u308b (Figure 8)\uff0e\n\n\n\nFigure 8. AWS\u30de\u30cd\u30fc\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\n\n\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c EC2 \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u7acb\u3061\u4e0a\u3052\u305f\u308a\uff0cS3\u306e\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u30fb\u524a\u9664\u3057\u305f\u308a\uff0c\u30ed\u30b0\u3092\u95b2\u89a7\u3057\u305f\u308a\u306a\u3069\uff0cAWS\u4e0a\u306e\u3042\u3089\u3086\u308b\u30ea\u30bd\u30fc\u30b9\u306e\u64cd\u4f5c\u3092 GUI (Graphical User Interface) \u3092\u901a\u3057\u3066\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u521d\u3081\u3066\u89e6\u308b\u6a5f\u80fd\u3092\u30dd\u30c1\u30dd\u30c1\u3068\u8a66\u3057\u305f\u308a\uff0c\u30c7\u30d0\u30c3\u30b0\u3092\u884c\u3046\u3068\u304d\u306a\u3069\u306b\u3068\u3066\u3082\u4fbf\u5229\u3067\u3042\u308b\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u306f\u3055\u3089\u3063\u3068\u6a5f\u80fd\u3092\u8a66\u3057\u305f\u308a\uff0c\u958b\u767a\u4e2d\u306e\u30af\u30e9\u30a6\u30c9\u306e\u30c7\u30d0\u30c3\u30b0\u3092\u3059\u308b\u3068\u304d\u306b\u306f\u4fbf\u5229\u306a\u306e\u3067\u3042\u308b\u304c\uff0c\u5b9f\u969b\u306b\u30af\u30e9\u30a6\u30c9\u306e\u958b\u767a\u3092\u3059\u308b\u5834\u9762\u3067\u3053\u308c\u3092\u76f4\u63a5\u3044\u3058\u308b\u3053\u3068\u306f\u3042\u307e\u308a\u306a\u3044\uff0e\n\u3080\u3057\u308d\uff0c\u6b21\u306b\u7d39\u4ecb\u3059\u308b API \u3092\u4f7f\u7528\u3057\u3066\uff0c\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u3057\u3066\u30af\u30e9\u30a6\u30c9\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u8a18\u8ff0\u3059\u308b\u3053\u3068\u3067\u958b\u767a\u3092\u884c\u3046\u306e\u304c\u4e00\u822c\u7684\u3067\u3042\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u7406\u7531\u3067\uff0c\u672c\u66f8\u3067\u306fAWS\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u4f7f\u3063\u305f AWS \u306e\u4f7f\u3044\u65b9\u306f\u3042\u307e\u308a\u89e6\u308c\u306a\u3044\uff0e\nAWS \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u306f\uff0c\u305f\u304f\u3055\u3093\u306e\n\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\n\u304c\u7528\u610f\u3055\u308c\u3066\u304a\u308a\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u304b\u3089\u69d8\u3005\u306a\u64cd\u4f5c\u3092\u884c\u3046\u65b9\u6cd5\u304c\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u8208\u5473\u304c\u3042\u308b\u8aad\u8005\u306f\u305d\u3061\u3089\u3092\u53c2\u7167\u3055\u308c\u305f\u3044\uff0e\n\n\n3.4.2. API\u304b\u3089\u30ea\u30bd\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\nAPI (Application Programming Interface) \u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c\u30b3\u30de\u30f3\u30c9\u3092AWS\u306b\u9001\u4fe1\u3057\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u64cd\u4f5c\u3092\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nAPI \u3068\u306f\uff0c\u7aef\u7684\u306b\u8a00\u3048\u3070 AWS \u304c\u516c\u958b\u3057\u3066\u3044\u308b\u30b3\u30de\u30f3\u30c9\u306e\u4e00\u89a7\u3067\u3042\u308a\uff0cGET, POST, DELETE \u306a\u3069\u306e REST API \u304b\u3089\u69cb\u6210\u3055\u308c\u3066\u3044\u308b (REST API \u306b\u3064\u3044\u3066\u306f Section 10.2 \u3067\u7c21\u5358\u306b\u89e3\u8aac\u3059\u308b)\uff0e\n\u304c\uff0c\u76f4\u63a5REST API\u3092\u5165\u529b\u3059\u308b\u306e\u306f\u9762\u5012\u3067\u3042\u308b\u306e\u3067\uff0c\u305d\u306e\u624b\u9593\u3092\u89e3\u6d88\u3059\u308b\u305f\u3081\u306e\u69d8\u3005\u306a\u30c4\u30fc\u30eb\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u4f8b\u3048\u3070\uff0c\nAWS CLI\n\u306f\uff0c UNIX \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089 AWS API \u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e CLI (Command Line Interface) \u3067\u3042\u308b\uff0e\nCLI\u306b\u52a0\u3048\u3066\uff0c\u3044\u308d\u3044\u308d\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306e SDK (Software Development Kit) \u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\u4ee5\u4e0b\u306b\u4e00\u4f8b\u3092\u6319\u3052\u308b\uff0e\n\n\n\nPython \u21d2 boto3\n\n\nRuby \u21d2 AWS SDK for Ruby\n\n\nNode.js \u21d2 AWS SDK for Node.js\n\n\n\n\u5177\u4f53\u7684\u306a API \u306e\u4f7f\u7528\u4f8b\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\nS3\u306b\u65b0\u3057\u3044\u4fdd\u5b58\u9818\u57df (Bucket (\u30d0\u30b1\u30c3\u30c8) \u3068\u3088\u3070\u308c\u308b) \u3092\u8ffd\u52a0\u3057\u305f\u3044\u3068\u3057\u3088\u3046\uff0e\nAWS CLI \u3092\u4f7f\u3063\u305f\u5834\u5408\u306f\uff0c\u6b21\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3066\u3070\u3088\u3044\uff0e\n\n$ aws s3 mb s3://my-bucket --region ap-northeast-1\n\n\u4e0a\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u306f\uff0c my-bucket \u3068\u3044\u3046\u540d\u524d\u306e\u30d0\u30b1\u30c3\u30c8\u3092\uff0c ap-northeast-1 \u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u4f5c\u6210\u3059\u308b\uff0e\nPython\u304b\u3089\u3053\u308c\u3068\u540c\u3058\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c boto3 \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\uff0c\u6b21\u306e\u3088\u3046\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n1\n2\n3\n4\nimport boto3\n\ns3_client = boto3.client(\"s3\", region_name=\"ap-northeast-1\")\ns3_client.create_bucket(Bucket=\"my-bucket\")\n\n\n\u3082\u3046\u4e00\u3064\u4f8b\u3092\u3042\u3052\u3088\u3046\uff0e\n\u65b0\u3057\u3044EC2\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9(\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u306f\uff0c\u8d77\u52d5\u72b6\u614b\u306b\u3042\u308b\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306e\u610f\u5473\u3067\u3042\u308b)\u3092\u8d77\u52d5\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3066\u3070\u826f\u3044\uff0e\n\n$ aws ec2 run-instances --image-id ami-xxxxxxxx --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-903004f8 --subnet-id subnet-6e7f829e\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\uff0c\nt2.micro\n\u3068\u3044\u3046\u30bf\u30a4\u30d7 (1 vCPU, 1.0 GB RAM) \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3059\u308b\uff0e\n\u3053\u3053\u3067\u306f\u305d\u306e\u4ed6\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8a73\u7d30\u306e\u8aac\u660e\u306f\u7701\u7565\u3059\u308b (\u30cf\u30f3\u30ba\u30aa\u30f3 (Section 4) \u3067\u8a73\u3057\u304f\u89e3\u8aac\u3059\u308b)\uff0e\nPython\u304b\u3089\u4e0a\u8a18\u3068\u540c\u3058\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f7f\u3046\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\nimport boto3\n\nec2_client = boto3.client(\"ec2\")\nec2_client.run_instances(\n    ImageId=\"ami-xxxxxxxxx\",\n    MinCount=1,\n    MaxCount=1,\n    KeyName=\"MyKeyPair\",\n    InstanceType=\"t2.micro\",\n    SecurityGroupIds=[\"sg-903004f8\"],\n    SubnetId=\"subnet-6e7f829e\",\n)\n\n\n\u4ee5\u4e0a\u306e\u4f8b\u3092\u901a\u3058\u3066\uff0cAPI\u306b\u3088\u308b\u30af\u30e9\u30a6\u30c9\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u64cd\u4f5c\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u3064\u304b\u3081\u3066\u304d\u305f\u3060\u308d\u3046\u304b\uff1f\n\u30b3\u30de\u30f3\u30c9\u4e00\u3064\u3067\uff0c\u65b0\u3057\u3044\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u305f\u308a\uff0c\u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\u9818\u57df\u3092\u8ffd\u52a0\u3057\u305f\u308a\uff0c\u4efb\u610f\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u308b\u308f\u3051\u3067\u3042\u308b\uff0e\n\u57fa\u672c\u7684\u306b\uff0c\u3053\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u8907\u6570\u7d44\u307f\u5408\u308f\u305b\u3066\u3044\u304f\u3053\u3068\u3067\uff0c\u81ea\u5206\u306e\u671b\u3080CPU\u30fbRAM\u30fb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30fb\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5099\u308f\u3063\u305f\u8a08\u7b97\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3082\u3061\u308d\u3093\uff0c\u9006\u306e\u64cd\u4f5c (\u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664) \u3082 API \u3092\u4f7f\u3063\u3066\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\n\n3.4.3. \u30df\u30cb\u30fb\u30cf\u30f3\u30ba\u30aa\u30f3: AWS CLI \u3092\u4f7f\u3063\u3066\u307f\u3088\u3046\n\u3053\u3053\u3067\u306f\uff0c\u30df\u30cb\u30fb\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u3057\u3066\uff0cAWS CLI \u3092\u5b9f\u969b\u306b\u4f7f\u3063\u3066\u307f\u308b\uff0e\nAWS CLI \u306f\u5148\u8ff0\u306e\u3068\u304a\u308a\uff0c AWS \u4e0a\u306e\u4efb\u610f\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u64cd\u4f5c\u304c\u53ef\u80fd\u3067\u3042\u308b\u304c\uff0c\u3053\u3053\u3067\u306f\u4e00\u756a\u30b7\u30f3\u30d7\u30eb\u306a\uff0c S3 \u3092\u4f7f\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u66f8\u304d\u3092\u5b9f\u8df5\u3059\u308b\n(EC2\u306e\u64cd\u4f5c\u306f\u5c11\u3057\u8907\u96d1\u306a\u306e\u3067\uff0c\u7b2c\u4e00\u56de\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u884c\u3046)\uff0e\naws s3 \u30b3\u30de\u30f3\u30c9\u306e\u8a73\u3057\u3044\u4f7f\u3044\u65b9\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\uff0e\n\n\n\n\n\n\n\nAWS CLI \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3064\u3044\u3066\u306f\uff0c Section 15.3 \u3092\u53c2\u7167\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u4ee5\u4e0b\u306b\u7d39\u4ecb\u3059\u308b\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\uff0c\u57fa\u672c\u7684\u306b S3 \u306e\u7121\u6599\u67a0 \u306e\u7bc4\u56f2\u5185\u3067\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u524d\u306b\uff0cAWS\u306e\u8a8d\u8a3c\u60c5\u5831\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\u3053\u308c\u306b\u306f ~/.aws/credentials \u306e\u30d5\u30a1\u30a4\u30eb\u306b\u8a2d\u5b9a\u304c\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u308b\u304b\uff0c\u74b0\u5883\u5909\u6570 (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION) \u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u8a73\u3057\u304f\u306f Section 15.3 \u3092\u53c2\u7167\uff0e\n\n\n\n\n\u307e\u305a\u306f\uff0cS3\u306b\u30c7\u30fc\u30bf\u306e\u683c\u7d0d\u9818\u57df (Bucket \u3068\u3088\u3070\u308c\u308b\uff0e\u4e00\u822c\u7684\u306a OS \u3067\u306e\"\u30c9\u30e9\u30a4\u30d6\"\u306b\u76f8\u5f53\u3059\u308b) \u3092\u4f5c\u6210\u3059\u308b\u3068\u3053\u308d\u304b\u3089\u59cb\u3081\u3088\u3046\uff0e\n\n$ bucketName=\"mybucket-$(openssl rand -hex 12)\"\n$ echo $bucketName\n$ aws s3 mb \"s3://${bucketName}\"\n\nS3\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u306f\uff0c AWS \u5168\u4f53\u3067\u4e00\u610f\u7684\u3067\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u3053\u3068\u304b\u3089\uff0c\u524d\u8ff0\u306e\u30b3\u30de\u30f3\u30c9\u3067\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u6587\u5b57\u5217\u3092\u542b\u3093\u3060\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u3092\u751f\u6210\u3057\uff0cbucketName \u3068\u3044\u3046\u5909\u6570\u306b\u683c\u7d0d\u3057\u3066\u3044\u308b\uff0e\n\u305d\u3057\u3066\uff0c aws s3 mb (mb \u306f make bucket \u306e\u7565) \u306b\u3088\u3063\u3066\uff0c\u65b0\u3057\u3044\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3059\u308b\uff0e\n\u6b21\u306b\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ aws s3 ls\n\n2020-06-07 23:45:44 mybucket-c6f93855550a72b5b66f5efe\n\n\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u30d0\u30b1\u30c3\u30c8\u304c\u30ea\u30b9\u30c8\u306b\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\u672c\u66f8\u306e\u30ce\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\uff0c\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306b\u5165\u529b\u3059\u308b\u30b3\u30de\u30f3\u30c9\u306f\uff0c\u305d\u308c\u304c\u30b3\u30de\u30f3\u30c9\u3067\u3042\u308b\u3068\u660e\u793a\u3059\u308b\u76ee\u7684\u3067\u5148\u982d\u306b $ \u304c\u3064\u3051\u3066\u3042\u308b\uff0e\n$ \u306f\u30b3\u30de\u30f3\u30c9\u3092\u30b3\u30d4\u30fc&\u30da\u30fc\u30b9\u30c8\u3059\u308b\u3068\u304d\u306f\u9664\u304b\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u9006\u306b\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u51fa\u529b\u306f $ \u306a\u3057\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b\uff0e\n\n\n\n\n\u6b21\u306b\uff0c\u30d0\u30b1\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\uff0e\n\n$ echo \"Hello world\" > hello_world.txt\n$ aws s3 cp hello_world.txt \"s3://${bucketName}/hello_world.txt\"\n\n\u4e0a\u3067\u306f hello_world.txt \u3068\u3044\u3046\u30c0\u30df\u30fc\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\uff0c\u305d\u308c\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\uff0e\n\u305d\u308c\u3067\u306f\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u306b\u3042\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3057\u3066\u307f\u308b\uff0e\n\n$ aws s3 ls \"s3://${bucketName}\" --human-readable\n\n2020-06-07 23:54:19   13 Bytes hello_world.txt\n\n\u5148\u307b\u3069\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u305f\u3057\u304b\u306b\u5b58\u5728\u3059\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u6700\u5f8c\u306b\uff0c\u4f7f\u3044\u7d42\u308f\u3063\u305f\u30d0\u30b1\u30c3\u30c8\u3092\u524a\u9664\u3059\u308b\uff0e\n\n$ aws s3 rb \"s3://${bucketName}\" --force\n\nrb \u306f remove bucket \u306e\u7565\u3067\u3042\u308b\uff0e\n\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u3068\u524a\u9664\u3067\u304d\u306a\u3044\uff0e\n\u7a7a\u3067\u306a\u3044\u30d0\u30b1\u30c3\u30c8\u3092\u5f37\u5236\u7684\u306b\u524a\u9664\u3059\u308b\u306b\u306f --force \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u308b\uff0e\n\u4ee5\u4e0a\u306e\u3088\u3046\u306b\uff0cAWS CLI \u3092\u4f7f\u3063\u3066 S3 \u30d0\u30b1\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u306e\u4e00\u9023\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u305f\uff0e\nEC2 \u3084 Lambda,  DynamoDB \u306a\u3069\u306b\u3064\u3044\u3066\u3082\u540c\u69d8\u306b AWS CLI \u3092\u4f7f\u3063\u3066\u3042\u3089\u3086\u308b\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\nAmazon Resource Name (ARN)\nAWS \u4e0a\u306e\u3042\u3089\u3086\u308b\u30ea\u30bd\u30fc\u30b9\u306b\u306f\uff0c Amazon Resource Name (ARN) \u3068\u3044\u3046\u56fa\u6709\u306e ID \u304c\u4ed8\u4e0e\u3055\u308c\u3066\u3044\u308b\uff0e\nARN \u306f arn:aws:s3:::my_bucket/ \u306e\u3088\u3046\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u8a18\u8ff0\u3055\u308c\uff0cARN \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u7279\u5b9a\u306e AWS \u30ea\u30bd\u30fc\u30b9 (S3 \u306e\u30d0\u30b1\u30c3\u30c8\u3084 EC2 \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9) \u3092\u4e00\u610f\u7684\u306b\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nS3 \u30d0\u30b1\u30c3\u30c8\u3084 EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306a\u3069\u306b\u306f ARN \u306b\u52a0\u3048\u3066\uff0c\u4eba\u9593\u304c\u8aad\u307f\u3084\u3059\u3044\u540d\u524d\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3053\u306e\u5834\u5408\u306f\uff0cARN \u307e\u305f\u306f\u540d\u524d\u306e\u3069\u3061\u3089\u3092\u7528\u3044\u3066\u3082\u540c\u3058\u30ea\u30bd\u30fc\u30b9\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n3.5. CloudFormation \u3068 AWS CDK\n\n3.5.1. CloudFormation \u306b\u3088\u308b Infrastructure as Code (IaC)\n\u524d\u7bc0\u3067\u8ff0\u3079\u305f\u3088\u3046\u306b\uff0cAWS API \u3092\u4f7f\u3046\u3053\u3068\u3067\u30af\u30e9\u30a6\u30c9\u306e\u3042\u3089\u3086\u308b\u30ea\u30bd\u30fc\u30b9\u306e\u4f5c\u6210\u30fb\u7ba1\u7406\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3088\u3063\u3066\uff0c\u539f\u7406\u4e0a\u306f\uff0c API \u306e\u30b3\u30de\u30f3\u30c9\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3044\u304f\u3053\u3068\u3067\uff0c\u81ea\u5206\u306e\u4f5c\u308a\u305f\u3044\u30af\u30e9\u30a6\u30c9\u3092\u8a2d\u8a08\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3057\u304b\u3057\uff0c\u3053\u3053\u3067\u5b9f\u7528\u4e0a\u8003\u616e\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u70b9\u304c\u4e00\u3064\u3042\u308b\uff0e\nAWS API \u306b\u306f\u5927\u304d\u304f\u5206\u3051\u3066\uff0c\u30ea\u30bd\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3068\uff0c\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u304c\u3042\u308b\u3053\u3068\u3067\u3042\u308b (Figure 9)\uff0e\n\n\n\nFigure 9. AWS API\u306f\u30ea\u30bd\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3068\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u306b\u5927\u304d\u304f\u5206\u3051\u3089\u308c\u308b\uff0e\u30ea\u30bd\u30fc\u30b9\u3092\u8a18\u8ff0\u30fb\u7ba1\u7406\u3059\u308b\u306e\u306b\u4f7f\u308f\u308c\u308b\u306e\u304c\uff0c CloudFormation \u3068 CDK \u3067\u3042\u308b\uff0e\n\n\u30ea\u30bd\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u3068\u306f\uff0cEC2\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u305f\u308a\uff0cS3\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u305f\u308a\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u65b0\u305f\u306a\u30c6\u30fc\u30d6\u30eb\u3092\u8ffd\u52a0\u3059\u308b\uff0c\u306a\u3069\u306e\u9759\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u3092\u6e96\u5099\u3059\u308b \u64cd\u4f5c\u3092\u6307\u3059\uff0e\n\"\u30cf\u30b3\"\u3092\u4f5c\u308b\u64cd\u4f5c\u3068\u3088\u3093\u3067\u3082\u826f\u3044\u3060\u308d\u3046\uff0e\n\u3053\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u6642\u306b\u306e\u307f\uff0c\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\u3055\u308c\u308c\u3070\u3088\u3044\uff0e\n\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9 \u3068\u306f\uff0c EC2 \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30b8\u30e7\u30d6\u3092\u6295\u5165\u3057\u305f\u308a\uff0c S3 \u306e\u30d0\u30b1\u30c3\u30c8\u306b\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u66f8\u304d\u3059\u308b\u306a\u3069\u306e\u64cd\u4f5c\u3092\u6307\u3059\uff0e\n\u3053\u308c\u306f\uff0c EC2 \u3084 S3 \u306a\u3069\u306e\u30ea\u30bd\u30fc\u30b9 (\"\u30cf\u30b3\") \u3092\u524d\u63d0\u3068\u3057\u3066\uff0c\u305d\u306e\u5185\u90e8\u3067\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d\u8a08\u7b97\u3092\u8a18\u8ff0\u3059\u308b\u3082\u306e\u3067\u3042\u308b\uff0e\n\u524d\u8005\u306b\u6bd4\u3079\u3066\u3053\u3061\u3089\u306f\u52d5\u7684\u306a\u64cd\u4f5c\u3092\u62c5\u5f53\u3059\u308b\uff0c\u3068\u6349\u3048\u308b\u3053\u3068\u3082\u3067\u304d\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u89b3\u70b9\u304b\u3089\uff0c\u30a4\u30f3\u30d5\u30e9\u3092\u8a18\u8ff0\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u3042\u308b\u7a0b\u5ea6\u5206\u3051\u3066\u7ba1\u7406\u3055\u308c\u308b\u3079\u304d\u3067\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u306e\u958b\u767a\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e(\u9759\u7684\u306a)\u30ea\u30bd\u30fc\u30b9\u3092\u8a18\u8ff0\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3059\u308b\u30b9\u30c6\u30c3\u30d7\u3068\uff0c\u30a4\u30f3\u30d5\u30e9\u4e0a\u3067\u52d5\u304f\u52d5\u7684\u306a\u64cd\u4f5c\u3092\u884c\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3059\u308b\u30b9\u30c6\u30c3\u30d7\u306e\u4e8c\u6bb5\u968e\u306b\u5206\u3051\u3066\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nAWS\u3067\u306e\u9759\u7684\u30ea\u30bd\u30fc\u30b9\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u304c\uff0c CloudFormation \u3067\u3042\u308b\uff0e\nCloudFormation \u3068\u306f\uff0c CloudFormation \u306e\u6587\u6cd5\u306b\u5f93\u3063\u305f\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3063\u3066\uff0cAWS\u306e\u30a4\u30f3\u30d5\u30e9\u3092\u8a18\u8ff0\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3042\u308b\uff0e\nCloudFormation \u3092\u4f7f\u3063\u3066\uff0c\u305f\u3068\u3048\u3070\uff0cEC2\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u3069\u308c\u304f\u3089\u3044\u306e\u30b9\u30da\u30c3\u30af\u3067\uff0c\u4f55\u500b\u8d77\u52d5\u3059\u308b\u304b\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u9593\u306f\u3069\u306e\u3088\u3046\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u7d50\u3073\uff0c\u3069\u306e\u3088\u3046\u306a\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3092\u4ed8\u4e0e\u3059\u308b\u304b\uff0c\u306a\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u8981\u4ef6\u3092\u9010\u6b21\u7684\u306b\u8a18\u8ff0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u4e00\u5ea6CloudFormation \u30d5\u30a1\u30a4\u30eb\u304c\u3067\u304d\u4e0a\u304c\u308c\u3070\uff0c\u305d\u308c\u306b\u3057\u305f\u304c\u3063\u305f\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u30b3\u30de\u30f3\u30c9\u4e00\u3064\u3067 AWS \u4e0a\u306b\u5c55\u958b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u307e\u305f\uff0cCloudFormation \u30d5\u30a1\u30a4\u30eb\u3092\u4ea4\u63db\u3059\u308b\u3053\u3068\u3067\uff0c\u5168\u304f\u540c\u4e00\u306e\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u3092\u4ed6\u8005\u304c\u7c21\u5358\u306b\u518d\u73fe\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u306b\u306a\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u672c\u6765\u306f\u7269\u7406\u7684\u306a\u5b9f\u4f53\u306e\u3042\u308b\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u3092\uff0c\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3088\u3063\u3066\u8a18\u8ff0\u3057\uff0c\u7ba1\u7406\u3059\u308b\u3068\u3044\u3046\u8003\u3048\u65b9\u3092\uff0cInfrastructure as Code (IaC)\u3068\u3088\u3076\uff0e\nCloudFormation \u3092\u8a18\u8ff0\u3059\u308b\u306b\u306f\uff0c\u57fa\u672c\u7684\u306b JSON (JavaScript Object Notation) \u3068\u3088\u3070\u308c\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u4f7f\u3046\uff0e\n\u6b21\u306e\u30b3\u30fc\u30c9\u306f\uff0cJSON\u3067\u8a18\u8ff0\u3055\u308c\u305f CloudFormation \u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u4f8b (\u629c\u7c8b) \u3067\u3042\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n\"Resources\" : {\n  ...\n  \"WebServer\": {\n    \"Type\" : \"AWS::EC2::Instance\",\n    \"Properties\": {\n      \"ImageId\" : { \"Fn::FindInMap\" : [ \"AWSRegionArch2AMI\", { \"Ref\" : \"AWS::Region\" },\n                        { \"Fn::FindInMap\" : [ \"AWSInstanceType2Arch\", { \"Ref\" : \"InstanceType\" }, \"Arch\" ] } ] },\n      \"InstanceType\"   : { \"Ref\" : \"InstanceType\" },\n      \"SecurityGroups\" : [ {\"Ref\" : \"WebServerSecurityGroup\"} ],\n      \"KeyName\"        : { \"Ref\" : \"KeyName\" },\n      \"UserData\" : { \"Fn::Base64\" : { \"Fn::Join\" : [\"\", [\n                     \"#!/bin/bash -xe\\n\",\n                     \"yum update -y aws-cfn-bootstrap\\n\",\n\n                     \"/opt/aws/bin/cfn-init -v \",\n                     \"         --stack \", { \"Ref\" : \"AWS::StackName\" },\n                     \"         --resource WebServer \",\n                     \"         --configsets wordpress_install \",\n                     \"         --region \", { \"Ref\" : \"AWS::Region\" }, \"\\n\",\n\n                     \"/opt/aws/bin/cfn-signal -e $? \",\n                     \"         --stack \", { \"Ref\" : \"AWS::StackName\" },\n                     \"         --resource WebServer \",\n                     \"         --region \", { \"Ref\" : \"AWS::Region\" }, \"\\n\"\n      ]]}}\n    },\n    ...\n  },\n  ...\n},\n\n\n\u3053\u3053\u3067\u306f\uff0c \"WebServer\" \u3068\u3044\u3046\u540d\u524d\u306e\u3064\u3051\u3089\u308c\u305f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\u304b\u306a\u308a\u9577\u5927\u3067\u8907\u96d1\u306a\u8a18\u8ff0\u3067\u3042\u308b\u304c\uff0c\u3053\u308c\u306b\u3088\u3063\u3066\u6240\u671b\u306e\u30b9\u30da\u30c3\u30af\u30fbOS\u3092\u3082\u3064EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u81ea\u52d5\u7684\u306b\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b\uff0e\n\n\n3.5.2. AWS CDK\n\u524d\u7bc0\u3067\u7d39\u4ecb\u3057\u305f CloudFormation \u306f\uff0c\u898b\u3066\u308f\u304b\u308b\u3068\u304a\u308a\u5927\u5909\u8a18\u8ff0\u304c\u8907\u96d1\u3067\u3042\u308a\uff0c\u307e\u305f\u305d\u308c\u306e\u3069\u308c\u304b\u4e00\u3064\u306b\u3067\u3082\u8aa4\u308a\u304c\u3042\u3063\u3066\u306f\u3044\u3051\u306a\u3044\uff0e\n\u307e\u305f\uff0c\u57fa\u672c\u7684\u306b\"\u30c6\u30ad\u30b9\u30c8\"\u3092\u66f8\u3044\u3066\u3044\u304f\u3053\u3068\u306b\u306a\u308b\u306e\u3067\uff0c\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u4f7f\u3046\u3088\u3046\u306a\u5909\u6570\u3084\u30af\u30e9\u30b9\u3068\u3044\u3063\u305f\u4fbf\u5229\u306a\u6982\u5ff5\u304c\u4f7f\u3048\u306a\u3044\u3000(\u53b3\u5bc6\u306b\u306f\uff0c CloudFormation \u306b\u3082\u5909\u6570\u306b\u76f8\u5f53\u3059\u308b\u3088\u3046\u306a\u6a5f\u80fd\u306f\u5b58\u5728\u3059\u308b)\uff0e\n\u307e\u305f\uff0c\u8a18\u8ff0\u306e\u591a\u304f\u306e\u90e8\u5206\u306f\u7e70\u308a\u8fd4\u3057\u304c\u591a\u304f\uff0c\u81ea\u52d5\u5316\u3067\u304d\u308b\u90e8\u5206\u3082\u591a\u3044\uff0e\n\u305d\u306e\u3088\u3046\u306a\u60a9\u307f\u3092\u89e3\u6c7a\u3057\u3066\u304f\u308c\u308b\u306e\u304c\uff0c AWS Cloud Development Kit (CDK) \u3067\u3042\u308b\uff0e\nCDK\u306f Python \u306a\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3092\u4f7f\u3063\u3066 CloudFormation \u3092\u81ea\u52d5\u7684\u306b\u751f\u6210\u3057\u3066\u304f\u308c\u308b\u30c4\u30fc\u30eb\u3067\u3042\u308b\uff0e\nCDK \u306f2019\u5e74\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305f\u3070\u304b\u308a\u306e\u6bd4\u8f03\u7684\u65b0\u3057\u3044\u30c4\u30fc\u30eb\u3067\uff0c\u65e5\u3005\u6539\u826f\u304c\u9032\u3081\u3089\u308c\u3066\u3044\u308b (GitHub \u30ea\u30dd\u30b8\u30c8\u30ea \u306e\u30ea\u30ea\u30fc\u30b9\u3092\u898b\u308c\u3070\u305d\u306e\u958b\u767a\u306e\u30b9\u30d4\u30fc\u30c9\u306e\u901f\u3055\u304c\u308f\u304b\u308b\u3060\u308d\u3046)\uff0e\nCDK \u306f TypeScript (JavaScript), Python, Java \u306a\u3069\u8907\u6570\u306e\u8a00\u8a9e\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\uff0e\nCDK\u3092\u4f7f\u3046\u3053\u3068\u3067\uff0cCloudFormation \u306b\u76f8\u5f53\u3059\u308b\u30af\u30e9\u30a6\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u8a18\u8ff0\u3092\uff0c\u3088\u308a\u89aa\u3057\u307f\u306e\u3042\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3092\u4f7f\u3063\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u304b\u3064\uff0c\u5178\u578b\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u306b\u95a2\u3057\u3066\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u591a\u304f\u306e\u90e8\u5206\u3092\u81ea\u52d5\u3067\u6c7a\u5b9a\u3057\u3066\u304f\u308c\u308b\u306e\u3067\uff0c\u8a18\u8ff0\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u91cf\u3082\u304b\u306a\u308a\u524a\u6e1b\u3055\u308c\u308b\uff0e\n\u4ee5\u4e0b\u306b Python \u3092\u4f7f\u3063\u305f CDK \u306e\u30b3\u30fc\u30c9\u306e\u4e00\u4f8b (\u629c\u7c8b) \u3092\u793a\u3059\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nfrom aws_cdk import (\n    core,\n    aws_ec2 as ec2,\n)\n\nclass MyFirstEc2(core.Stack):\n\n    def __init__(self, scope, name, **kwargs):\n        super().__init__(scope, name, **kwargs)\n\n        vpc = ec2.Vpc(\n            ... # some parameters\n        )\n\n        sg = ec2.SecurityGroup(\n            ... # some parameters\n        )\n\n        host = ec2.Instance(\n            self, \"MyGreatEc2\",\n            instance_type=ec2.InstanceType(\"t2.micro\"),\n            machine_image=ec2.MachineImage.latest_amazon_linux(),\n            vpc=vpc,\n            ...\n        )\n\n\n\u3053\u306e\u30b3\u30fc\u30c9\u306f\uff0c\u4e00\u3064\u524d\u306b\u793a\u3057\u305f JSON \u3092\u4f7f\u3063\u305f CloudFormation \u3068\u5b9f\u8cea\u7684\u306b\u540c\u3058\u3053\u3068\u3092\u8a18\u8ff0\u3057\u3066\u3044\u308b\uff0e\n\u3068\u3066\u3082\u7169\u96d1\u3060\u3063\u305f CloudFormation \u30d5\u30a1\u30a4\u30eb\u306b\u6bd4\u3079\u3066\uff0c CDK \u3068 Python \u3092\u4f7f\u3046\u3053\u3068\u3067\u683c\u6bb5\u306b\u77ed\u304f\uff0c\u308f\u304b\u308a\u3084\u3059\u304f\u8a18\u8ff0\u3067\u304d\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u304c\u308f\u304b\u308b\u3060\u308d\u3046\uff0e\n\u672c\u66f8\u306e\u4e3b\u984c\u306f\uff0c CDK \u3092\u4f7f\u3063\u3066\uff0c\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u306a\u304c\u3089 AWS \u306e\u6982\u5ff5\u3084\u958b\u767a\u65b9\u6cd5\u3092\u5b66\u3093\u3067\u3044\u304f\u3053\u3068\u3067\u3042\u308b\uff0e\n\u5f8c\u306e\u7ae0\u3067\u306f CDK \u3092\u4f7f\u3063\u3066\u69d8\u3005\u306a\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u65bd\u3057\u3066\u3044\u304f\uff0e\n\u65e9\u901f\uff0c\u6700\u521d\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c CDK \u3092\u4f7f\u3063\u3066 EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3093\u3067\u3044\u3053\u3046\uff0e\n\n\n\n\n\n\n4. Hands-on #1: \u521d\u3081\u3066\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3059\u308b\n\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u7b2c\u4e00\u56de\u3067\u306f\uff0c CDK \u3092\u4f7f\u3063\u3066 EC2 \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9(\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc)\u3092\u4f5c\u6210\u3057\uff0cSSH\u3067\u30b5\u30fc\u30d0\u30fc\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\uff0c\u3068\u3044\u3046\u6f14\u7fd2\u3092\u884c\u3046\uff0e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u7d42\u3048\u308c\u3070\uff0c\u3042\u306a\u305f\u306f\u81ea\u5206\u3060\u3051\u306e\u30b5\u30fc\u30d0\u30fc\u3092 AWS \u4e0a\u306b\u7acb\u3061\u4e0a\u3052\uff0c\u81ea\u7531\u306b\u8a08\u7b97\u3092\u8d70\u3089\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u306e\u3067\u3042\u308b\uff01\n\n4.1. \u6e96\u5099\n\n\n\u307e\u305a\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u74b0\u5883\u3092\u6574\u3048\u308b\uff0e\n\u3053\u308c\u3089\u306e\u74b0\u5883\u6574\u5099\u306f\uff0c\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u3082\u524d\u63d0\u3068\u306a\u308b\u3082\u306e\u306a\u306e\u3067\u78ba\u5b9f\u306b\u30df\u30b9\u306a\u304f\u884c\u3063\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\n\n\nAWS Account:\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u500b\u4eba\u306e AWS \u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3042\u308b\uff0e\nAWS\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u53d6\u5f97\u306b\u3064\u3044\u3066\u306f Section 15.1 \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\nPython \u3068 Node.js:\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0cPython (3.6 \u4ee5\u4e0a)\uff0cNode.js (12.0 \u4ee5\u4e0a) \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\n\nAWS CLI:\nAWS CLI \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3064\u3044\u3066\u306f\uff0c Section 15.3 \u3092\u53c2\u7167\uff0e\n\u3053\u3053\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u8a8d\u8a3c\u9375\u306e\u8a2d\u5b9a\u3082\u6e08\u307e\u305b\u3066\u304a\u304f\u3053\u3068\uff0e\n\n\nAWS CDK:\nAWS CDK \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3064\u3044\u3066\u306f\uff0c Section 15.4 \u3092\u53c2\u7167\uff0e\n\n\n\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9:\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\uff0c\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066 GitHub \u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\uff0e\n\n\n\n\n$ git clone https://github.com/tomomano/learn-aws-by-coding.git\n\n\nDocker \u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\nPython, Node.js, AWS CDK \u306a\u3069\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30d7\u30ed\u30b0\u30e9\u30e0/\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u306e Docker image \u3092\u7528\u610f\u3057\u305f\uff0e\n\u307e\u305f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3082\u30d1\u30c3\u30b1\u30fc\u30b8\u6e08\u307f\u3067\u3042\u308b\uff0e\nDocker \u306e\u4f7f\u3044\u65b9\u3092\u77e5\u3063\u3066\u3044\u308b\u8aad\u8005\u306f\uff0c\u3053\u308c\u3092\u4f7f\u3048\u3070\uff0c\u8af8\u3005\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u3059\u308b\u5fc5\u8981\u306a\u304f\uff0c\u3059\u3050\u306b\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f Section 15.8 \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\n4.2. SSH\nSSH (secure shell) \u306f Unix \u7cfb\u306e\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u306b\u5b89\u5168\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3042\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c SSH \u3092\u4f7f\u3063\u3066\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\uff0e\nSSH \u306b\u6163\u308c\u3066\u3044\u306a\u3044\u8aad\u8005\u306e\u305f\u3081\uff0c\u7c21\u5358\u306a\u8aac\u660e\u3092\u3053\u3053\u3067\u884c\u304a\u3046\uff0e\nSSH \u306b\u3088\u308b\u901a\u4fe1\u306f\u3059\u3079\u3066\u6697\u53f7\u5316\u3055\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u6a5f\u5bc6\u60c5\u5831\u3092\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3092\u4ecb\u3057\u3066\u5b89\u5168\u306b\u9001\u53d7\u4fe1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\uff0c\u30ea\u30e2\u30fc\u30c8\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e SSH \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\nSSH \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f Linux/Mac \u306b\u306f\u6a19\u6e96\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\uff0e\nWindows \u306e\u5834\u5408\u306f WSL \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3067 SSH \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3059\u308b (Section 1.4 \u3092\u53c2\u7167)\uff0e\nSSH \u30b3\u30de\u30f3\u30c9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u6b21\u306b\u793a\u3059\uff0e\n<host name> \u306f\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5148\u306e\u30b5\u30fc\u30d0\u30fc\u306e IP \u30a2\u30c9\u30ec\u30b9\u3084 DNS \u306b\u3088\u308b\u30db\u30b9\u30c8\u30cd\u30fc\u30e0\u304c\u5165\u308b\uff0e\n<user name> \u306f\u63a5\u7d9a\u3059\u308b\u5148\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3067\u3042\u308b\uff0e\n\n$ ssh <user name>@<host name>\n\nSSH \u306f\u5e73\u6587\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u3088\u308b\u8a8d\u8a3c\u3092\u884c\u3046\u3053\u3068\u3082\u3067\u304d\u308b\u304c\uff0c\u3088\u308a\u5f37\u56fa\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u65bd\u3059\u305f\u3081\uff0c\u516c\u958b\u9375\u6697\u53f7\u65b9\u5f0f(Public Key Cryptography)\u306b\u3088\u308b\u8a8d\u8a3c\u3092\u884c\u3046\u3053\u3068\u304c\u5f37\u304f\u63a8\u5968\u3055\u308c\u3066\u304a\u308a\uff0c EC2 \u306f\u3053\u306e\u65b9\u6cd5\u3067\u3057\u304b\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u3057\u3066\u3044\u306a\u3044\uff0e\n\u516c\u958b\u9375\u6697\u53f7\u65b9\u5f0f\u306e\u4ed5\u7d44\u307f\u306b\u3064\u3044\u3066\u306f\u5404\u81ea\u52c9\u5f37\u3057\u3066\u307b\u3057\u3044\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u304a\u3044\u3066\u5927\u4e8b\u306a\u3053\u3068\u306f\uff0c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u516c\u958b\u9375(Public key)\u3092\u4fdd\u6301\u3057\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u306a\u308b\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf(\u8aad\u8005\u81ea\u8eab\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf)\u304c\u79d8\u5bc6\u9375(Private key)\u3092\u4fdd\u6301\u3059\u308b\uff0c\u3068\u3044\u3046\u70b9\u3067\u3042\u308b\uff0e\nEC2\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f\u79d8\u5bc6\u9375\u3092\u6301\u3063\u305f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u307f\u304c\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\u9006\u306b\u8a00\u3046\u3068\uff0c\u79d8\u5bc6\u9375\u304c\u6f0f\u6d29\u3059\u308b\u3068\u7b2c\u4e09\u8005\u3082\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3053\u3068\u306b\u306a\u308b\u306e\u3067\uff0c\u79d8\u5bc6\u9375\u306f\u7d76\u5bfe\u306b\u6f0f\u6d29\u3059\u308b\u3053\u3068\u306e\u306a\u3044\u3088\u3046\u6ce8\u610f\u3057\u3066\u7ba1\u7406\u3059\u308b\uff0e\nSSH \u30b3\u30de\u30f3\u30c9\u3067\u306f\uff0c\u30ed\u30b0\u30a4\u30f3\u306e\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u79d8\u5bc6\u9375\u30d5\u30a1\u30a4\u30eb\u3092 -i \u3082\u3057\u304f\u306f --identity_file \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u6b21\u306e\u3088\u3046\u306b\u4f7f\u3046\uff0e\n\n$ ssh -i Ec2SecretKey.pem <user name>@<host name>\n\n\n\n4.3. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092 Figure 10 \u306b\u793a\u3059\uff0e\n\n\n\nFigure 10. \u30cf\u30f3\u30ba\u30aa\u30f3#1\u3067\u4f5c\u88fd\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n\n\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u307e\u305a\uff0cVPC (Virtual Private Cloud) \u3092\u4f7f\u3063\u3066\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u74b0\u5883\u3092\u7acb\u3061\u4e0a\u3052\u3066\u3044\u308b\uff0e\n\u305d\u306eVPC\u306e public subnet \u306e\u5185\u5074\u306b\uff0cEC2 (Elatic Compute Cloud) \u306e\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u914d\u7f6e\u3059\u308b\uff0e\n\u3055\u3089\u306b\uff0c\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u305f\u3081\uff0c Security Group \u306b\u3088\u308bEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u5236\u9650\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\u3057\u3066\u4f5c\u6210\u3055\u308c\u305f\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306b\uff0cSSH\u3092\u4f7f\u3063\u3066\u30a2\u30af\u30bb\u30b9\u3057\uff0c\u7c21\u5358\u306a\u8a08\u7b97\u3092\u884c\u3046\uff0e\nFigure 10 \u306e\u3088\u3046\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\uff0cCDK\u3092\u4f7f\u3063\u3066\u69cb\u7bc9\u3059\u308b\uff0e\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\nclass MyFirstEc2(core.Stack):\n\n    def __init__(self, scope: core.App, name: str, key_name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        (1)\n        vpc = ec2.Vpc(\n            self, \"MyFirstEc2-Vpc\",\n            max_azs=1,\n            cidr=\"10.10.0.0/23\",\n            subnet_configuration=[\n                ec2.SubnetConfiguration(\n                    name=\"public\",\n                    subnet_type=ec2.SubnetType.PUBLIC,\n                )\n            ],\n            nat_gateways=0,\n        )\n\n        (2)\n        sg = ec2.SecurityGroup(\n            self, \"MyFirstEc2Vpc-Sg\",\n            vpc=vpc,\n            allow_all_outbound=True,\n        )\n        sg.add_ingress_rule(\n            peer=ec2.Peer.any_ipv4(),\n            connection=ec2.Port.tcp(22),\n        )\n\n        (3)\n        host = ec2.Instance(\n            self, \"MyFirstEc2Instance\",\n            instance_type=ec2.InstanceType(\"t2.micro\"),\n            machine_image=ec2.MachineImage.latest_amazon_linux(),\n            vpc=vpc,\n            vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),\n            security_group=sg,\n            key_name=key_name\n        )\n\n\n\n\n\n1\n\u307e\u305a\u6700\u521d\u306b\uff0cVPC\u3092\u5b9a\u7fa9\u3059\u308b\uff0e\n\n\n2\n\u6b21\u306b\uff0c security group (SG) \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u4efb\u610f\u306eIPv4\u306e\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\uff0c\u30dd\u30fc\u30c822 (SSH\u306e\u63a5\u7d9a\u306b\u4f7f\u7528\u3055\u308c\u308b)\u3078\u306e\u63a5\u7d9a\u3092\u8a31\u53ef\u3057\u3066\u3044\u308b\uff0e\n\u305d\u308c\u4ee5\u5916\u306e\u63a5\u7d9a\u306f\u62d2\u7d76\u3055\u308c\u308b\uff0e\n\n\n3\n\u6700\u5f8c\u306b\uff0c\u4e0a\u8a18\u3067\u4f5c\u3063\u305f VPC\u3068 SG \u304c\u4ed8\u4e0e\u3055\u308c\u305f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\uff0e\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306f t2.micro \u3092\u9078\u629e\u3057\uff0c Amazon Linux \u3092OS\u3068\u3057\u3066\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\u305d\u308c\u305e\u308c\u306b\u3064\u3044\u3066\uff0c\u3082\u3046\u5c11\u3057\u8a73\u3057\u304f\u8aac\u660e\u3057\u3088\u3046\uff0e\n\n4.3.1. VPC (Virtual Private Cloud)\n\nVPC \u306e\u30a2\u30a4\u30b3\u30f3\n\n\nVPC \u306f AWS \u4e0a\u306b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u30c4\u30fc\u30eb\u3067\u3042\u308b\uff0e\u9ad8\u5ea6\u306a\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u306b\u306f\uff0c\u8907\u6570\u306e\u30b5\u30fc\u30d0\u30fc\u3092\u9023\u52d5\u3055\u305b\u3066\u8a08\u7b97\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308b\u304c\uff0c\u305d\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u4e92\u3044\u306e\u30a2\u30c9\u30ec\u30b9\u306a\u3069\u3092\u7ba1\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\uff0c\u305d\u3046\u3044\u3063\u305f\u76ee\u7684\u3067VPC\u306f\u6709\u7528\u3067\u3042\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u306f\u4e00\u3064\u3057\u304b\u8d77\u52d5\u3057\u306a\u3044\u306e\u3067\uff0cVPC\u306e\u6069\u6075\u306f\u3088\u304f\u5206\u304b\u3089\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\u3057\u304b\u3057\uff0cEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u5fc5\u305aVPC\u306e\u4e2d\u306b\u914d\u7f6e\u3055\u308c\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0c\u3068\u3044\u3046\u5236\u7d04\u304c\u3042\u308b\u306e\u3067\uff0c\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u3082\u30df\u30cb\u30de\u30eb\u306aVPC\u3092\u69cb\u6210\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306e\u305f\u3081\u306b\uff0cVPC\u306e\u30b3\u30fc\u30c9\u306b\u3064\u3044\u3066\u3082\u3046\u5c11\u3057\u8a73\u3057\u304f\u8aac\u660e\u3057\u3088\u3046\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\nvpc = ec2.Vpc(\n    self, \"MyFirstEc2-Vpc\",\n    max_azs=1,\n    cidr=\"10.10.0.0/23\",\n    subnet_configuration=[\n        ec2.SubnetConfiguration(\n            name=\"public\",\n            subnet_type=ec2.SubnetType.PUBLIC,\n        )\n    ],\n    nat_gateways=0,\n)\n\n\n\n\n\nmax_azs=1 : \u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\uff0c\u524d\u7ae0\u3067\u8aac\u660e\u3057\u305f avaialibility zone (AZ) \u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u7279\u306b\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u969c\u5bb3\u306a\u3069\u3092\u6c17\u306b\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\u306e\u3067 1 \u306b\u3057\u3066\u3044\u308b\uff0e\n\n\ncidr=\"10.10.0.0/23\" : \u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\uff0cVPC\u5185\u306eIPv4\u306e\u30ec\u30f3\u30b8\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\nCIDR\u8a18\u6cd5\u306b\u3064\u3044\u3066\u306f\uff0c Wikipedia\u306a\u3069\u3092\u53c2\u7167\uff0e\n10.10.0.0/23 \u306f 10.10.0.0 \u304b\u3089 10.10.1.255 \u307e\u3067\u306e512\u500b\u306e\u9023\u7d9a\u3057\u305f\u30a2\u30c9\u30ec\u30b9\u7bc4\u56f2\u3092\u6307\u3057\u3066\u3044\u308b\uff0e\n\u3064\u307e\u308a\uff0c\u3053\u306eVPC\u3067\u306f\u6700\u5927\u3067512\u500b\u306e\u30e6\u30cb\u30fc\u30af\u306aIPv4\u30a2\u30c9\u30ec\u30b9\u304c\u4f7f\u3048\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\n\u4eca\u56de\u306f\u30b5\u30fc\u30d0\u30fc\u306f\u4e00\u3064\u306a\u306e\u3067512\u500b\u306f\u660e\u3089\u304b\u306b\u591a\u3059\u304e\u308b\u304c\uff0cVPC\u306f\u30a2\u30c9\u30ec\u30b9\u306e\u6570\u306f\u3069\u308c\u3060\u3051\u4f5c\u6210\u3057\u3066\u3082\u7121\u6599\u306a\u306e\u3067\uff0c\u591a\u3081\u306b\u4f5c\u6210\u3057\u305f\uff0e\n\n\nsubnet_configuration=\u2026\u200b : \u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\uff0cVPC\u306b\u3069\u306e\u3088\u3046\u306a\u30b5\u30d6\u30cd\u30c3\u30c8\u3092\u4f5c\u308b\u304b\uff0c\u3092\u6c7a\u3081\u3066\u3044\u308b\uff0e\n\u30b5\u30d6\u30cd\u30c3\u30c8\u306e\u7a2e\u985e\u306b\u306f private subnet \u3068 public subnet \u306e\u4e8c\u7a2e\u985e\u304c\u3042\u308b\uff0e\nprivate subnet \u306f\u57fa\u672c\u7684\u306b\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3068\u306f\u906e\u65ad\u3055\u308c\u305f\u30b5\u30d6\u30cd\u30c3\u30c8\u74b0\u5883\u3067\u3042\u308b\uff0e\n\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3068\u7e4b\u304c\u3063\u3066\u3044\u306a\u3044\u306e\u3067\uff0c\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306f\u6975\u3081\u3066\u9ad8\u304f\uff0c VPC \u5185\u306e\u30b5\u30fc\u30d0\u30fc\u3068\u306e\u307f\u901a\u4fe1\u3092\u884c\u3048\u3070\u3088\u3044 EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u3053\u3053\u306b\u914d\u7f6e\u3059\u308b\uff0e\nPublic subnet \u3068\u306f\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u7e4b\u304c\u3063\u305f\u30b5\u30d6\u30cd\u30c3\u30c8\u3067\u3042\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3059\u308b\u30b5\u30fc\u30d0\u30fc\u306f\uff0c\u5916\u304b\u3089SSH\u3067\u30ed\u30b0\u30a4\u30f3\u3092\u884c\u3044\u305f\u3044\u306e\u3067\uff0c Public subnet \u5185\u306b\u914d\u7f6e\u3059\u308b\uff0e\n\u3088\u308a\u8a73\u7d30\u306a\u8a18\u8ff0\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3092\u53c2\u7167\uff0e\n\n\nnatgateways=0 : \u3053\u308c\u306f\u5c11\u3057\u9ad8\u5ea6\u306a\u5185\u5bb9\u306a\u306e\u3067\u7701\u7565\u3059\u308b\n(\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167)\uff0e\n\u304c\uff0c\u3053\u308c\u30920\u306b\u3057\u3066\u304a\u304b\u306a\u3044\u3068\uff0cNAT Gateway \u306e\u5229\u7528\u6599\u91d1\u304c\u767a\u751f\u3057\u3066\u3057\u307e\u3046\u306e\u3067\uff0c\u6ce8\u610f\uff01\n\n\n\n\n\n\n\n\n\n4.3.2. Security Group\nSecurity group (SG) \u306f\uff0c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u4ed8\u4e0e\u3059\u308b\u3053\u3068\u306e\u3067\u304d\u308b\u4eee\u60f3\u30d5\u30a1\u30a4\u30a2\u30fc\u30a6\u30a9\u30fc\u30eb\u3067\u3042\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u7279\u5b9a\u306e IP \u30a2\u30c9\u30ec\u30b9\u304b\u3089\u6765\u305f\u63a5\u7d9a\u3092\u8a31\u53ef\u30fb\u62d2\u7d76\u3057\u305f\u308a\u3000(\u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u30fb\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u5236\u9650) \uff0c\u9006\u306b\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u7981\u6b62\u3057\u305f\u308a (\u30a2\u30a6\u30c8\u30d0\u30a6\u30f3\u30c9\u30fb\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u5236\u9650) \u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30b3\u30fc\u30c9\u306e\u8a72\u5f53\u90e8\u5206\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\nsg = ec2.SecurityGroup(\n    self, \"MyFirstEc2Vpc-Sg\",\n    vpc=vpc,\n    allow_all_outbound=True,\n)\nsg.add_ingress_rule(\n    peer=ec2.Peer.any_ipv4(),\n    connection=ec2.Port.tcp(22),\n)\n\n\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c SSH \u306b\u3088\u308b\u5916\u90e8\u304b\u3089\u306e\u63a5\u7d9a\u3092\u8a31\u5bb9\u3059\u308b\u305f\u3081\uff0c sg.add_ingress_rule(peer=ec2.Peer.any_ipv4(), connection=ec2.Port.tcp(22)) \u306b\u3088\u308a\uff0c\u3059\u3079\u3066\u306e IPv4 \u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30dd\u30fc\u30c822\u756a\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u5bb9\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c SSH \u3067 EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u306e\u3061\uff0c\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u304b\u3089\u30d7\u30ed\u30b0\u30e9\u30e0\u306a\u3069\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3088\u3046\uff0c allow_all_outbound=True \u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n\nSSH \u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f22\u756a\u30dd\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u306e\u304c\u6163\u4f8b\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u89b3\u70b9\u304b\u3089\u306f\uff0cSSH\u306e\u63a5\u7d9a\u306f\u81ea\u5b85\u3084\u5927\u5b66\u30fb\u8077\u5834\u306a\u3069\u7279\u5b9a\u306e\u5730\u70b9\u304b\u3089\u306e\u63a5\u7d9a\u306e\u307f\u3092\u8a31\u3059\u65b9\u304c\u671b\u307e\u3057\u3044\uff0e\n\n\n\n\n\n\n4.3.3. EC2 (Elastic Compute Cloud)\n\nEC2 \u306e\u30a2\u30a4\u30b3\u30f3\n\n\nEC2 \u306f AWS \u4e0a\u306b\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u7acb\u3061\u4e0a\u3052\u308b\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\uff0e\n\u500b\u3005\u306e\u8d77\u52d5\u72b6\u614b\u306b\u3042\u308b\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306e\u3053\u3068\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 (instance) \u3068\u3088\u3076\n(\u3057\u304b\u3057\uff0c\u53e3\u8a9e\u7684\u306a\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u3068\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u3044\u3046\u8a00\u8449\u306f\u76f8\u4e92\u4e92\u63db\u7684\u306b\u7528\u3044\u3089\u308c\u308b\u3053\u3068\u304c\u591a\u3044)\uff0e\n\n\nTable 2. EC2 instance types\n\n\n\n\n\n\n\n\n\nInstance\nvCPU\nMemory (GiB)\nNetwork bandwidth (Gbps)\nPrice per hour ($)\n\n\n\n\nt2.micro\n1\n1\n-\n0.0116\n\n\nt2.small\n1\n2\n-\n0.023\n\n\nt2.medium\n2\n4\n-\n0.0464\n\n\nc5.24xlarge\n96\n192\n25\n4.08\n\n\nc5n.18xlarge\n72\n192\n100\n3.888\n\n\nx1e.16xlarge\n64\n1952\n10\n13.344\n\n\n\nTable 2 \u304b\u3089\u308f\u304b\u308b\u3088\u3046\u306b\uff0c CPU \u306f1\u30b3\u30a2\u304b\u308996\u30b3\u30a2\u307e\u3067\uff0c\u30e1\u30e2\u30ea\u30fc\u306f 1GB \u304b\u3089 2TB \u4ee5\u4e0a\u307e\u3067\uff0c\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5e2f\u57df\u306f\u6700\u5927\u3067100Gbps\u307e\u3067\uff0c\u5e45\u5e83\u304f\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u307e\u305f\uff0c\u6642\u9593\u3042\u305f\u308a\u306e\u6599\u91d1\u306f\uff0cCPU\u30fb\u30e1\u30e2\u30ea\u30fc\u306e\u5360\u6709\u6570\u306b\u307b\u307c\u6bd4\u4f8b\u3059\u308b\u5f62\u3067\u5897\u52a0\u3059\u308b\uff0e\nEC2 \u306f\u30b5\u30fc\u30d0\u30fc\u306e\u8d77\u52d5\u6642\u9593\u3092\u79d2\u5358\u4f4d\u3067\u8a18\u9332\u3057\u3066\u304a\u308a\uff0c\u5229\u7528\u6599\u91d1\u306f\u4f7f\u7528\u6642\u9593\u306b\u6bd4\u4f8b\u3059\u308b\u5f62\u3067\u6c7a\u5b9a\u3055\u308c\u308b\uff0e\n\u4f8b\u3048\u3070\uff0c t2.medium \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u309210\u6642\u9593\u8d77\u52d5\u3057\u305f\u5834\u5408\uff0c0.0464 * 10 = 0.464 \u30c9\u30eb\u306e\u6599\u91d1\u304c\u767a\u751f\u3059\u308b\uff0e\n\n\n\n\n\n\n\nAWS \u306b\u306f \u7121\u6599\u5229\u7528\u67a0 \u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\uff0c t2.micro \u3067\u3042\u308c\u3070\u6708\u306b750\u6642\u9593\u307e\u3067\u306f\u7121\u6599\u3067\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\nTable 2 \u306e\u4fa1\u683c\u306f us-east-1 \u306e\u3082\u306e\u3067\u3042\u308b\uff0e\n\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u3088\u3063\u3066\u591a\u5c11\u4fa1\u683c\u8a2d\u5b9a\u304c\u7570\u306a\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u4e0a\u8a18\u3067 t2.micro \u306e $0.0116 / hour \u3068\u3044\u3046\u91d1\u984d\u306f\uff0c On-demand \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u3044\u3046\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u305f\u5834\u5408\u306e\u4fa1\u683c\u3067\u3042\u308b\uff0e\nEC2 \u3067\u306f\u307b\u304b\u306b\uff0c Spot instance \u3068\u3088\u3070\u308c\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3082\u5b58\u5728\u3057\u3059\u308b\uff0e\nSpot instance \u306f\uff0cAWS\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u8ca0\u8377\u304c\u5897\u3048\u305f\u5834\u5408\uff0c\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u5b9f\u884c\u4e2d\u3067\u3042\u3063\u3066\u3082AWS\u306e\u5224\u65ad\u306b\u3088\u308a\u5f37\u5236\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3055\u308c\u308b\uff0c\u3068\u3044\u3046\u4e0d\u4fbf\u3055\u3092\u62b1\u3048\u3066\u3044\u308b\u306e\u3060\u304c\uff0c\u305d\u306e\u5206\u5927\u5e45\u306b\u5b89\u3044\u6599\u91d1\u8a2d\u5b9a\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\nAWS \u3067\u4e00\u6642\u7684\u306b\u751f\u3058\u305f\u4f59\u5270\u306a\u7a7a\u304dCPU\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u5272\u5b89\u3067\u8cb8\u3057\u51fa\u3059\uff0c\u3068\u3044\u3046\u767a\u60f3\u3067\u3042\u308b\uff0e\n\u79d1\u5b66\u8a08\u7b97\u3084\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u306a\u3069\u306e\u7528\u9014\u3067\u30b3\u30b9\u30c8\u3092\u524a\u6e1b\u3059\u308b\u76ee\u7684\u3067\uff0c Spot Instance \u3092\u6d3b\u7528\u3059\u308b\u4e8b\u4f8b\u3082\u591a\u6570\u5831\u544a\u3055\u308c\u3066\u3044\u308b\uff0e\n\n\n\n\nEC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u30b3\u30fc\u30c9\u306e\u8a72\u5f53\u90e8\u5206\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\nhost = ec2.Instance(\n    self, \"MyFirstEc2Instance\",\n    instance_type=ec2.InstanceType(\"t2.micro\"),\n    machine_image=ec2.MachineImage.latest_amazon_linux(),\n    vpc=vpc,\n    vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),\n    security_group=sg,\n    key_name=key_name\n)\n\n\n\u3053\u3053\u3067\u306f\uff0c t2.micro \u3068\u3044\u3046\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u3044\u308b\uff0e\n\u3055\u3089\u306b\uff0c machine_image \u3068\u3057\u3066\uff0c\nAmazon Linux\n\u3092\u9078\u629e\u3057\u3066\u3044\u308b\n(Machine image \u306f OS \u3068\u4f3c\u305f\u6982\u5ff5\u3067\u3042\u308b\uff0e\nMachine image \u306b\u3064\u3044\u3066\u306f\uff0c Section 6 \u3067\u3088\u308a\u8a73\u3057\u304f\u89e6\u308c\u308b)\uff0e\n\u3055\u3089\u306b\uff0c\u4e0a\u3067\u5b9a\u7fa9\u3057\u305f VPC, SG \u3092\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u4ed8\u4e0e\u3057\u3066\u3044\u308b\uff0e\n\u4ee5\u4e0a\u304c\uff0c\u4eca\u56de\u4f7f\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u7c21\u5358\u306a\u89e3\u8aac\u3067\u3042\u3063\u305f\uff0e\n\u30df\u30cb\u30de\u30eb\u306a\u5f62\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u306f\u3042\u308b\u304c\uff0c\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u4f5c\u6210\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u304c\u304a\u308f\u304b\u308a\u3044\u305f\u3060\u3051\u305f\u3060\u308d\u3046\u304b\uff1f\n\n\n\n4.4. \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\n\u3055\u3066\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30b3\u30fc\u30c9\u306e\u7406\u89e3\u304c\u3067\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u969b\u306b\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\u7e70\u308a\u8fd4\u3057\u306b\u306a\u308b\u304c\uff0c Section 4.1 \u3067\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u304c\u524d\u63d0\u3067\u3042\u308b\uff0e\n\n4.4.1. Python \u306e\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\u307e\u305a\u306f\uff0cPython \u306e\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\u4ee5\u4e0b\u3067\u306f\uff0cPython \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u7ba1\u7406\u3059\u308b\u30c4\u30fc\u30eb\u3068\u3057\u3066\uff0c venv \u3092\u4f7f\u7528\u3059\u308b\uff0e\n\u307e\u305a\u306f\uff0c handson/ec2-get-started \u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u3088\u3046\uff0e\n\n$ cd handson/ec2-get-started\n\n\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u79fb\u52d5\u3057\u305f\u3089\uff0c venv \u3067\u65b0\u3057\u3044\u4eee\u60f3\u74b0\u5883\u3092\u4f5c\u6210\u3057\uff0c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n\u3053\u308c\u3067 Python \u306e\u74b0\u5883\u69cb\u7bc9\u306f\u5b8c\u4e86\u3060\uff0e\n\n\n\n\n\n\n\nvenv \u306e\u7c21\u5358\u306a\u8aac\u660e\u306f Section 15.7 \u306b\u8a18\u8ff0\u3057\u3066\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u74b0\u5883\u306b\u3088\u3063\u3066\u306f pip \u3067\u306f\u306a\u304f pip3 \u3042\u308b\u3044\u306f python3 -m pip \u306b\u7f6e\u304d\u63db\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\n\n4.4.2. AWS \u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u30bb\u30c3\u30c8\u3059\u308b\nAWS CLI \u304a\u3088\u3073 AWS CDK \u3092\u4f7f\u3046\u306b\u306f\uff0c AWS \u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u767a\u884c\u306b\u3064\u3044\u3066\u306f Section 15.2 \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u767a\u884c\u3057\u305f\u3089\uff0c Section 15.3 \u3092\u53c2\u7167\u3057\uff0c\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u8a2d\u5b9a\u3092\u884c\u3046\uff0e\n\u624b\u9806\u3092\u3053\u3053\u306b\u77ed\u304f\u8981\u7d04\u3059\u308b\u3068\uff0c\u4e00\u3064\u76ee\u306e\u65b9\u6cd5\u306f AWS_ACCESS_KEY_ID \u306a\u3069\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3084\u308a\u65b9\u3067\u3042\u308b\uff0e\n\u3082\u3046\u4e00\u3064\u306e\u65b9\u6cd5\u306f\uff0c ~/.aws/credentials \u306b\u8a8d\u8a3c\u60c5\u5831\u3092\u4fdd\u5b58\u3057\u3066\u304a\u304f\u65b9\u5f0f\u3067\u3042\u308b\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u306f AWS CLI/CDK \u3092\u4f7f\u7528\u3059\u308b\u3046\u3048\u3067\u5171\u901a\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u306a\u308b\u306e\u3067\uff0c\u3057\u3063\u304b\u308a\u3068\u7406\u89e3\u3057\u3066\u304a\u304f\u3088\u3046\u306b\uff0e\n\n\n4.4.3. SSH\u9375\u3092\u751f\u6210\nEC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f SSH \u3092\u4f7f\u3063\u3066\u30ed\u30b0\u30a4\u30f3\u3059\u308b\uff0e\nEC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u306e\u306b\u5148\u884c\u3057\u3066\uff0c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u5c02\u7528\u306b\u4f7f\u3046SSH\u306e\u516c\u958b\u9375\u30fb\u79d8\u5bc6\u9375\u306e\u30da\u30a2\u3092\u6e96\u5099\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u6b21\u306e AWS CLI \u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\uff0c HirakeGoma \u3068\u3044\u3046\u540d\u524d\u306e\u3064\u3044\u305f\u9375\u3092\u751f\u6210\u3059\u308b\uff0e\n\n$ export KEY_NAME=\"HirakeGoma\"\n$ aws ec2 create-key-pair --key-name ${KEY_NAME} --query 'KeyMaterial' --output text > ${KEY_NAME}.pem\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b HirakeGoma.pem \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u308b\uff0e\u3053\u308c\u304c\uff0c\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u79d8\u5bc6\u9375\u3067\u3042\u308b\uff0e SSH \u3067\u3053\u306e\u9375\u3092\u4f7f\u3046\u305f\u3081\uff0c ~/.ssh/ \u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u9375\u3092\u79fb\u52d5\u3059\u308b\uff0e\n\u3055\u3089\u306b\uff0c\u79d8\u5bc6\u9375\u304c\u66f8\u304d\u63db\u3048\u3089\u308c\u305f\u308a\u7b2c\u4e09\u8005\u306b\u95b2\u89a7\u3055\u308c\u306a\u3044\u3088\u3046\uff0c\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3092 400 \u306b\u8a2d\u5b9a\u3059\u308b\uff0e\n\n$ mv HirakeGoma.pem ~/.ssh/\n$ chmod 400 ~/.ssh/HirakeGoma.pem\n\n\n\n4.4.4. \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n\u3053\u308c\u307e\u3067\u306e\u30b9\u30c6\u30c3\u30d7\u3067\uff0c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u6e96\u5099\u304c\u6574\u3063\u305f\uff01\n\u65e9\u901f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092 AWS \u306b\u30c7\u30d7\u30ed\u30a4\u3057\u3088\u3046\uff0e\n-c key_name=\"HirakeGoma\" \u3068\u3044\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\uff0c\u5148\u307b\u3069\u751f\u6210\u3057\u305f HirakeGoma \u3068\u3044\u3046\u540d\u524d\u306e\u9375\u3092\u4f7f\u3046\u3088\u3046\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\n$ cdk deploy -c key_name=\"HirakeGoma\"\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c VPC\uff0c EC2 \u306a\u3069\u304cAWS\u4e0a\u306b\u5c55\u958b\u3055\u308c\u308b\uff0e\n\u305d\u3057\u3066\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u51fa\u529b\u306e\u6700\u5f8c\u306b Figure 11 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u51fa\u529b\u306e\u4e2d\u3067 InstancePublicIp \u306b\u7d9a\u304f\u6570\u5b57\u304c\uff0c\u8d77\u52d5\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u3067\u3042\u308b\uff0e\nIP \u30a2\u30c9\u30ec\u30b9\u306f\u30c7\u30d7\u30ed\u30a4\u3054\u3068\u306b\u30e9\u30f3\u30c0\u30e0\u306a\u30a2\u30c9\u30ec\u30b9\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\n\n\n\nFigure 11. CDK\u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\n\n\n4.4.5. SSH \u3067\u30ed\u30b0\u30a4\u30f3\n\u65e9\u901f\uff0cSSH\u3000\u3067\u63a5\u7d9a\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ ssh -i ~/.ssh/HirakeGoma.pem ec2-user@<IP address>\n\n-i \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\uff0c\u5148\u307b\u3069\u751f\u6210\u3057\u305f\u79d8\u5bc6\u9375\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\nEC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067 ec2-user \u3068\u3044\u3046\u540d\u524d\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u4f5c\u3089\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u305d\u308c\u3092\u4f7f\u7528\u3059\u308b\uff0e\n\u6700\u5f8c\u306b\uff0c <IP address> \u306e\u90e8\u5206\u306f\u81ea\u8eab\u304c\u4f5c\u6210\u3057\u305fEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306eIP\u30a2\u30c9\u30ec\u30b9\u3067\u7f6e\u304d\u63db\u3048\u308b (12.345.678.9 \u306a\u3069\uff09\uff0e\n\u30ed\u30b0\u30a4\u30f3\u306b\u6210\u529f\u3059\u308b\u3068\uff0c Figure 12 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b\uff0e\n\u30ea\u30e2\u30fc\u30c8\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u308b\u306e\u3067\uff0c\u30d7\u30ed\u30f3\u30d7\u30c8\u304c [ec2-user@ip-10-10-1-217 ~]$ \u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\n\n\nFigure 12. SSH \u3067 EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30ed\u30b0\u30a4\u30f3\n\n\u304a\u3081\u3067\u3068\u3046\uff01\u3053\u308c\u3067\uff0c\u3081\u3067\u305f\u304fAWS\u4e0a\u306bEC2\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\uff0c\u30ea\u30e2\u30fc\u30c8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\uff01\n\n\n4.4.6. \u8d77\u52d5\u3057\u305f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u904a\u3093\u3067\u307f\u308b\n\u305b\u3063\u304b\u304f\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u305f\u306e\u3067\uff0c\u5c11\u3057\u904a\u3093\u3067\u307f\u3088\u3046\uff0e\n\u30ed\u30b0\u30a4\u30f3\u3057\u305f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\nCPU \u306e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n$ cat /proc/cpuinfo\n\nprocessor\t: 0\nvendor_id\t: GenuineIntel\ncpu family\t: 6\nmodel\t\t: 63\nmodel name\t: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz\nstepping\t: 2\nmicrocode\t: 0x43\ncpu MHz\t\t: 2400.096\ncache size\t: 30720 KB\n\n\u6b21\u306b\uff0c\u5b9f\u884c\u4e2d\u306e\u30d7\u30ed\u30bb\u30b9\u3084\u30e1\u30e2\u30ea\u306e\u6d88\u8cbb\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n$  top -n 1\n\ntop - 09:29:19 up 43 min,  1 user,  load average: 0.00, 0.00, 0.00\nTasks:  76 total,   1 running,  51 sleeping,   0 stopped,   0 zombie\nCpu(s):  0.3%us,  0.3%sy,  0.1%ni, 98.9%id,  0.2%wa,  0.0%hi,  0.0%si,  0.2%st\nMem:   1009140k total,   270760k used,   738380k free,    14340k buffers\nSwap:        0k total,        0k used,        0k free,   185856k cached\n\n  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND\n    1 root      20   0 19696 2596 2268 S  0.0  0.3   0:01.21 init\n    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd\n    3 root      20   0     0    0    0 I  0.0  0.0   0:00.00 kworker/0:0\n\nt2.micro \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306a\u306e\u3067\uff0c 1009140k = 1GB \u306e\u30e1\u30e2\u30ea\u30fc\u304c\u3042\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u4eca\u56de\u8d77\u52d5\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f Python 2 \u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3060\u304c\uff0c Python 3 \u306f\u5165\u3063\u3066\u3044\u306a\u3044\uff0e\nPython 3.6 \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3063\u3066\u307f\u3088\u3046\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u7c21\u5358\u3067\u3042\u308b\uff0e\n\n$ sudo yum update -y\n$ sudo yum install -y python36\n\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f Python \u3092\u8d77\u52d5\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ python3\nPython 3.6.10 (default, Feb 10 2020, 19:55:14)\n[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>>\n\nPython \u306e\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u304c\u8d77\u52d5\u3057\u305f\uff01\nCtrl + D \u3042\u308b\u3044\u306f exit() \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\uff0c\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3055\u3066\uff0c\u30b5\u30fc\u30d0\u30fc\u3067\u306e\u304a\u904a\u3073\u306f\u3053\u3093\u306a\u3068\u3053\u308d\u306b\u3057\u3066\u304a\u3053\u3046 (\u8208\u5473\u304c\u3042\u308c\u3070\u5404\u81ea\u3044\u308d\u3044\u308d\u3068\u8a66\u3057\u3066\u307f\u308b\u3068\u826f\u3044) \uff0e\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30ed\u30b0\u30a2\u30a6\u30c8\u3059\u308b\uff0e\n\n\n\n4.4.7. AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d\n\u3053\u308c\u307e\u3067\u306f\uff0c\u3059\u3079\u3066\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089 EC2 \u306b\u95a2\u9023\u3059\u308b\u64cd\u4f5c\u3092\u884c\u3063\u3066\u304d\u305f\uff0e\nEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u305f\u308a\uff0c\u30b5\u30fc\u30d0\u30fc\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3059\u308b\u306a\u3069\u306e\u64cd\u4f5c\u306f\uff0cAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u5b9f\u884c\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\uff0e\n\u8efd\u304f\u3053\u308c\u3092\u7d39\u4ecb\u3057\u3088\u3046\uff0e\n\u307e\u305a\uff0c\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3092\u958b\u3044\u3066 AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\uff0e\n\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u3089\uff0c Services \u304b\u3089 EC2 \u3092\u691c\u7d22(\u9078\u629e)\u3059\u308b\uff0e\n\u6b21\u306b\uff0c\u5de6\u306e\u30b5\u30a4\u30c9\u30d0\u30fc\u306e Instances \u3068\u30da\u30fc\u30b8\u3092\u305f\u3069\u308b.\n\u3059\u308b\u3068\uff0c Figure 13 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u306e\u753b\u9762\u3067\uff0c\u81ea\u5206\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7ba1\u7406\u4e0b\u306b\u3042\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\u540c\u69d8\u306b\uff0cVPC\u30fbSG \u306b\u3064\u3044\u3066\u3082\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\n\n\nFigure 13. EC2 \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\n\n\n\n\n\n\n\n\n\u30b3\u30f3\u30bd\u30fc\u30eb\u53f3\u4e0a\u3067\uff0c\u6b63\u3057\u3044\u30ea\u30fc\u30b8\u30e7\u30f3 (\u4eca\u56de\u306e\u5834\u5408\u306f ap-northeast-1, Tokyo) \u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u304b\uff0c\u6ce8\u610f\u3059\u308b\uff01\n\n\n\n\n\u524d\u7ae0\u3067 CloudFormation \u306b\u3064\u3044\u3066\u89e6\u308c\u305f\u304c\uff0c\u4eca\u56de\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3082\uff0cCloudFormation \u306e\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\uff0e\n\u30b9\u30bf\u30c3\u30af (stack) \u3068\u306f\uff0c AWS \u30ea\u30bd\u30fc\u30b9\u306e\u96c6\u5408\u306e\u3053\u3068\u3092\u6307\u3059\uff0e\n\u4eca\u56de\u306e\u5834\u5408\u306f\uff0c VPC/EC2/SG \u306a\u3069\u304c\u30b9\u30bf\u30c3\u30af\u306e\u4e2d\u306b\u542b\u307e\u308c\u3066\u3044\u308b\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u3067 CloudFormation \u306e\u30da\u30fc\u30b8\u306b\u884c\u3063\u3066\u307f\u3088\u3046 (Figure 14)\uff0e\n\n\n\nFigure 14. CloudFormation \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\n\n\"MyFirstEc2\" \u3068\u3044\u3046\u540d\u524d\u306e\u30b9\u30bf\u30c3\u30af\u304c\u3042\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\u30af\u30ea\u30c3\u30af\u3092\u3057\u3066\u4e2d\u8eab\u3092\u898b\u3066\u307f\u308b\u3068\uff0cEC2, VPC \u306a\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u3053\u306e\u30b9\u30bf\u30c3\u30af\u306b\u7d10\u4ed8\u3044\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\n\n4.4.8. \u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\n\u3053\u308c\u306b\u3066\uff0c\u7b2c\u4e00\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u8aac\u660e\u3059\u3079\u304d\u4e8b\u67c4\u306f\u3059\u3079\u3066\u5b8c\u4e86\u3057\u305f\uff0e\n\u6700\u5f8c\u306b\uff0c\u4f7f\u308f\u306a\u304f\u306a\u3063\u305f\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\u306b\u306f\uff0c\u4e8c\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308b\uff0e\n\u4e00\u3064\u76ee\u306e\u65b9\u6cd5\u306f\uff0c\u524d\u7bc0\u306e Cloudformation \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u3067\uff0c \"Delete\" \u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3053\u3068\u3067\u3042\u308b (Figure 15)\uff0e\n\u3059\u308b\u3068\uff0c\u30b9\u30bf\u30c3\u30af\u306e\u72b6\u614b\u304c \"DELETE_IN_PROGRESS\" \u306b\u5909\u308f\u308a\uff0c\u524a\u9664\u304c\u5b8c\u4e86\u3059\u308b\u3068 CloudFormation \u306e\u30b9\u30bf\u30c3\u30af\u306e\u4e00\u89a7\u304b\u3089\u6d88\u3048\u308b\uff0e\n\n\n\nFigure 15. CloudFormation\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u304b\u3089\uff0c\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\n\n\u4e8c\u3064\u76ee\u306e\u65b9\u6cd5\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u884c\u3046\u65b9\u6cd5\u3067\u3042\u308b\uff0e\n\u5148\u307b\u3069\uff0c\u30c7\u30d7\u30ed\u30a4\u3092\u884c\u3063\u305f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306b\u623b\u308d\u3046\uff0e\n\u305d\u3046\u3057\u305f\u3089\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c\u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\u304c\u59cb\u307e\u308b\uff0e\n\u524a\u9664\u3057\u305f\u5f8c\u306f\uff0cVPC, EC2 \u306a\u3069\uff0c\u3059\u3079\u3066\u8de1\u5f62\u3082\u306a\u304f\u6d88\u3048\u53bb\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u81ea\u8eab\u3067\u78ba\u304b\u3081\u3088\u3046\uff0e\nCloudFormation \u3092\u7528\u3044\u308b\u3053\u3068\u3067\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e AWS \u30ea\u30bd\u30fc\u30b9\u3092\u4e00\u5ea6\u306b\u7ba1\u7406\u30fb\u524a\u9664\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\uff0c\u5927\u5909\u4fbf\u5229\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\u306f\u5404\u81ea\u3067\u5fc5\u305a\u884c\u3046\u3053\u3068\uff01\n\u884c\u308f\u306a\u304b\u3063\u305f\u5834\u5408\uff0c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6599\u91d1\u304c\u767a\u751f\u3057\u7d9a\u3051\u308b\u3053\u3068\u306b\u306a\u308b\uff01\n\n\n\n\n\u307e\u305f\uff0c\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u305f\u3081\u306b\u4f5c\u6210\u3057\u305f SSH \u9375\u30da\u30a2\u3082\u4e0d\u8981\u306a\u306e\u3067\uff0c\u524a\u9664\u3057\u3066\u304a\u304f\uff0e\n\u307e\u305a\uff0c EC2 \u5074\u306b\u767b\u9332\u3057\u3066\u3042\u308b\u516c\u958b\u9375\u3092\u524a\u9664\u3059\u308b\uff0e\n\u3053\u308c\u3082\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\u304a\u3088\u3073\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u4e8c\u3064\u306e\u65b9\u6cd5\u3067\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c EC2 \u306e\u753b\u9762\u306b\u884c\u304d\uff0c\u5de6\u306e\u30b5\u30a4\u30c9\u30d0\u30fc\u306e Key Pairs \u3092\u9078\u629e\u3059\u308b\uff0e\n\u9375\u306e\u4e00\u89a7\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3067\uff0c HirakeGoma \u3068\u3042\u308b\u9375\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\uff0c\u753b\u9762\u53f3\u4e0a\u306e Actions \u304b\u3089\uff0c Delete \u3092\u5b9f\u884c\u3059\u308b (Figure 16)\uff0e\n\n\n\nFigure 16. EC2\u3067SSH\u9375\u30da\u30a2\u3092\u524a\u9664\n\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\uff0e\n\n$ aws ec2 delete-key-pair --key-name \"HirakeGoma\"\n\n\u6700\u5f8c\u306b\uff0c\u30ed\u30fc\u30ab\u30eb\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u304b\u3089\u9375\u3092\u524a\u9664\u3059\u308b\uff0e\n\n$ rm -f ~/.ssh/HirakeGoma.pem\n\n\u3053\u308c\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u7247\u4ed8\u3051\u3082\u3059\u3079\u3066\u7d42\u4e86\u3060\uff0e\n\n\n\n\n\n\n\n\u306a\u304a\uff0c\u983b\u7e41\u306b EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u305f\u308a\u3059\u308b\u5834\u5408\u306f\uff0c\u3044\u3061\u3044\u3061 SSH \u9375\u3092\u524a\u9664\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\uff0e\n\n\n\n\n\n\n\n4.5. \u5c0f\u62ec\n\u3053\u3053\u307e\u3067\u304c\uff0c\u672c\u66f8\u306e\u7b2c\u4e00\u90e8\u306e\u5185\u5bb9\u3067\u3042\u308b\uff0e\n\u76db\u308a\u3060\u304f\u3055\u3093\u306e\u5185\u5bb9\u3067\u3042\u3063\u305f\u304c\uff0c\u3064\u3044\u3066\u3053\u308c\u305f\u3067\u3042\u308d\u3046\u304b\uff1f\nSection 2 \u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u5b9a\u7fa9\u3068\u7528\u8a9e\u306e\u8aac\u660e\u3092\u884c\u3063\u305f\u3042\u3068\uff0c\u306a\u305c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u306e\u304b\uff0c\u3068\u3044\u3046\u70b9\u3092\u8b70\u8ad6\u3057\u305f\uff0e\n\u7d9a\u3044\u3066 Section 3 \u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5b66\u3076\u5177\u4f53\u7684\u306a\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3068\u3057\u3066 AWS \u3092\u53d6\u308a\u4e0a\u3052\uff0c AWS \u3092\u4f7f\u7528\u3059\u308b\u306b\u3042\u305f\u308a\u6700\u4f4e\u9650\u5fc5\u8981\u306a\u77e5\u8b58\u3068\u7528\u8a9e\u306e\u8aac\u660e\u3092\u884c\u3063\u305f\uff0e\n\u3055\u3089\u306b\uff0c Section 4 \u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f AWS CLI \u3068 AWS CDK \u3092\u4f7f\u3063\u3066\uff0c\u81ea\u8eab\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30b5\u30fc\u30d0\u30fc\u3092 AWS \u4e0a\u306b\u7acb\u3061\u4e0a\u3052\u308b\u6f14\u7fd2\u3092\u884c\u3063\u305f\uff0e\n\u3053\u308c\u3089\u3092\u901a\u3058\u3066\uff0c\u3044\u304b\u306b\u7c21\u5358\u306b (\u305f\u3063\u305f\u6570\u884c\u306e\u30b3\u30de\u30f3\u30c9\u3067\uff01) \u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u7acb\u3061\u4e0a\u3052\u305f\u308a\uff0c\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304b\uff0c\u4f53\u9a13\u3067\u304d\u305f\u3060\u308d\u3046\uff0e\n\u7b46\u8005\u306f\uff0cSection 2 \u3067\u30af\u30e9\u30a6\u30c9\u306e\u6700\u3082\u91cd\u8981\u306a\u5074\u9762\u306f\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u306b\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u3092\u62e1\u5927\u30fb\u7e2e\u5c0f\u3067\u304d\u308b\u3053\u3068\u3067\u3042\u308b\uff0c\u3068\u8ff0\u3079\u305f\uff0e\n\u3053\u306e\u8a00\u8449\u306e\u610f\u5473\u304c\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u901a\u3058\u3066\u3088\u308a\u660e\u3089\u304b\u306b\u306a\u3063\u305f\u3060\u308d\u3046\u304b\uff1f\n\u3053\u3053\u3067\u5b66\u3093\u3060\u6280\u8853\u3092\u5c11\u3057\u5fdc\u7528\u3059\u308b\u3060\u3051\u3067\uff0c\u81ea\u5206\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u30db\u30b9\u30c8\u3059\u308b\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u4f5c\u6210\u3057\u305f\u308a\uff0c\u5927\u91cf\u306e\u30b3\u30a2\u3092\u642d\u8f09\u3057\u305f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u7528\u610f\u3057\u3066\u79d1\u5b66\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\u306a\u3069\uff0c\u3044\u308d\u3044\u308d\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5b9f\u73fe\u3067\u304d\u308b\uff0e\n\u6b21\u7ae0\u304b\u3089\u306f\uff0c\u4eca\u56de\u5b66\u3093\u3060\u30af\u30e9\u30a6\u30c9\u306e\u6280\u8853\u3092\u57fa\u306b\uff0c\u3088\u308a\u73fe\u5b9f\u306b\u5373\u3057\u305f\u554f\u984c\u3092\u89e3\u304f\u3053\u3068\u3092\u4f53\u9a13\u3057\u3066\u3082\u3089\u3046\uff0e\n\u304a\u697d\u3057\u307f\u306b\uff01\n\n\n\n\n5. \u30af\u30e9\u30a6\u30c9\u3067\u884c\u3046\u79d1\u5b66\u8a08\u7b97\u30fb\u6a5f\u68b0\u5b66\u7fd2\n\n\u8a08\u7b97\u6a5f\u304c\u767a\u9054\u3057\u305f\u73fe\u4ee3\u3067\u306f\uff0c\u8a08\u7b97\u6a5f\u306b\u3088\u308b\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u3084\u30d3\u30c3\u30b0\u30c7\u30fc\u30bf\u306e\u89e3\u6790\u306f\uff0c\u79d1\u5b66\u30fb\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u306e\u7814\u7a76\u306e\u4e3b\u8981\u306a\u67f1\u3067\u3042\u308b\uff0e\n\u3053\u308c\u3089\u306e\u5927\u898f\u6a21\u306a\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306f\u6700\u9069\u3067\u3042\u308b\uff0e\n\u672c\u7ae0\u304b\u3089\u59cb\u307e\u308b\u7b2c\u4e8c\u90e8\u3067\u306f\uff0c\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u79d1\u5b66\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\u306e\u304b\u3092\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u3068\u3082\u306b\u4f53\u9a13\u3057\u3066\u3082\u3089\u3046\uff0e\n\u79d1\u5b66\u8a08\u7b97\u306e\u5177\u4f53\u7684\u306a\u984c\u6750\u3068\u3057\u3066\uff0c\u4eca\u56de\u306f\u6a5f\u68b0\u5b66\u7fd2(\u6df1\u5c64\u5b66\u7fd2)\u3092\u53d6\u308a\u4e0a\u3052\u308b\uff0e\n\u306a\u304a\uff0c\u672c\u66f8\u3067\u306f PyTorch \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\u6df1\u5c64\u5b66\u7fd2\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u88c5\u3059\u308b\u304c\uff0c\u6df1\u5c64\u5b66\u7fd2\u304a\u3088\u3073 PyTorch \u306e\u77e5\u8b58\u306f\u4e0d\u8981\u3067\u3042\u308b\uff0e\n\u8b1b\u7fa9\u3067\u306f\u306a\u305c\u30fb\u3069\u3046\u3084\u3063\u3066\u6df1\u5c64\u5b66\u7fd2\u3092\u30af\u30e9\u30a6\u30c9\u3067\u5b9f\u884c\u3059\u308b\u304b\u306b\u4e3b\u773c\u3092\u7f6e\u3044\u3066\u3044\u308b\u306e\u3067\uff0c\u5b9f\u884c\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u8a73\u7d30\u306b\u306f\u7acb\u3061\u5165\u3089\u306a\u3044\uff0e\n\u5c06\u6765\uff0c\u81ea\u5206\u3067\u6df1\u5c64\u5b66\u7fd2\u3092\u4f7f\u3046\u6a5f\u4f1a\u304c\u6765\u305f\u3068\u304d\u306b\uff0c\u8a73\u3057\u304f\u5b66\u3093\u3067\u3082\u3089\u3044\u305f\u3044\uff0e\n\n5.1. \u306a\u305c\u6a5f\u68b0\u5b66\u7fd2\u3092\u30af\u30e9\u30a6\u30c9\u3067\u884c\u3046\u306e\u304b\uff1f\n2010\u5e74\u9803\u306b\u59cb\u307e\u3063\u305f\u7b2c\u4e09\u6b21 AI \u30d6\u30fc\u30e0\u306e\u304a\u304b\u3052\u3067\uff0c\u5b66\u8853\u7814\u7a76\u3060\u3051\u3067\u306a\u304f\u793e\u4f1a\u30fb\u30d3\u30b8\u30cd\u30b9\u306e\u6587\u8108\u3067\u3082\u6a5f\u68b0\u5b66\u7fd2\u306b\u9ad8\u3044\u95a2\u5fc3\u304c\u5bc4\u305b\u3089\u308c\u3066\u3044\u308b\uff0e\n\u3068\u304f\u306b\uff0c\u6df1\u5c64\u5b66\u7fd2 (\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0) \u3068\u3088\u3070\u308c\u308b\u591a\u5c64\u306e\u30ec\u30a4\u30e4\u30fc\u304b\u3089\u306a\u308b\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u7528\u3044\u305f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\uff0c\u753b\u50cf\u8a8d\u8b58\u3084\u81ea\u7136\u8a00\u8a9e\u51e6\u7406\u306a\u3069\u306e\u5206\u91ce\u3067\u5727\u5012\u7684\u306b\u9ad8\u3044\u6027\u80fd\u3092\u5b9f\u73fe\u3057\uff0c\u9769\u547d\u3092\u3082\u305f\u3089\u3057\u3066\u3044\u308b\uff0e\n\u6df1\u5c64\u5b66\u7fd2\u306e\u7279\u5fb4\u306f\uff0c\u306a\u3093\u3068\u3044\u3063\u3066\u3082\u305d\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u591a\u3055\u3067\u3042\u308b\uff0e\n\u5c64\u304c\u6df1\u304f\u306a\u308b\u307b\u3069\uff0c\u5c64\u9593\u306e\u30cb\u30e5\u30fc\u30ed\u30f3\u3092\u7d50\u3076\u91cd\u307f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u6570\u304c\u5897\u5927\u3057\u3066\u3044\u304f\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u6700\u65b0\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3067\u3042\u308b GPT-3 \u306b\u306f1750\u5104\u500b\u3082\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u542b\u307e\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306a\u81a8\u5927\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6709\u3059\u308b\u3053\u3068\u3067\uff0c\u6df1\u5c64\u5b66\u7fd2\u306f\u9ad8\u3044\u8868\u73fe\u529b\u3068\u6c4e\u5316\u6027\u80fd\u3092\u5b9f\u73fe\u3057\u3066\u3044\u308b\u306e\u3067\u3042\u308b\uff0e\nGPT-3 \u306b\u9650\u3089\u305a\uff0c\u6700\u8fd1\u306e SOTA (State-of-the-art) \u306e\u6027\u80fd\u3092\u9054\u6210\u3059\u308b\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u306f\uff0c\u767e\u4e07\u304b\u3089\u5104\u306e\u30aa\u30fc\u30c0\u30fc\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5185\u5305\u3059\u308b\u3053\u3068\u306f\u983b\u7e41\u306b\u306a\u3063\u3066\u304d\u3066\u3044\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u5de8\u5927\u306a\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u3092\u8a13\u7df4 (\u6700\u9069\u5316) \u3055\u305b\u308b\u306e\u306f\uff0c\u5f53\u7136\u306e\u3053\u3068\u306a\u304c\u3089\u81a8\u5927\u306a\u8a08\u7b97\u30b3\u30b9\u30c8\u304c\u304b\u304b\u308b\uff0e\n\u7d50\u679c\u3068\u3057\u3066\uff0c\u3072\u3068\u3064\u306e\u8a08\u7b97\u6a5f\u3067\u306f\u4e38\u4e00\u65e5\u4ee5\u4e0a\u306e\u6642\u9593\u304c\u304b\u304b\u308b\u5834\u5408\u3082\u73cd\u3057\u304f\u306a\u3044\uff0e\n\u6df1\u5c64\u5b66\u7fd2\u306e\u767a\u5c55\u306e\u901f\u5ea6\u306f\u76ee\u899a\u307e\u3057\u304f\uff0c\u7814\u7a76\u30fb\u30d3\u30b8\u30cd\u30b9\u4e21\u65b9\u306e\u89b3\u70b9\u304b\u3089\u3082\uff0c\u3044\u304b\u306b\u30b9\u30eb\u30fc\u30d7\u30c3\u30c8\u3088\u304f\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u6700\u9069\u5316\u3092\u884c\u3048\u308b\u304b\u304c\u9375\u3068\u306a\u3063\u3066\u304f\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u306e\u306b\u3068\u3066\u3082\u6709\u52b9\u306a\u624b\u6bb5\u304c\uff0c\u30af\u30e9\u30a6\u30c9\u3067\u3042\u308b\uff01\nSection 4 \u3067\u305d\u306e\u7247\u9c57\u3092\u898b\u305f\u3088\u3046\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u30bc\u30ed\u304b\u3089\u6570\u5343\u306b\u81f3\u308b\u307e\u3067\u306e\u6570\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u52d5\u7684\u306b\u8d77\u52d5\u3057\uff0c\u4e26\u5217\u306b\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3055\u3089\u306b\uff0c\u6df1\u5c64\u5b66\u7fd2\u3092\u52a0\u901f\u3055\u305b\u308b\u76ee\u7684\u3067\uff0c\u6df1\u5c64\u5b66\u7fd2\u306e\u6f14\u7b97\u306b\u5c02\u7528\u8a2d\u8a08\u3055\u308c\u305f\u8a08\u7b97\u30c1\u30c3\u30d7 (GPU \u306a\u3069) \u304c\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u3068\uff0c\u305d\u306e\u3088\u3046\u306a\u5c02\u7528\u8a08\u7b97\u30c1\u30c3\u30d7\u3082\u7121\u5c3d\u8535\u306b\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u4e8b\u5b9f\uff0c\u5148\u8ff0\u3057\u305f GPT-3 \u306e\u5b66\u7fd2\u3082\uff0c\u8a73\u7d30\u306f\u660e\u304b\u3055\u308c\u3066\u3044\u306a\u3044\u304c\uff0cMicrosoft \u793e\u306e\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3063\u3066\u884c\u308f\u308c\u305f\u3068\u5831\u544a\u3055\u308c\u3066\u3044\u308b\uff0e\n\n\n5.2. GPU \u306b\u3088\u308b\u6df1\u5c64\u5b66\u7fd2\u306e\u9ad8\u901f\u5316\n\u6df1\u5c64\u5b66\u7fd2\u306e\u8a08\u7b97\u3067\u6b20\u304b\u3059\u3053\u3068\u306e\u3067\u304d\u306a\u3044\u6280\u8853\u3068\u3057\u3066\uff0c GPU (Graphics Processing Unit) \u306b\u3064\u3044\u3066\u5c11\u3057\u8aac\u660e\u3059\u308b\uff0e\nGPU \u306f\uff0c\u305d\u306e\u540d\u306e\u3068\u304a\u308a\uff0c\u5143\u3005\u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u51fa\u529b\u3059\u308b\u305f\u3081\u306e\u5c02\u7528\u8a08\u7b97\u30c1\u30c3\u30d7\u3067\u3042\u308b\uff0e\nCPU (Central Processing Unit) \u306b\u5bfe\u3057\uff0c\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u306e\u6f14\u7b97\u306b\u7279\u5316\u3057\u305f\u8a2d\u8a08\u304c\u306a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u8eab\u8fd1\u306a\u3068\u3053\u308d\u3067\u306f\uff0c XBox \u3084 PS5 \u306a\u3069\u306e\u30b2\u30fc\u30e0\u30b3\u30f3\u30bd\u30fc\u30eb\u306a\u3069\u306b\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\u3057\uff0c\u30cf\u30a4\u30a8\u30f3\u30c9\u306a\u30ce\u30fc\u30c8\u578b\u30fb\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u578b\u8a08\u7b97\u6a5f\u306b\u3082\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u3042\u308b\uff0e\n\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u3067\u306f\uff0c\u30b9\u30af\u30ea\u30fc\u30f3\u306b\u30a2\u30ec\u30a4\u72b6\u306b\u4e26\u3093\u3060\u6570\u767e\u4e07\u500b\u306e\u753b\u7d20\u3092\u30d3\u30c7\u30aa\u30ec\u30fc\u30c8 (30 fps) \u4ee5\u4e0a\u3067\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u305d\u306e\u305f\u3081\uff0cGPU\u306f\u30b3\u30a2\u3042\u305f\u308a\u306e\u6f14\u7b97\u80fd\u529b\u306f\u6bd4\u8f03\u7684\u5c0f\u3055\u3044\u304b\u308f\u308a\u306b\uff0c\u30c1\u30c3\u30d7\u3042\u305f\u308a\u6570\u767e\u304b\u3089\u6570\u5343\u306e\u30b3\u30a2\u3092\u642d\u8f09\u3057\u3066\u304a\u308a (Figure 17)\uff0c\u30b9\u30af\u30ea\u30fc\u30f3\u306e\u753b\u7d20\u3092\u4e26\u5217\u7684\u306b\u51e6\u7406\u3059\u308b\u3053\u3068\u3067\uff0c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u306e\u63cf\u753b\u3092\u5b9f\u73fe\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\u3053\u306e\u3088\u3046\u306b\uff0c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b0\u30e9\u30d5\u30a3\u30af\u30b9\u306e\u76ee\u7684\u3067\u751f\u307e\u308c\u305f GPU \u3060\u304c\uff0c2010\u5e74\u524d\u5f8c\u304b\u3089\uff0c\u305d\u306e\u9ad8\u3044\u4e26\u5217\u8a08\u7b97\u80fd\u529b\u3092\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u4ee5\u5916\u306e\u8a08\u7b97 (\u79d1\u5b66\u8a08\u7b97\u306a\u3069) \u306b\u7528\u3044\u308b\u3068\u3044\u3046\u6d41\u308c (General-purpose computing on GPU; GPGPU) \u304c\u751f\u307e\u308c\u305f\uff0e\nGPU\u306e\u30b3\u30a2\u306f\uff0c\u305d\u306e\u8a2d\u8a08\u304b\u3089\uff0c\u884c\u5217\u306e\u8a08\u7b97\u306a\u3069\uff0c\u5358\u7d14\u304b\u3064\u898f\u5247\u7684\u306a\u6f14\u7b97\u304c\u5f97\u610f\u3067\u3042\u308a\uff0c\u305d\u306e\u3088\u3046\u306a\u6f14\u7b97\u306b\u5bfe\u3057\u3066\u306f\u6570\u500b\u7a0b\u5ea6\u306e\u30b3\u30a2\u3057\u304b\u3082\u305f\u306a\u3044 CPU \u306b\u6bd4\u3079\u3066\u5727\u5012\u7684\u306b\u9ad8\u3044\u8a08\u7b97\u901f\u5ea6\u3092\u5b9f\u73fe\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u73fe\u5728\u3067\u306f GPGPU \u306f\u5206\u5b50\u52d5\u529b\u5b66\u3084\u6c17\u8c61\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\uff0c\u305d\u3057\u3066\u6a5f\u68b0\u5b66\u7fd2\u306a\u3069\u591a\u304f\u306e\u5206\u91ce\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\uff0e\n\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u3067\u6700\u3082\u983b\u7e41\u306b\u8d77\u3053\u308b\u6f14\u7b97\u304c\uff0c\u30cb\u30e5\u30fc\u30ed\u30f3\u306e\u51fa\u529b\u3092\u6b21\u306e\u5c64\u306e\u30cb\u30e5\u30fc\u30ed\u30f3\u306b\u4f1d\u3048\u308b\u7573\u307f\u8fbc\u307f (Convolution) \u6f14\u7b97\u3067\u3042\u308b (Figure 18)\uff0e\n\u7573\u307f\u8fbc\u307f\u6f14\u7b97\u306f\uff0c\u307e\u3055\u306b GPU \u304c\u5f97\u610f\u3068\u3059\u308b\u6f14\u7b97\u3067\u3042\u308a\uff0c CPU \u3067\u306f\u306a\u304f GPU \u3092\u7528\u3044\u308b\u3053\u3068\u3067\u5b66\u7fd2\u3092\u98db\u8e8d\u7684\u306b (\u6700\u5927\u3067\u6570\u767e\u500d\u7a0b\u5ea6) \u52a0\u901f\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\nFigure 18. \u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u304a\u3051\u308b\u7573\u307f\u8fbc\u307f\u6f14\u7b97\uff0e\n\n\u3053\u306e\u3088\u3046\u306b GPU \u306f\u6a5f\u68b0\u5b66\u7fd2\u306e\u8a08\u7b97\u3067\u6b20\u304b\u305b\u306a\u3044\u3082\u306e\u3067\u3042\u308b\u304c\uff0c\u306a\u304b\u306a\u304b\u9ad8\u4fa1\u3067\u3042\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u79d1\u5b66\u8a08\u7b97\u30fb\u6a5f\u68b0\u5b66\u7fd2\u306b\u5c02\u7528\u8a2d\u8a08\u3055\u308c\u305f NVIDIA \u793e\u306e Tesla V100 \u3068\u3044\u3046\u30c1\u30c3\u30d7\u306f\uff0c\u4e00\u53f0\u3067\u7d04\u767e\u4e07\u5186\u306e\u4fa1\u683c\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u6a5f\u68b0\u5b66\u7fd2\u3092\u59cb\u3081\u308b\u306e\u306b\uff0c\u3044\u304d\u306a\u308a\u767e\u4e07\u5186\u306e\u6295\u8cc7\u306f\u306a\u304b\u306a\u304b\u5927\u304d\u3044\uff0e\n\u3060\u304c\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3048\u3070\uff0c\u521d\u671f\u30b3\u30b9\u30c8\uff10\u3067 GPU \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\u6a5f\u68b0\u5b66\u7fd2\u3092\u884c\u3046\u306e\u306b\uff0c V100 \u304c\u5fc5\u305a\u3057\u3082\u5fc5\u8981\u3068\u3044\u3046\u308f\u3051\u3067\u306f\u306a\u3044\uff0e\n\u3080\u3057\u308d\uff0c\u7814\u7a76\u8005\u306a\u3069\u3067\u3057\u3070\u3057\u3070\u884c\u308f\u308c\u308b\u306e\u306f\uff0c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b2\u30fc\u30e0\u306b\u4f7f\u308f\u308c\u308b\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u7528\u306e GPU \u3092\u8cb7\u3063\u3066\u304d\u3066 (NVIDIA GeForce \u30b7\u30ea\u30fc\u30ba\u306a\u3069)\uff0c\u958b\u767a\u306e\u3068\u304d\u306f\u3092\u305d\u308c\u3092\u7528\u3044\u308b\uff0c\u3068\u3044\u3046\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3042\u308b\uff0e\n\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u7528\u306e\u3044\u308f\u3086\u308b\"\u30b3\u30f3\u30b7\u30e5\u30fc\u30de GPU\"\u306f\uff0c\u5e02\u5834\u306e\u9700\u8981\u304c\u5927\u304d\u3044\u304a\u304b\u3052\u3067\uff0c10\u4e07\u5186\u524d\u5f8c\u306e\u4fa1\u683c\u3067\u8cfc\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nV100 \u3068\u6bd4\u3079\u308b\u3068\uff0c\u30b3\u30f3\u30b7\u30e5\u30fc\u30de GPU \u306f\u30b3\u30a2\u306e\u6570\u304c\u5c11\u306a\u304b\u3063\u305f\u308a\uff0c\u30e1\u30e2\u30ea\u30fc\u304c\u5c0f\u3055\u304b\u3063\u305f\u308a\u306a\u3069\u3067\u52a3\u308b\u70b9\u304c\u3042\u308b\u304c\uff0c\n\u305d\u308c\u3089\u3092\u9664\u3044\u3066\u306f\u8a08\u7b97\u80fd\u529b\u306b\u3068\u304f\u306b\u5236\u9650\u304c\u3042\u308b\u308f\u3051\u3067\u306f\u306a\u304f\uff0c\u958b\u767a\u306e\u6bb5\u968e\u3067\u306f\u5341\u5206\u306a\u6027\u80fd\u3067\u3042\u308b\u5834\u5408\u304c\u307b\u3068\u3093\u3069\u3067\u3042\u308b\uff0e\n\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3067\u304d\u3042\u304c\u3063\u3066\uff0c\u30d3\u30c3\u30b0\u30c7\u30fc\u30bf\u306e\u89e3\u6790\u3084\uff0c\u30e2\u30c7\u30eb\u3092\u3055\u3089\u306b\u5927\u304d\u304f\u3057\u305f\u3044\u3068\u304d\u306a\u3069\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u306f\u6709\u52b9\u3060\u308d\u3046\uff0e\n\n\n\n\n\u30af\u30e9\u30a6\u30c9\u3067 GPU \u3092\u4f7f\u3046\u306b\u306f\uff0c GPU \u304c\u642d\u8f09\u3055\u308c\u305fEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7 (P3, P2, G3, G4 \u306a\u3069) \u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\nTable 3 \u306b\uff0c\u4ee3\u8868\u7684\u306a GPU \u642d\u8f09\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3092\u6319\u3052\u308b (\u57f7\u7b46\u6642\u70b9\u3067\u306e\u60c5\u5831)\uff0e\n\nTable 3. GPU\u3092\u642d\u8f09\u3057\u305fEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\n\n\n\n\n\n\n\n\n\n\n\nInstance\nGPUs\nGPU model\nGPU Mem (GiB)\nvCPU\nMem (GiB)\nPrice per hour ($)\n\n\n\n\np3.2xlarge\n1\nNVIDIA V100\n16\n8\n61\n3.06\n\n\np3n.16xlarge\n8\nNVIDIA V100\n128\n64\n488\n24.48\n\n\np2.xlarge\n1\nNVIDIA K80\n12\n4\n61\n0.9\n\n\ng4dn.xlarge\n1\nNVIDIA T4\n16\n4\n16\n0.526\n\n\n\nTable 3 \u304b\u3089\u308f\u304b\u308b\u3068\u304a\u308a\uff0c CPU \u306e\u307f\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u6bd4\u3079\u308b\u3068\u5c11\u3057\u9ad8\u3044\u4fa1\u683c\u8a2d\u5b9a\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u53e4\u3044\u4e16\u4ee3\u306e GPU (V100 \u306b\u5bfe\u3057\u3066\u306e K80) \u306f\u3088\u308a\u5b89\u4fa1\u306a\u4fa1\u683c\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n1\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3042\u305f\u308a\u306e GPU \u306e\u642d\u8f09\u6570\u306f1\u53f0\u304b\u3089\u6700\u5927\u30678\u53f0\u307e\u3067\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\nGPU \u3092\u642d\u8f09\u3057\u305f\u4e00\u756a\u5b89\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306f\uff0c g4dn.xlarge \u3067\u3042\u308a\uff0c\u3053\u308c\u306b\u306f\u5ec9\u4fa1\u304b\u3064\u7701\u30a8\u30cd\u30eb\u30ae\u30fc\u8a2d\u8a08\u306e NVIDIA T4 \u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\uff0e\n\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u7528\u3057\u3066\uff0c\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u3092\u884c\u3063\u3066\u307f\u308b\uff0e\n\n\n\n\n\n\n\nTable 3 \u306e\u4fa1\u683c\u306f us-east-1 \u306e\u3082\u306e\u3067\u3042\u308b\uff0e\n\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u3088\u3063\u3066\u591a\u5c11\u4fa1\u683c\u8a2d\u5b9a\u304c\u7570\u306a\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\nV100 \u3092\u4e00\u53f0\u642d\u8f09\u3057\u305f p3.2xlarge \u306e\u5229\u7528\u6599\u91d1\u306f\u4e00\u6642\u9593\u3042\u305f\u308a $3.06 \u3067\u3042\u308b\uff0e\nV100 \u304c\u7d04\u767e\u4e07\u5186\u3067\u58f2\u3089\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u8003\u3048\u308b\u3068\uff0c\u7d043000\u6642\u9593 (= 124\u65e5\u9593)\uff0c\u901a\u7b97\u3067\u8a08\u7b97\u3092\u884c\u3063\u305f\u5834\u5408\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3046\u3088\u308a\u3082V100\u3092\u81ea\u5206\u3067\u8cb7\u3063\u305f\u307b\u3046\u304c\u304a\u5f97\u306b\u306a\u308b\uff0c\u3068\u3044\u3046\u8a08\u7b97\u306b\u306a\u308b\n(\u5b9f\u969b\u306b\u306f\uff0c\u81ea\u524d\u3067 V100 \u3092\u7528\u610f\u3059\u308b\u5834\u5408\u306f\uff0c V100 \u3060\u3051\u3067\u306a\u304f\uff0c CPU \u3084\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u6a5f\u5668\uff0c\u96fb\u6c17\u4f7f\u7528\u6599\u3082\u5fc5\u8981\u306a\u306e\u3067\uff0c\u767e\u4e07\u5186\u3088\u308a\u3082\u3055\u3089\u306b\u30b3\u30b9\u30c8\u304c\u304b\u304b\u308b)\uff0e\n\n\n\n\n\n\n\n\n\n\n\nGPT-3 \u3067\u4f7f\u308f\u308c\u305f\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u306e\u8a73\u7d30\u306f\u8ad6\u6587\u3067\u3082\u660e\u304b\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u3060\u304c\uff0c Lambda \u793e\u306e\u30d6\u30ed\u30b0\u3067\u8208\u5473\u6df1\u3044\u8003\u5bdf\u304c\u884c\u308f\u308c\u3066\u3044\u308b\n(Lambda \u793e\u306f\u6a5f\u68b0\u5b66\u7fd2\u306b\u7279\u5316\u3057\u305f\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b)\uff0e\n\u8a18\u4e8b\u306b\u3088\u308b\u3068\uff0c1750\u5104\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8a13\u7df4\u3059\u308b\u306b\u306f\uff0c\u4e00\u53f0\u306e GPU (NVIDIA V100) \u3092\u7528\u3044\u305f\u5834\u5408\uff0c342\u5e74\u306e\u6708\u65e5\u3068460\u4e07\u30c9\u30eb\u306e\u30af\u30e9\u30a6\u30c9\u5229\u7528\u6599\u304c\u5fc5\u8981\u3068\u306a\u308b\uff0c\u3068\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\nGPT-3 \u306e\u30c1\u30fc\u30e0\u306f\uff0c\u8907\u6570\u306e GPU \u306b\u51e6\u7406\u3092\u5206\u6563\u3059\u308b\u3053\u3068\u3067\u73fe\u5b9f\u7684\u306a\u6642\u9593\u306e\u3046\u3061\u306b\u8a13\u7df4\u3092\u5b8c\u4e86\u3055\u305b\u305f\u306e\u3067\u3042\u308d\u3046\u304c\uff0c\u3053\u306e\u30ec\u30d9\u30eb\u306e\u30e2\u30c7\u30eb\u306b\u306a\u3063\u3066\u304f\u308b\u3068\u30af\u30e9\u30a6\u30c9\u6280\u8853\u306e\u9650\u754c\u3092\u653b\u3081\u306a\u3044\u3068\u9054\u6210\u3067\u304d\u306a\u3044\u3053\u3068\u306f\u78ba\u304b\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\n\n6. Hands-on #2: AWS \u3067\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u3092\u5b9f\u8df5\n\n\n6.1. \u6e96\u5099\n\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u4e8c\u56de\u3067\u306f\uff0c GPU \u3092\u642d\u8f09\u3057\u305fEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\uff0c\u6df1\u5c64\u5b66\u7fd2\u30e2\u30c7\u30eb\u306e\u5b66\u7fd2\u3068\u63a8\u8ad6\u3092\u5b9f\u884c\u3059\u308b\u6f14\u7fd2\u3092\u884c\u3046\uff0e\n\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u5b9f\u884c\u306b\u306f\uff0c\u7b2c\u4e00\u56de\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u8aac\u660e\u3057\u305f\u6e96\u5099 (Section 4.1) \u304c\u6574\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3059\u308b\uff0e\n\u305d\u308c\u4ee5\u5916\u306b\u5fc5\u8981\u306a\u6e96\u5099\u306f\u306a\u3044\uff0e\n\n\n\n\n\n\n\n\u521d\u671f\u72b6\u614b\u306e AWS \u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u306f\uff0c GPU \u642d\u8f09\u306e G\u30bf\u30a4\u30d7\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u4e0a\u9650\u304c0\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u3042\u308b\uff0e\n\u3053\u308c\u3092\u78ba\u8a8d\u3059\u308b\u306b\u306f\uff0c AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089 EC2 \u306e\u753b\u9762\u3092\u958b\u304d\uff0c\u5de6\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089 Limits \u3092\u9078\u629e\u3059\u308b\uff0e\n\u305d\u306e\u4e2d\u306e Running On-Demand All G instances \u3068\u3044\u3046\u6570\u5b57\u304c G \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u4e0a\u9650\u3092\u8868\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\uff0c g4dn.xlarge \u30bf\u30a4\u30d7\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u3046\u306e\u3067\uff0c\u6771\u4eac (ap-northeast-1) \u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306f 0.71 $/hour \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\nAWS Educate Starter Account \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u8aad\u8005\u3078:\n\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3044\u3066\u306f\uff0c Starter Account \u306b\u306f GPU \u642d\u8f09\u578b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u5236\u9650\u304c\u8a2d\u3051\u3089\u308c\u3066\u3044\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c Starter Account \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\uff0c\u5236\u9650\u306e\u306a\u3044\u4e00\u822c\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u81ea\u5206\u81ea\u8eab\u3067\u53d6\u5f97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\uff0e\n\n\n\n\n\n\n6.2. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092 Figure 19 \u306b\u793a\u3059\uff0e\n\n\n\nFigure 19. \u30cf\u30f3\u30ba\u30aa\u30f3#2\u3067\u4f5c\u88fd\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n\n\u56f3\u306e\u591a\u304f\u306e\u90e8\u5206\u304c\uff0c\u7b2c\u4e00\u56de\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u5171\u901a\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u6c17\u304c\u3064\u304f\u3060\u308d\u3046\uff0e\n\u5c11\u3057\u306e\u5909\u66f4\u3067\uff0c\u7c21\u5358\u306b\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u3092\u8d70\u3089\u305b\u308b\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\u3042\u308b\uff01\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u6b21\u306e\uff13\u70b9\u3067\u3042\u308b\uff0e\n\n\n\nGPU\u3092\u642d\u8f09\u3057\u305f g4dn.xlarge \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3092\u4f7f\u7528\n\n\n\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306b\u4f7f\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3042\u3089\u304b\u3058\u3081\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f DLAMI (\u5f8c\u8ff0) \u3092\u4f7f\u7528\n\n\nSSH\u306b\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3064\u3051\u3066\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3057\uff0c\u30b5\u30fc\u30d0\u30fc\u3067\u8d77\u52d5\u3057\u3066\u3044\u308bJupyter Notebook (\u5f8c\u8ff0) \u3092\u4f7f\u3063\u3066\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u3044\u305f\u308a\u5b9f\u884c\u3057\u305f\u308a\u3059\u308b\n\n\n\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\nclass Ec2ForDl(core.Stack):\n\n    def __init__(self, scope: core.App, name: str, key_name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        vpc = ec2.Vpc(\n            self, \"Ec2ForDl-Vpc\",\n            max_azs=1,\n            cidr=\"10.10.0.0/23\",\n            subnet_configuration=[\n                ec2.SubnetConfiguration(\n                    name=\"public\",\n                    subnet_type=ec2.SubnetType.PUBLIC,\n                )\n            ],\n            nat_gateways=0,\n        )\n\n        sg = ec2.SecurityGroup(\n            self, \"Ec2ForDl-Sg\",\n            vpc=vpc,\n            allow_all_outbound=True,\n        )\n        sg.add_ingress_rule(\n            peer=ec2.Peer.any_ipv4(),\n            connection=ec2.Port.tcp(22),\n        )\n\n        host = ec2.Instance(\n            self, \"Ec2ForDl-Instance\",\n            instance_type=ec2.InstanceType(\"g4dn.xlarge\"), (1)\n            machine_image=ec2.MachineImage.generic_linux({\n                \"us-east-1\": \"ami-060f07284bb6f9faf\",\n                \"ap-northeast-1\": \"ami-09c0c16fc46a29ed9\"\n            }), (2)\n            vpc=vpc,\n            vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),\n            security_group=sg,\n            key_name=key_name\n        )\n\n\n\n\n\n1\n\u3053\u3053\u3067\uff0c g4dn.xlarge \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u3044\u308b (\u7b2c\u4e00\u56de\u3067\u306f\uff0c CPU \u306e\u307f\u306e t2.micro \u3060\u3063\u305f)\uff0e\ng4dn.xlarge \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u306f\uff0c Section 5 \u3067\u3059\u3067\u306b\u89e6\u308c\u305f\u901a\u308a\uff0c NVIDIA T4 \u3068\u547c\u3070\u308c\u308b\u5ec9\u4fa1\u7248\u30e2\u30c7\u30eb\u306e GPU \u3092\u642d\u8f09\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3042\u308b\uff0e\nCPU \u306f 4 core, \u30e1\u30a4\u30f3\u30e1\u30e2\u30ea\u30fc\u306f 16GB \u304c\u5272\u308a\u5f53\u3066\u3042\u3089\u308c\u3066\u3044\u308b\uff0e\n\n\n2\n\u3053\u3053\u3067\u306f\uff0cDeep Learning \u7528\u306e\u8af8\u3005\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u30d7\u30ea\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fAMI (Deep Learning Amazon Machine Image; DLAMI) \u3092\u9078\u629e\u3057\u3066\u3044\u308b\n(\u7b2c\u4e00\u56de\u3067\u306f\uff0cAmazon Linux \u3068\u3044\u3046AMI\u3092\u4f7f\u7528\u3057\u3066\u3044\u305f)\uff0e\n\u4f7f\u7528\u3059\u308b AMI \u306eID\u306f \u30ea\u30fc\u30b8\u30e7\u30f3\u3054\u3068\u306b\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\uff0c\u3053\u3053\u3067\u306f us-east-1 \u3068 ap-northeast-1 \u3067\u305d\u308c\u305e\u308c\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n\nDLAMI \u3068\u3044\u3046\u65b0\u3057\u3044\u6982\u5ff5\u304c\u51fa\u3066\u304d\u305f\u306e\u3067\uff0c\u8aac\u660e\u3057\u3088\u3046\uff0e\n\n\n\n\n\n\n\nAMI \u304c us-east-1 \u3068 ap-northeast-1 \u3067\u3057\u304b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u3067\uff0c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u30b3\u30fc\u30c9\u306f\u3053\u306e\u4e8c\u3064\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u307f\u3067\u30c7\u30d7\u30ed\u30a4\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3082\u3057\u307b\u304b\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408\u306f\uff0c AMI \u306e ID \u3092\u81ea\u8eab\u3067\u691c\u7d22\u3057\uff0c\u30b3\u30fc\u30c9\u306b\u66f8\u304d\u8fbc\u3080\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\n6.2.1. DLAMI (Deep Learning Amazon Machine Image)\nAMI (Amazon Machine Image) \u3068\u306f\uff0c\u5927\u307e\u304b\u306b\u306f OS (Operating System) \u306b\u76f8\u5f53\u3059\u308b\u6982\u5ff5\u3067\u3042\u308b\uff0e\n\u5f53\u7136\u306e\u3053\u3068\u306a\u304c\u3089\uff0c OS \u304c\u306a\u3051\u308c\u3070\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u306a\u306b\u3082\u3067\u304d\u306a\u3044\u306e\u3067\uff0cEC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3059\u308b\u3068\u304d\u306b\u306f\u5fc5\u305a\u306a\u306b\u304b\u306e OS \u3092\"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\"\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\nEC2 \u304c\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u30ed\u30fc\u30c9\u3055\u308c\u308b OS \u306b\u76f8\u5f53\u3059\u308b\u3082\u306e\u304c\uff0c AMI \u3067\u3042\u308b\uff0e\nAMI \u306b\u306f\uff0c\u305f\u3068\u3048\u3070 Ubuntu \u306a\u3069\u306e Linux \u7cfb OS \u306b\u52a0\u3048\u3066\uff0cWindows Server \u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\uff0e\n\u307e\u305f\uff0c EC2 \u3067\u306e\u4f7f\u7528\u306b\u6700\u9069\u5316\u3055\u308c\u305f Amazon Linux \u3068\u3044\u3046 AMI \u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3057\u304b\u3057\u306a\u304c\u3089\uff0c AMI \u3092\u5358\u306a\u308b OS \u3068\u7406\u89e3\u3059\u308b\u306e\u306f\u904e\u5270\u306a\u5358\u7d14\u5316\u3067\u3042\u308b\uff0e\nAMI \u306b\u306f\uff0c\u30d9\u30fc\u30b9\u3068\u306a\u308b (\u7a7a\u3063\u307d\u306e) OS \u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\u304c\uff0c\u305d\u308c\u306b\u52a0\u3048\u3066\uff0c\u5404\u7a2e\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u306e AMI \u3082\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u5fc5\u8981\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b AMI \u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308c\u3070\uff0c\u81ea\u8eab\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3063\u305f\u308a\u74b0\u5883\u8a2d\u5b9a\u3057\u305f\u308a\u3059\u308b\u624b\u9593\u304c\u5927\u5e45\u306b\u7701\u3051\u308b\uff0e\n\u5177\u4f53\u4f8b\u3092\u6319\u3052\u308b\u3068\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u4e00\u56de\u3067\u306f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b Python 3.6 \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u4f8b\u3092\u793a\u3057\u305f\u304c\uff0c\u305d\u306e\u3088\u3046\u306a\u64cd\u4f5c\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3059\u308b\u305f\u3073\u306b\u884c\u3046\u306e\u306f\u624b\u9593\u3067\u3042\u308b\uff01\nAMI \u306f\uff0c AWS \u516c\u5f0f\u306e\u3082\u306e\u306b\u52a0\u3048\u3066\uff0c\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u304b\u3089\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3082\u3042\u308b\uff0e\n\u307e\u305f\uff0c\u81ea\u5206\u81ea\u8eab\u306e AMI \u3092\u4f5c\u3063\u3066\u767b\u9332\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b (\u53c2\u8003)\uff0e\nAMI \u306f EC2 \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u691c\u7d22\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3042\u308b\u3044\u306f\uff0cAWS CLI \u3092\u4f7f\u3063\u3066\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b (\u53c2\u8003)\uff0e\n\n$ aws ec2 describe-images --owners amazon\n\n\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u3067\u983b\u7e41\u306b\u4f7f\u308f\u308c\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3042\u3089\u304b\u3058\u3081\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3042\u308bAMI\u304c\uff0c DLAMI (Deep Learning AMI) \u3067\u3042\u308b\uff0e\nDLAMI \u306b\u306f TensorFlow, PyTorch \u306a\u3069\u306e\u4eba\u6c17\u306e\u9ad8\u3044\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30fb\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u3059\u3067\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u305f\u3081\uff0c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u3066\u3059\u3050\u3055\u307e\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u3092\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c Amazon Linux 2 \u3092\u30d9\u30fc\u30b9\u306b\u3057\u305f DLAMI \u3092\u4f7f\u7528\u3059\u308b (AMI ID = ami-09c0c16fc46a29ed9\uff0e\u3053\u306e AMI \u306f ap-northeast-1 \u3067\u3057\u304b\u4f7f\u7528\u3067\u304d\u306a\u3044\u70b9\u306b\u6ce8\u610f)\uff0e\nAWS CLI \u3092\u4f7f\u3063\u3066\uff0c\u3053\u306eAMI\u306e\u8a73\u7d30\u60c5\u5831\u3092\u53d6\u5f97\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ aws ec2 describe-images --owners amazon --image-ids \"ami-09c0c16fc46a29ed9\" --region ap-northeast-1\n\n\n\n\nFigure 20. AMI ID = ami-09c0c16fc46a29ed9 \u306e\u8a73\u7d30\u60c5\u5831\n\nFigure 20 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\u5f97\u3089\u308c\u305f\u51fa\u529b\u304b\u3089\uff0c\u3053\u306e DLAMI \u306b\u306f PyTorch \u306e\u30d0\u30fc\u30b8\u30e7\u30f31.4.0 \u3068 1.5.0 \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u3053\u306eDLAMI\u3092\u4f7f\u3063\u3066\uff0c\u65e9\u901f\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u3092\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\n\n\n\n\n\n\n\n\n\u6700\u3082 low-level \u306a\u30ec\u30a4\u30e4\u30fc\u3068\u3057\u3066\u306f\uff0c GPU \u30c9\u30e9\u30a4\u30d0\u30fc \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\uff0e\nGPU \u30c9\u30e9\u30a4\u30d0\u30fc\u306a\u3057\u306b\u306f OS \u306f GPU \u3068\u30b3\u30de\u30f3\u30c9\u306e\u3084\u308a\u53d6\u308a\u3092\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\uff0e\n\u6b21\u306e\u30ec\u30a4\u30e4\u30fc\u304c CUDA \u3068 cuDNN \u3067\u3042\u308b\uff0e\nCUDA \u306f\uff0c NVIDIA \u793e\u304c\u958b\u767a\u3057\u305f\uff0c GPU \u4e0a\u3067\u6c4e\u7528\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u884c\u3046\u305f\u3081\u306e\u8a00\u8a9e\u3067\u3042\u308a\uff0c C++ \u8a00\u8a9e\u3092\u62e1\u5f35\u3057\u305f\u30b7\u30f3\u30bf\u30c3\u30af\u30b9\u3092\u5099\u3048\u308b\uff0e\ncuDNN \u306f CUDA \u3067\u66f8\u304b\u308c\u305f\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3042\u308a\uff0cn\u6b21\u5143\u306e\u7573\u307f\u8fbc\u307f\u306a\u3069\u306e\u6f14\u7b97\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u3053\u307e\u3067\u304c\uff0c \"Base\" \u3068\u3088\u3070\u308c\u308b\u30bf\u30a4\u30d7\u306e DLAMI \u306e\u4e2d\u8eab\u3067\u3042\u308b\uff0e\n\u3053\u308c\u306b\u52a0\u3048\u3066\uff0c \"Conda\" \u3068\u3088\u3070\u308c\u308b\u30bf\u30a4\u30d7\u306b\u306f\uff0c \"Base\" \u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u57fa\u76e4\u306e\u4e0a\u306b\uff0c TensorFlow \u3084 PyTorch \u306a\u3069\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3055\u3089\u306b\uff0c Anaconda \u306b\u3088\u308b\u4eee\u60f3\u74b0\u5883\u3092\u4f7f\u3046\u3053\u3068\u306b\u3088\u3063\u3066\uff0c TensorFlow \u306e\u74b0\u5883\u30fb PyTorch \u306e\u74b0\u5883\u30fb MxNet \u306e\u74b0\u5883\u306a\u3069\uff0c\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7c21\u5358\u306b\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u308b (\u3053\u308c\u306b\u3064\u3044\u3066\u306f\uff0c\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u89e6\u308c\u308b)\uff0e\n\u307e\u305f\uff0c Jupyter Notebook \u3082\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n6.3. \u30b9\u30bf\u30c3\u30af\u306e\u30c7\u30d7\u30ed\u30a4\n\u30b9\u30bf\u30c3\u30af\u306e\u4e2d\u8eab\u304c\u7406\u89e3\u3067\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u65e9\u901f\u30b9\u30bf\u30c3\u30af\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f31\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u305d\u308c\u305e\u308c\u306e\u30b3\u30de\u30f3\u30c9\u306e\u610f\u5473\u3092\u5fd8\u308c\u3066\u3057\u307e\u3063\u305f\u5834\u5408\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f31\u306b\u623b\u3063\u3066\u5fa9\u7fd2\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd handson/mnist\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# SSH\u9375\u3092\u751f\u6210\n$ export KEY_NAME=\"HirakeGoma\"\n$ aws ec2 create-key-pair --key-name ${KEY_NAME} --query 'KeyMaterial' --output text > ${KEY_NAME}.pem\n$ mv HirakeGoma.pem ~/.ssh/\n$ chmod 400 ~/.ssh/HirakeGoma.pem\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy -c key_name=\"HirakeGoma\"\n\n\n\n\n\n\n\n\n\u30cf\u30f3\u30ba\u30aa\u30f31\u3067\u4f5c\u6210\u3057\u305f SSH \u9375\u306e\u524a\u9664\u3092\u884c\u308f\u306a\u304b\u3063\u305f\u5834\u5408\u306f\uff0c SSH \u9375\u3092\u6539\u3081\u3066\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\uff0e\n\u9006\u306b\u8a00\u3046\u3068\uff0c\u540c\u3058\u540d\u524d\u306eSSH\u304c\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\uff0c\u9375\u751f\u6210\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30a8\u30e9\u30fc\u3092\u51fa\u529b\u3059\u308b\uff0e\n\n\n\n\n\u30c7\u30d7\u30ed\u30a4\u306e\u30b3\u30de\u30f3\u30c9\u304c\u7121\u4e8b\u306b\u5b9f\u884c\u3055\u308c\u308c\u3070\uff0c Figure 21 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0eAWS\u306b\u3088\u308a\u5272\u308a\u632f\u3089\u308c\u305fIP\u30a2\u30c9\u30ec\u30b9 (InstancePublicIp \u306b\u7d9a\u304f\u6587\u5b57\u5217) \u3092\u30e1\u30e2\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\nFigure 21. CDK\u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\n\n\n6.4. \u30ed\u30b0\u30a4\u30f3\n\u65e9\u901f\uff0c\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306bSSH\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u307f\u3088\u3046\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u3053\u306e\u5f8c\u3067\u4f7f\u3046 Jupyter Notebook \u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\uff0c\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0 (port forwarding) \u306e\u30aa\u30d7\u30b7\u30e7\u30f3 (-L) \u3092\u3064\u3051\u3066\u30ed\u30b0\u30a4\u30f3\u3059\u308b\uff0e\n\n$ ssh -i ~/.ssh/HirakeGoma.pem -L localhost:8931:localhost:8888 ec2-user@<IP address>\n\n\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0\u3068\u306f\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30de\u30b7\u30f3\u306e\u7279\u5b9a\u306e\u30a2\u30c9\u30ec\u30b9\u3078\u306e\u63a5\u7d9a\u3092\uff0c SSH \u306e\u6697\u53f7\u5316\u3055\u308c\u305f\u901a\u4fe1\u3092\u4ecb\u3057\u3066\uff0c\u30ea\u30e2\u30fc\u30c8\u30de\u30b7\u30f3\u306e\u7279\u5b9a\u306e\u30a2\u30c9\u30ec\u30b9\u3078\u8ee2\u9001\u3059\u308b\uff0c\u3068\u3044\u3046\u610f\u5473\u3067\u3042\u308b\uff0e\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306e -L localhost:8931:localhost:8888 \u306f\uff0c\u81ea\u5206\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306e localhost:8931 \u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\uff0c\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u306e localhost:8888 \u306e\u30a2\u30c9\u30ec\u30b9\u306b\u8ee2\u9001\u305b\u3088\uff0c\u3068\u3044\u3046\u610f\u5473\u3067\u3042\u308b\n(: \u306b\u3064\u3065\u304f\u6570\u5b57\u306fTCP/IP\u30dd\u30fc\u30c8\u306e\u756a\u53f7\u3092\u610f\u5473\u3057\u3066\u3044\u308b)\uff0e\n\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u306e\u30dd\u30fc\u30c88888\u306b\u306f\uff0c\u5f8c\u8ff0\u3059\u308b Jupyter Notebook \u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306e localhost:8931 \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u3067\uff0c\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u306e Jupyter Notebook \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\u3042\u308b (Figure 22)\uff0e\n\u3053\u306e\u3088\u3046\u306aSSH\u306b\u3088\u308b\u63a5\u7d9a\u65b9\u5f0f\u3092\u30c8\u30f3\u30cd\u30eb\u63a5\u7d9a\u3068\u3088\u3076\uff0e\n\n\n\nFigure 22. SSH \u306e\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0\u306b\u3088\u308b Jupyter Notebook \u3078\u306e\u30a2\u30af\u30bb\u30b9\n\n\n\n\n\n\n\n\n\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\uff0c\u30dd\u30fc\u30c8\u306e\u756a\u53f7 (:8931, :8888 \u306a\u3069) \u306b\u306f1\u304b\u308965535\u307e\u3067\u306e\u4efb\u610f\u306e\u6574\u6570\u3092\u6307\u5b9a\u3067\u304d\u308b\uff0e\n\u3057\u304b\u3057\uff0c\u305f\u3068\u3048\u3070 \u30dd\u30fc\u30c8 22 (SSH) \u3084\u30dd\u30fc\u30c8 80 (HTTP) \u306a\u3069\uff0c\u3044\u304f\u3064\u304b\u3059\u3067\u306b\u4f7f\u308f\u308c\u3066\u3044\u308b\u30dd\u30fc\u30c8\u756a\u53f7\u3082\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\uff0e\n\u307e\u305f\uff0c Jupyter Notebook \u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u30dd\u30fc\u30c88888\u756a\u3092\u4f7f\u7528\u3059\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u30ea\u30e2\u30fc\u30c8\u5074\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u306f\uff0c8888\u3092\u4f7f\u3046\u306e\u304c\u3088\u3044\uff0e\n\n\n\n\n\n\n\n\n\n\n\nSSH \u30ed\u30b0\u30a4\u30f3\u30b3\u30de\u30f3\u30c9\u306e <IP address> \u90e8\u5206\u306f\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u4ee3\u5165\u3059\u308b\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u672c\u66f8\u306e\u63d0\u4f9b\u3057\u3066\u3044\u308b Docker \u3092\u4f7f\u3063\u3066\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3057\u305f\u4eba\u3078\nSSH \u306b\u3088\u308b\u30ed\u30b0\u30a4\u30f3\u306f\uff0c Docker \u306e\u5916 (\u3059\u306a\u308f\u3061\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30de\u30b7\u30f3\u672c\u4f53) \u304b\u3089\u884c\u308f\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u306a\u305c\u306a\u3089\uff0cJupyter \u3092\u958b\u304f\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u306f Docker \u306e\u5916\u306b\u3042\u308b\u304b\u3089\u3067\u3042\u308b\uff0e\n\u305d\u306e\u969b\uff0c\u79d8\u5bc6\u9375\u3092 Docker \u306e\u5916\u306b\u3082\u3063\u3066\u3053\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u624b\u3063\u53d6\u308a\u65e9\u3044\u65b9\u6cd5\u306f\uff0c cat ~/.ssh/HirakeGoma \u3068\u6253\u3063\u3066\uff0c\u51fa\u529b\u7d50\u679c\u3092\u30b3\u30d4\u30fc\u3057\u3066\u30db\u30b9\u30c8\u30de\u30b7\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\u65b9\u6cd5\u3067\u3042\u308b\uff0e\n\u3042\u308b\u3044\u306f -v \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3064\u3051\u3066\uff0c\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3057\u3066\u3082\u3088\u3044\n(\u8a73\u3057\u304f\u306f\nDocker \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Use volumes\"\n\u3092\u53c2\u7167)\uff0e\n\n\n\n\nSSH\u306b\u3088\u308b\u30ed\u30b0\u30a4\u30f3\u304c\u3067\u304d\u305f\u3089\uff0c\u65e9\u901f\uff0c GPU \u306e\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\nFigure 23 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u51fa\u529b\u3092\u898b\u308b\u3068\uff0c Tesla T4 \u578b\u306eGPU\u304c1\u53f0\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\u305d\u306e\u4ed6\uff0cGPU Driver \u3084 CUDA \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\uff0c GPU \u306e\u8ca0\u8377\u30fb\u30e1\u30e2\u30ea\u30fc\u4f7f\u7528\u7387\u306a\u3069\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\nFigure 23. nvidia-smi \u306e\u51fa\u529b\n\n\n\n6.5. Jupyter Notebook \u306e\u8d77\u52d5\nJupyter Notebook \u3068\u306f\uff0c\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306b Python \u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u3044\u305f\u308a\u5b9f\u884c\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3042\u308b\uff0e\nJupyter \u306f GUI \u3068\u3057\u3066\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3092\u4ecb\u3057\u3066\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5f62\u5f0f\u3092\u3068\u3063\u3066\u304a\u308a\uff0c\u307e\u308b\u3067\u30ce\u30fc\u30c8\u3092\u66f8\u304f\u3088\u3046\u306b\uff0c\u30d7\u30ed\u30c3\u30c8\u3084\u30c6\u30fc\u30d6\u30eb\u306e\u30c7\u30fc\u30bf\u3082\u7f8e\u3057\u304f\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b (Figure 24)\uff0e\nPython \u306b\u6163\u308c\u3066\u3044\u308b\u8aad\u8005\u306f\uff0c\u304d\u3063\u3068\u4e00\u5ea6\u306f\u4f7f\u3063\u305f\u3053\u3068\u304c\u3042\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 24. Jupyter Notebook \u306e\u753b\u9762\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c Jupyter Notebook \u3092\u4f7f\u3063\u3066\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306b\u5b9f\u884c\u3057\u3066\u3044\u304f\uff0e\nDLAMI \u306b\u306f\u65e2\u306b Jupyter \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u7279\u6bb5\u306e\u8a2d\u5b9a\u306a\u3057\u306b\u4f7f\u3044\u59cb\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u65e9\u901f\uff0c Jupyter \u3092\u8d77\u52d5\u3057\u3088\u3046\uff0e\nSSH\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u5148\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\n\n$ cd ~ # go to home directory\n$ jupyter notebook\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c Figure 25 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\u3053\u306e\u51fa\u529b\u304b\u3089\uff0cJupyter \u306e\u30b5\u30fc\u30d0\u30fc\u304c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e localhost:8888 \u3068\u3044\u3046\u30a2\u30c9\u30ec\u30b9\u306b\u8d77\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u307e\u305f\uff0c localhost:8888 \u306b\u7d9a\u304f ?token=XXXX \u306f\uff0c\u30a2\u30af\u30bb\u30b9\u306b\u4f7f\u3046\u305f\u3081\u306e\u4e00\u6642\u7684\u306a\u30c8\u30fc\u30af\u30f3\u3067\u3042\u308b\uff0e\n\n\n\nFigure 25. Jupyter Notebook \u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\n\n\n\n\n\n\n\n\nJupyter Notebook \u3092\u521d\u56de\u306b\u8d77\u52d5\u3059\u308b\u3068\u304d\u306f\uff0c\u8d77\u52d5\u306b\u6570\u5206\u7a0b\u5ea6\u306e\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308b\uff0e\n\u307b\u304b\u306e\u52d5\u4f5c\u3082\u8d77\u52d5\u76f4\u5f8c\u306f\u9045\u304f\uff0c\u3044\u304f\u3064\u304b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u8d70\u3089\u305b\u3066\u3044\u304f\u3046\u3061\u306b\u4fca\u654f\u306b\u53cd\u5fdc\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304f\u308b\uff0e\n\u3053\u308c\u306f\uff0c AWS \u306e GPU \u642d\u8f09\u578b\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u904b\u7528\u65b9\u6cd5\u306b\u8d77\u56e0\u3059\u308b\u73fe\u8c61\u3060\u3068\u8003\u3048\u3089\u308c\u308b\uff0e\n\n\n\n\n\u5148\u307b\u3069\uff0c\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3064\u3051\u3066 SSH \u63a5\u7d9a\u3092\u3057\u3066\u3044\u308b\u306e\u3067\uff0c Jupyter \u306e\u8d77\u52d5\u3057\u3066\u3044\u308b localhost:8888 \u306b\u306f\uff0c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306e localhost:8931 \u304b\u3089\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u304b\u3089 Jupyter \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\uff0c\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6 (Chrome, FireFox \u306a\u3069)\u304b\u3089\u6b21\u306e\u30a2\u30c9\u30ec\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308c\u3070\u826f\u3044\uff0e\n\nhttp://localhost:8931/?token=XXXX\n\n?token=XXXX \u306e\u90e8\u5206\u306f\uff0c\u4e0a\u3067 Jupyter \u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u767a\u884c\u3055\u308c\u305f\u30c8\u30fc\u30af\u30f3\u306e\u5024\u306b\u7f6e\u304d\u63db\u3048\u308b\uff0e\n\u4e0a\u306e\u30a2\u30c9\u30ec\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\uff0c Jupyter \u306e\u30db\u30fc\u30e0\u753b\u9762\u304c\u8d77\u52d5\u3059\u308b\u306f\u305a\u3067\u3042\u308b (Figure 26)\uff0e\n\u3053\u308c\u3067\uff0c Jupyter \u306e\u6e96\u5099\u304c\u6574\u3063\u305f\uff01\n\n\n\nFigure 26. Jupyter \u30db\u30fc\u30e0\u753b\u9762\n\n\n\n\n\n\n\n\nJupyter Notebook \u306e\u4f7f\u3044\u65b9 (\u8d85\u7c21\u6613\u7248)\n\n\n\nShift + Enter: \u30bb\u30eb\u3092\u5b9f\u884c\n\n\nEsc: Command mode \u306b\u9077\u79fb\n\n\n\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u306e \"+\" \u30dc\u30bf\u30f3 \u307e\u305f\u306f Command mode \u3067 A \u21d2 \u30bb\u30eb\u3092\u8ffd\u52a0\n\n\n\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u306e \"\u30cf\u30b5\u30df\" \u30dc\u30bf\u30f3 \u307e\u305f\u306f Command mode \u3067 X \u21d2 \u30bb\u30eb\u3092\u524a\u9664\n\n\n\n\n\n\n\n\n\n\n6.6. PyTorch\u306f\u3058\u3081\u306e\u4e00\u6b69\nPyTorch \u306f Facebook AI Research LAB (FAIR) \u304c\u4e2d\u5fc3\u3068\u306a\u3063\u3066\u958b\u767a\u3092\u9032\u3081\u3066\u3044\u308b\uff0c\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3042\u308b\uff0e\nPyTorch \u306f \u6709\u540d\u306a\u4f8b\u3067\u8a00\u3048\u3070 Tesla \u793e\u306e\u81ea\u52d5\u904b\u8ee2\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306a\u3069\u3067\u4f7f\u7528\u3055\u308c\u3066\u304a\u308a\uff0c\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3044\u3066\u6700\u3082\u4eba\u6c17\u306e\u9ad8\u3044\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4e00\u3064\u3067\u3042\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c PyTorch \u3092\u4f7f\u3063\u3066\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u5b9f\u8df5\u3092\u884c\u3046\uff0e\n\n\n\n\n\n\n\nPyTorch \u306e\u6b74\u53f2\u306e\u304a\u8a71\nFacebook \u306f PyTorch \u306e\u307b\u304b\u306b Caffe2 \u3068\u3088\u3070\u308c\u308b\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u958b\u767a\u3057\u3066\u3044\u305f\n(\u521d\u4ee3Caffe \u306f UC Berkley \u306e\u535a\u58eb\u8ab2\u7a0b\u5b66\u751f\u3060\u3063\u305f Yangqing Jia \u306b\u3088\u3063\u3066\u5275\u3089\u308c\u305f)\uff0e\nCaffe2 \u306f 2018\u5e74\u306b PyTorch \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5408\u4f75\u3055\u308c\u305f\uff0e\n\u307e\u305f\uff0c2019\u5e7412\u6708\uff0c\u65e5\u672c\u306e Preferred Networks \u793e\u304c\u958b\u767a\u3057\u3066\u3044\u305f Chainer \u3082\u958b\u767a\u3092\u7d42\u4e86\u3057\uff0cPyTorch\u306e\u958b\u767a\u30c1\u30fc\u30e0\u3068\u5354\u696d\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u767a\u8868\u3055\u308c\u305f\n(\u8a73\u3057\u304f\u306f \u30d7\u30ec\u30b9\u30ea\u30ea\u30fc\u30b9 \u3092\u53c2\u7167)\uff0e\nPyTorch \u306b\u306f\uff0c\u958b\u767a\u7d71\u5408\u524d\u304b\u3089 Chainer \u304b\u3089\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u305f API \u304c\u3044\u304f\u3064\u3082\u3042\u308a\uff0c Chainer \u306e DNA \u306f\u4eca\u3082 PyTorch \u306b\u5f15\u304d\u7d99\u304c\u308c\u3066\u3044\u308b\u306e\u3067\u3042\u308b\u2026\u200b!\n\n\n\n\n\u672c\u683c\u7684\u306a\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u306b\u79fb\u308b\u524d\u306b\uff0c PyTorch \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\uff0c GPU \u3067\u8a08\u7b97\u3092\u884c\u3046\u3068\u306f\u3069\u3046\u3044\u3046\u3082\u306e\u304b\uff0c\u305d\u306e\u5165\u308a\u53e3\u306b\u89e6\u308c\u3066\u307f\u3088\u3046\uff0e\n\u307e\u305a\u306f\uff0c\u65b0\u3057\u3044\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u3092\u4f5c\u6210\u3059\u308b\uff0e\nJupyter\u306e\u30db\u30fc\u30e0\u753b\u9762\u306e\u53f3\u4e0a\u306e \"New\" \u3092\u62bc\u3057\uff0c\"conda_pytorch_p36\" \u3068\u3044\u3046\u74b0\u5883\u3092\u9078\u629e\u3057\u305f\u3046\u3048\u3067\uff0c\u65b0\u898f\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u3092\u4f5c\u6210\u3059\u308b (Figure 27)\uff0e\n\"conda_pytorch_p36\" \u306e\u4eee\u60f3\u74b0\u5883\u306b\u306f\uff0c PyTorch \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\uff0e\n\n\n\nFigure 27. \u65b0\u898f\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u306e\u4f5c\u6210\uff0e \"conda_pytorch_p36\" \u306e\u74b0\u5883\u3092\u9078\u629e\u3059\u308b\uff0e\n\n\u3053\u3053\u3067\u306f\uff0c\u6b21\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u3044\u3066\uff0c\u5b9f\u884c\u3057\u3066\u3044\u304f\uff0e (Figure 28)\uff0e\n\n\n\nFigure 28. PyTorch\u59cb\u3081\u306e\u4e00\u6b69\n\n\u307e\u305a\u306f\uff0c PyTorch \u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\uff0e\u3055\u3089\u306b\uff0c GPU \u304c\u4f7f\u3048\u308b\u74b0\u5883\u306b\u3042\u308b\u304b\uff0c\u78ba\u8a8d\u3059\u308b\uff0e\n\n1\n2\nimport torch\nprint(\"Is CUDA ready?\", torch.cuda.is_available())\n\n\n\u51fa\u529b:\n\n\u6b21\u306b\uff0c3x3 \u306e\u30e9\u30f3\u30c0\u30e0\u306a\u884c\u5217\u3092 CPU \u4e0a\u306b\u4f5c\u3063\u3066\u307f\u3088\u3046\uff0e\n\n1\n2\nx = torch.rand(3,3)\nprint(x)\n\n\n\u51fa\u529b:\n\ntensor([[0.6896, 0.2428, 0.3269],\n        [0.0533, 0.3594, 0.9499],\n        [0.9764, 0.5881, 0.0203]])\n\n\u6b21\u306b\uff0c\u884c\u5217\u3092 GPU \u4e0a\u306b\u4f5c\u6210\u3059\u308b\uff0e\n\n1\n2\ny = torch.ones_like(x, device=\"cuda\")\nx = x.to(\"cuda\")\n\n\n\u305d\u3057\u3066\uff0c\u884c\u5217 x \u3068 y \u306e\u52a0\u7b97\u3092\uff0cGPU\u4e0a\u3067\u5b9f\u884c\u3059\u308b\uff0e\n\n\u51fa\u529b:\n\ntensor([[1.6896, 1.2428, 1.3269],\n        [1.0533, 1.3594, 1.9499],\n        [1.9764, 1.5881, 1.0203]], device='cuda:0')\n\n\u6700\u5f8c\u306b\uff0c GPU \u4e0a\u306b\u3042\u308b\u884c\u5217\u3092\uff0c CPU \u306b\u623b\u3059\uff0e\n\n1\n2\nz = z.to(\"cpu\")\nprint(z)\n\n\n\u51fa\u529b:\n\ntensor([[1.6896, 1.2428, 1.3269],\n        [1.0533, 1.3594, 1.9499],\n        [1.9764, 1.5881, 1.0203]])\n\n\u4ee5\u4e0a\u306e\u4f8b\u306f\uff0c GPU \u3092\u4f7f\u3063\u305f\u8a08\u7b97\u306e\u521d\u6b69\u306e\u521d\u6b69\u3067\u3042\u308b\u304c\uff0c\u96f0\u56f2\u6c17\u306f\u3064\u304b\u3081\u305f\u3060\u308d\u3046\u304b\uff1f\nCPU \u3068 GPU \u3067\u660e\u793a\u7684\u306b\u30c7\u30fc\u30bf\u3092\u4ea4\u63db\u3059\u308b\u306e\u304c\u809d\u3067\u3042\u308b\uff0e\n\u3053\u306e\u4f8b\u306f\u305f\u3063\u305f 3x3 \u306e\u884c\u5217\u306e\u8db3\u3057\u7b97\u306a\u306e\u3067\uff0c GPU \u3092\u4f7f\u3046\u610f\u5473\u306f\u307e\u3063\u305f\u304f\u306a\u3044\u304c\uff0c\u3053\u308c\u304c\u6570\u5343\uff0c\u6570\u4e07\u306e\u30b5\u30a4\u30ba\u306e\u884c\u5217\u306b\u306a\u3063\u305f\u3068\u304d\uff0c GPU \u306f\u683c\u6bb5\u306e\u5a01\u529b\u3092\u767a\u63ee\u3059\u308b\uff0e\n\n\u5b9f\u969b\u306b\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u53d6\u308b\u3053\u3068\u3067GPU\u3068CPU\u306e\u901f\u5ea6\u3092\u6bd4\u8f03\u3092\u3057\u3066\u307f\u3088\u3046\uff0e\n\u5b9f\u884c\u6642\u9593\u3092\u8a08\u6e2c\u3059\u308b\u30c4\u30fc\u30eb\u3068\u3057\u3066\uff0c Jupyter \u306e\u63d0\u4f9b\u3059\u308b %time \u30de\u30b8\u30c3\u30af\u30b3\u30de\u30f3\u30c9\u3092\u5229\u7528\u3059\u308b\uff0e\n\u307e\u305a\u306f CPU \u3092\u4f7f\u7528\u3057\u3066\uff0c10000x10000 \u306e\u884c\u5217\u306e\u884c\u5217\u7a4d\u3092\u8a08\u7b97\u3057\u305f\u5834\u5408\u306e\u901f\u5ea6\u3092\u6e2c\u3063\u3066\u307f\u3088\u3046\uff0e\n\u5148\u307b\u3069\u306e\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u306e\u7d9a\u304d\u306b\uff0c\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n1\n2\n3\n4\n5\n6\ns = 10000\ndevice = \"cpu\"\nx = torch.rand(s, s, device=device, dtype=torch.float32)\ny = torch.rand(s, s, device=device, dtype=torch.float32)\n\n%time z = torch.matmul(x,y)\n\n\n\u51fa\u529b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u304c\u5f97\u3089\u308c\u308b\u3060\u308d\u3046\uff0e\n\u3053\u308c\u306f\uff0c\u884c\u5217\u7a4d\u306e\u8a08\u7b97\u306b\u5b9f\u6642\u9593\u30675.8\u79d2\u304b\u304b\u3063\u305f\u3053\u3068\u3092\u610f\u5473\u3059\u308b (\u5b9f\u884c\u306e\u305f\u3073\u306b\u8a08\u6e2c\u3055\u308c\u308b\u6642\u9593\u306f\u3070\u3089\u3064\u304f\u3053\u3068\u306b\u7559\u610f)\uff0e\n\nCPU times: user 11.5 s, sys: 140 ms, total: 11.6 s\nWall time: 5.8 s\n\n\u6b21\u306b\uff0c GPU \u3092\u4f7f\u7528\u3057\u3066\uff0c\u540c\u3058\u6f14\u7b97\u3092\u884c\u3063\u305f\u5834\u5408\u306e\u901f\u5ea6\u3092\u8a08\u6e2c\u3057\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\n7\ns = 10000\ndevice = \"cuda\"\nx = torch.rand(s, s, device=device, dtype=torch.float32)\ny = torch.rand(s, s, device=device, dtype=torch.float32)\ntorch.cuda.synchronize()\n\n%time z = torch.matmul(x,y); torch.cuda.synchronize()\n\n\n\u51fa\u529b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u306b\u306a\u308b\u3060\u308d\u3046\uff0e\nGPU \u3067\u306f 553\u30df\u30ea\u79d2 \u3067\u8a08\u7b97\u3092\u7d42\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff01\n\nCPU times: user 334 ms, sys: 220 ms, total: 554 ms\nWall time: 553 ms\n\n\n\n\n\n\n\n\nPyTorch \u306b\u304a\u3044\u3066\uff0c GPU \u3067\u306e\u6f14\u7b97\u306f asynchronous (\u975e\u540c\u671f) \u3067\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u305d\u306e\u7406\u7531\u3067\uff0c\u4e0a\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30b3\u30fc\u30c9\u3067\u306f\uff0c torch.cuda.synchronize() \u3068\u3044\u3046\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u57cb\u3081\u8fbc\u3093\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u3053\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3067\u306f\uff0c dtype=torch.float32 \u3068\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\uff0c32bit\u306e\u6d6e\u52d5\u5c0f\u6570\u70b9\u578b\u3092\u7528\u3044\u3066\u3044\u308b\uff0e\n\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u5b66\u7fd2\u304a\u3088\u3073\u63a8\u8ad6\u306e\u8a08\u7b97\u306b\u306f\uff0c32bit\u578b\uff0c\u5834\u5408\u306b\u3088\u3063\u3066\u306f16bit\u578b\u304c\u4f7f\u308f\u308c\u308b\u306e\u304c\u4e00\u822c\u7684\u3067\u3042\u308b\uff0e\n\u3053\u308c\u306e\u4e3b\u306a\u7406\u7531\u3068\u3057\u3066\uff0c\u6559\u5e2b\u30c7\u30fc\u30bf\u3084\u30df\u30cb\u30d0\u30c3\u30c1\u306b\u8d77\u56e0\u3059\u308b\u30ce\u30a4\u30ba\u304c\uff0c\u6d6e\u52d5\u5c0f\u6570\u70b9\u306e\u7cbe\u5ea6\u3088\u308a\u3082\u5927\u304d\u3044\u3053\u3068\u304c\u3042\u3052\u3089\u308c\u308b\uff0e\n32bit/16bit \u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u30e1\u30e2\u30ea\u30fc\u6d88\u8cbb\u3092\u6291\u3048\u305f\u308a\uff0c\u8a08\u7b97\u901f\u5ea6\u306e\u5411\u4e0a\u304c\u9054\u6210\u3067\u304d\u308b\uff0e\n\n\n\n\n\u4e0a\u8a18\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u304b\u3089\uff0cGPU\u3092\u7528\u3044\u308b\u3053\u3068\u3067\uff0c\u7d0410\u500d\u306e\u30b9\u30d4\u30fc\u30c9\u30a2\u30c3\u30d7\u3092\u5b9f\u73fe\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff0e\n\u30b9\u30d4\u30fc\u30c9\u30a2\u30c3\u30d7\u306e\u6027\u80fd\u306f\uff0c\u6f14\u7b97\u306e\u7a2e\u985e\u3084\u884c\u5217\u306e\u30b5\u30a4\u30ba\u306b\u4f9d\u5b58\u3059\u308b\uff0e\n\u884c\u5217\u7a4d\u306f\uff0c\u305d\u306e\u306a\u304b\u3067\u3082\u6700\u3082\u901f\u5ea6\u5411\u4e0a\u304c\u898b\u8fbc\u307e\u308c\u308b\u6f14\u7b97\u306e\u4e00\u3064\u3067\u3042\u308b\uff0e\n\n\n6.7. \u5b9f\u8df5\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0! MNIST\u624b\u66f8\u304d\u6570\u5b57\u8a8d\u8b58\u30bf\u30b9\u30af\n\u3053\u3053\u307e\u3067\uff0cAWS\u4e0a\u3067\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u3092\u3059\u308b\u305f\u3081\u306e\u6982\u5ff5\u3084\u524d\u63d0\u77e5\u8b58\u3092\u306a\u304c\u306a\u304c\u3068\u8aac\u660e\u3057\u3066\u304d\u305f\u304c\uff0c\u3064\u3044\u306b\u3053\u3053\u304b\u3089\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u3092\u5b9f\u969b\u306b\u8d70\u3089\u305b\u3066\u307f\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u6a5f\u68b0\u5b66\u7fd2\u306e\u30bf\u30b9\u30af\u3067\u6700\u3082\u521d\u6b69\u7684\u304b\u3064\u6709\u540d\u306a MNIST \u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u4f7f\u3063\u305f\u6570\u5b57\u8a8d\u8b58\u3092\u6271\u3046 (Figure 29)\uff0e\n\u3053\u308c\u306f\uff0c0\u304b\u30899\u307e\u3067\u306e\u624b\u66f8\u304d\u306e\u6570\u5b57\u306e\u753b\u50cf\u304c\u4e0e\u3048\u3089\u308c\uff0c\u305d\u306e\u6570\u5b57\u304c\u4f55\u306e\u6570\u5b57\u306a\u306e\u304b\u3092\u5f53\u3066\u308b\uff0c\u3068\u3044\u3046\u30b7\u30f3\u30d7\u30eb\u306a\u30bf\u30b9\u30af\u3067\u3042\u308b\uff0e\n\n\n\nFigure 29. MNIST \u624b\u66f8\u304d\u6570\u5b57\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\n\n\u4eca\u56de\u306f\uff0c MNIST \u6587\u5b57\u8a8d\u8b58\u30bf\u30b9\u30af\u3092\uff0c\u7573\u307f\u8fbc\u307f\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af (Convolutional Neural Network; CNN) \u3092\u4f7f\u3063\u3066\u89e3\u304f\uff0e\n\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\n/handson/minist/pytorch/\n\u306b\u3042\u308b mnist.ipynb \u3068 simple_mnist.py \u3067\u3042\u308b\uff0e\n\u306a\u304a\uff0c\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\uff0c PyTorch \u306e\u516c\u5f0f Example Project \u96c6 \u3092\u53c2\u8003\u306b\uff0c\u591a\u5c11\u306e\u6539\u5909\u3092\u884c\u3063\u305f\u3082\u306e\u3067\u3042\u308b\uff0e\n\u307e\u305a\u306f\uff0c\u30ab\u30b9\u30bf\u30e0\u306e\u30af\u30e9\u30b9\u3084\u95a2\u6570\u304c\u5b9a\u7fa9\u3055\u308c\u305f simple_mnist.py \u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3088\u3046 (Figure 30)\uff0e\n\u753b\u9762\u53f3\u4e0a\u306e \"Upload\" \u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\uff0c\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u3067\u304d\u308b\uff0e\n\u3053\u306e Python \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4e2d\u306b\uff0cCNN \u306e\u30e2\u30c7\u30eb\u3084\uff0c\u5b66\u7fd2\u306e\u5404\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3051\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u66f4\u65b0\u306a\u3069\u304c\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\uff0e\n\u4eca\u56de\u306f\u3053\u306e\u4e2d\u8eab\u3092\u8aac\u660e\u3059\u308b\u3053\u3068\u306f\u3057\u306a\u3044\u304c\uff0c\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u81ea\u8eab\u3067\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8aad\u3093\u3067\u307f\u308b\u3068\u3088\u3044\uff0e\n\n\n\nFigure 30. simple_mnist.py \u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n\nsimple_mnist.py \u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u305f\u3089\uff0c\u6b21\u306b\u65b0\u3057\u3044 notebook \u3092\u4f5c\u6210\u3057\u3088\u3046\uff0e\n\"conda_pytorch_p36\" \u306e\u74b0\u5883\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff0e\n\u65b0\u3057\u3044\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u304c\u8d77\u52d5\u3057\u305f\u3089\uff0c\u307e\u305a\u306f\u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\n7\n8\nimport torch\nimport torch.optim as optim\nimport torchvision\nfrom torchvision import datasets, transforms\nfrom matplotlib import pyplot as plt\n\n# custom functions and classes\nfrom simple_mnist import Model, train, evaluate\n\n\ntorchvision \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306f\uff0cMNIST \u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u30ed\u30fc\u30c9\u3059\u308b\u306a\u3069\u306e\u4fbf\u5229\u306a\u95a2\u6570\u304c\u542b\u307e\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u3046\u30ab\u30b9\u30bf\u30e0\u306e\u30af\u30e9\u30b9\u30fb\u95a2\u6570 (Model, train, evaluate) \u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u3092\u884c\u3063\u3066\u3044\u308b\uff0e\n\u6b21\u306b\uff0cMNIST \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3088\u3046\uff0e\n\u540c\u6642\u306b\uff0c\u753b\u50cf\u30c7\u30fc\u30bf\u306e\u8f1d\u5ea6\u306e\u6b63\u898f\u5316\u3082\u884c\u3063\u3066\u3044\u308b\uff0e\n\n1\n2\n3\n4\n5\n6\n7\n8\ntransf = transforms.Compose([transforms.ToTensor(),\n                             transforms.Normalize((0.1307,), (0.3081,))])\n\ntrainset = datasets.MNIST(root='./data', train=True, download=True, transform=transf)\ntrainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)\n\ntestset = datasets.MNIST(root='./data', train=False, download=True, transform=transf)\ntestloader = torch.utils.data.DataLoader(testset, batch_size=1000, shuffle=True)\n\n\n\u4eca\u56de\u6271\u3046 MNIST \u30c7\u30fc\u30bf\u306f 28x28 \u30d4\u30af\u30bb\u30eb\u306e\u6b63\u65b9\u5f62\u306e\u753b\u50cf(\u30e2\u30ce\u30af\u30ed)\u3068\uff0c\u305d\u308c\u305e\u308c\u306e\u30e9\u30d9\u30eb(0 - 9 \u306e\u6570\u5b57)\u306e\u7d44\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3044\u304f\u3064\u304b\u306e\u30c7\u30fc\u30bf\u3092\u62bd\u51fa\u3057\u3066\uff0c\u53ef\u8996\u5316\u3057\u3066\u307f\u3088\u3046\uff0e\nFigure 31 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\nexamples = iter(testloader)\nexample_data, example_targets = examples.next()\n\nprint(\"Example data size:\", example_data.shape)\n\nfig = plt.figure(figsize=(10,4))\nfor i in range(10):\n    plt.subplot(2,5,i+1)\n    plt.tight_layout()\n    plt.imshow(example_data[i][0], cmap='gray', interpolation='none')\n    plt.title(\"Ground Truth: {}\".format(example_targets[i]))\n    plt.xticks([])\n    plt.yticks([])\nplt.show()\n\n\n\n\n\nFigure 31. MNIST \u306e\u624b\u66f8\u304d\u6570\u5b57\u753b\u50cf\u3068\u305d\u306e\u6559\u5e2b\u30e9\u30d9\u30eb\n\n\u6b21\u306b\uff0c CNN \u306e\u30e2\u30c7\u30eb\u3092\u5b9a\u7fa9\u3059\u308b\uff0e\n\n1\n2\nmodel = Model()\nmodel.to(\"cuda\") # load to GPU\n\n\n\u4eca\u56de\u4f7f\u3046 Model \u306f simple_mnist.py \u306e\u4e2d\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30e2\u30c7\u30eb\u306f\uff0cFigure 32 \u306b\u793a\u3057\u305f\u3088\u3046\u306a\uff0c\uff12\u5c64\u306e\u7573\u307f\u8fbc\u307f\u5c64\u30682\u5c64\u306e\u5168\u7d50\u5408\u5c64\u304b\u3089\u306a\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u3042\u308b\uff0e\n\u51fa\u529b\u5c64 (output layer) \u306b\u306f Softmax \u95a2\u6570\u3092\u4f7f\u7528\u3057\uff0c\u640d\u5931\u95a2\u6570 (Loss function) \u306b\u306f \u8ca0\u306e\u5bfe\u6570\u5c24\u5ea6\u95a2\u6570 (Negative log likelyhood; NLL) \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\uff0e\n\n\n\nFigure 32. \u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u7528\u3059\u308b\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u69cb\u9020\uff0e\n\n\u7d9a\u3044\u3066\uff0c CNN \u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u66f4\u65b0\u3059\u308b\u6700\u9069\u5316\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9a\u7fa9\u3059\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c \u78ba\u7387\u7684\u52fe\u914d\u964d\u4e0b\u6cd5 (Stochastic Gradient Descent; SGD) \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\uff0e\n\n1\noptimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n\n\n\u3053\u308c\u3067\uff0c\u6e96\u5099\u304c\u6574\u3063\u305f\uff0e\nCNN \u306e\u5b66\u7fd2\u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3088\u3046!\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\ntrain_losses = []\nfor epoch in range(5):\n    losses = train(model, trainloader, optimizer, epoch)\n    train_losses = train_losses + losses\n    test_loss, test_accuracy = evaluate(model, testloader)\n    print(f\"\\nTest set: Average loss: {test_loss:.4f}, Accuracy: {test_accuracy:.1f}%\\n\")\n\nplt.figure(figsize=(7,5))\nplt.plot(train_losses)\nplt.xlabel(\"Iterations\")\nplt.ylabel(\"Train loss\")\nplt.show()\n\n\n\u3053\u3053\u3067\u306f5\u30a8\u30dd\u30c3\u30af\u5206\u306e\u5b66\u7fd2\u3092\u884c\u3063\u3066\u3044\u308b\uff0e\nGPU \u3092\u4f7f\u3048\u3070\uff0c\u3053\u308c\u304f\u3089\u3044\u306e\u8a08\u7b97\u3067\u3042\u308c\u30701\u5206\u7a0b\u5ea6\u3067\u5b8c\u4e86\u3059\u308b\u3060\u308d\u3046\uff0e\n\u51fa\u529b\u3068\u3057\u3066\uff0c Figure 33 \u306e\u3088\u3046\u306a\u30d7\u30ed\u30c3\u30c8\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u91cd\u306d\u308b\u306b\u3064\u308c\u3066\uff0c\u640d\u5931\u95a2\u6570 (Loss function) \u306e\u5024\u304c\u6e1b\u5c11\u3057\u3066\u3044\u308b (=\u7cbe\u5ea6\u304c\u5411\u4e0a\u3057\u3066\u3044\u308b) \u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\n\n\nFigure 33. \u5b66\u7fd2\u306e\u9032\u884c\u306b\u5bfe\u3059\u308b Train loss \u306e\u5909\u5316\n\n\u51fa\u529b\u306b\u306f\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u3067\u5404\u30a8\u30dd\u30c3\u30af\u7d42\u4e86\u5f8c\u306e\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306b\u5bfe\u3059\u308b\u7cbe\u5ea6\u3082\u8868\u793a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u6700\u7d42\u7684\u306b\u306f 98% \u4ee5\u4e0a\u306e\u6975\u3081\u3066\u9ad8\u3044\u7cbe\u5ea6\u3092\u5b9f\u73fe\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046 (Figure 34)\uff0e\n\n\n\nFigure 34. \u5b66\u7fd2\u3057\u305fCNN\u306e\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306b\u5bfe\u3059\u308b\u30b9\u30b3\u30a2 (5\u30a8\u30dd\u30c3\u30af\u5f8c)\n\n\u5b66\u7fd2\u3057\u305f CNN \u306e\u63a8\u8ad6\u7d50\u679c\u3092\u53ef\u8996\u5316\u3057\u3066\u307f\u3088\u3046\uff0e\n\u6b21\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c Figure 35 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u3060\u308d\u3046\uff0e\n\u3053\u306e\u56f3\u3067\uff0c\u4e0b\u6bb5\u53f3\u304b\u3089\u4e8c\u756a\u76ee\u306f\uff0c\"1\"\u306b\u8fd1\u3044\u898b\u305f\u76ee\u3092\u3057\u3066\u3044\u308b\u304c\uff0c\u304d\u3061\u3093\u3068\"9\"\u3068\u63a8\u8ad6\u3067\u304d\u3066\u3044\u308b\uff0e\n\u306a\u304b\u306a\u304b\u8ce2\u3044 CNN \u3092\u4f5c\u308a\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u305f\u3088\u3046\u3060\uff01\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\nmodel.eval()\n\nwith torch.no_grad():\n    output = model(example_data.to(\"cuda\"))\n\nfig = plt.figure(figsize=(10,4))\nfor i in range(10):\n    plt.subplot(2,5,i+1)\n    plt.tight_layout()\n    plt.imshow(example_data[i][0], cmap='gray', interpolation='none')\n    plt.title(\"Prediction: {}\".format(output.data.max(1, keepdim=True)[1][i].item()))\n    plt.xticks([])\n    plt.yticks([])\nplt.show()\n\n\n\n\n\nFigure 35. \u5b66\u7fd2\u3057\u305f CNN \u306b\u3088\u308b\uff0cMNIST\u753b\u50cf\u306e\u63a8\u8ad6\u7d50\u679c\n\n\u6700\u5f8c\u306b\uff0c\u5b66\u7fd2\u3057\u305f\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092 mnist_cnn.pt \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u540d\u3067\u4fdd\u5b58\u3057\u3066\u304a\u3053\u3046\uff0e\n\u3053\u308c\u3067\uff0c\u5c06\u6765\u3044\u3064\u3067\u3082\u4eca\u56de\u5b66\u7fd2\u3057\u305f\u30e2\u30c7\u30eb\u3092\u518d\u73fe\u3057\uff0c\u5225\u306e\u5b9f\u9a13\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n1\ntorch.save(model.state_dict(), \"mnist_cnn.pt\")\n\n\n\u4ee5\u4e0a\u304c\uff0c AWS \u30af\u30e9\u30a6\u30c9\u306e\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u7acb\u3061\u4e0a\u3052\uff0c\u6700\u521d\u306e\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8a08\u7b97\u3092\u884c\u3046\u4e00\u9023\u306e\u6d41\u308c\u3067\u3042\u308b\uff0e\nMNIST \u6587\u5b57\u8a8d\u8b58\u306e\u30bf\u30b9\u30af\u3092\u884c\u3046\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u3092\uff0c\u30af\u30e9\u30a6\u30c9\u4e0a\u306e GPU \u3092\u4f7f\u3063\u3066\u9ad8\u901f\u306b\u5b66\u7fd2\u3055\u305b\uff0c\u73fe\u5b9f\u7684\u306a\u554f\u984c\u3092\u4e00\u3064\u89e3\u304f\u3053\u3068\u304c\u3067\u304d\u305f\u306e\u3067\u3042\u308b\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\uff0c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u96db\u5f62\u306b\uff0c\u81ea\u5206\u306e\u6240\u671b\u306e\u8a08\u7b97\u3092\u8d70\u3089\u305b\u3066\u307f\u308b\u3068\u3088\u3044\u3060\u308d\u3046\uff0e\n\n\n6.8. \u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\n\u3053\u308c\u306b\u3066\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u4e8c\u56de\u306e\u5185\u5bb9\u306f\u3059\u3079\u3066\u8aac\u660e\u3057\u305f\uff0e\n\u30af\u30e9\u30a6\u30c9\u306e\u5229\u7528\u6599\u91d1\u3092\u6700\u5c0f\u5316\u3059\u308b\u305f\u3081\uff0c\u4f7f\u3044\u7d42\u308f\u3063\u305fEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u3059\u3050\u3055\u307e\u524a\u9664\u3057\u3088\u3046\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u4e00\u56de\u3068\u540c\u69d8\u306b\uff0c AWS \u306e CloudFormation \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\uff0c AWS CLI \u306b\u3088\u308a\u524a\u9664\u3092\u5b9f\u884c\u3059\u308b (\u8a73\u7d30\u306f Section 4.4.8 \u53c2\u7167)\uff0e\n\n\n\n\n\n\n\n\n\u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\u306f\u5404\u81ea\u3067\u5fc5\u305a\u884c\u3046\u3053\u3068\uff01\n\u884c\u308f\u306a\u304b\u3063\u305f\u5834\u5408\uff0cEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6599\u91d1\u304c\u767a\u751f\u3057\u7d9a\u3051\u308b\u3053\u3068\u306b\u306a\u308b\uff01\ng4dn.xlarge \u306f $0.71 / hour \u306e\u6599\u91d1\u8a2d\u5b9a\u306a\u306e\u3067\uff0c\u4e00\u65e5\u8d77\u52d5\u3057\u3064\u3065\u3051\u308b\u3068\u7d04$17\u306e\u8acb\u6c42\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u306b\u306a\u308b\uff01\n\n\n\n\n\n\n\n\n\n7. Docker \u5165\u9580\n\n\u3053\u3053\u307e\u3067\u306e\u7ae0\u3067\u6271\u3063\u3066\u304d\u305f\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u5358\u4e00\u306e\u30b5\u30fc\u30d0\u30fc\u3092\u7acb\u3061\u4e0a\u3052\uff0c\u305d\u308c\u306b SSH \u3067\u30ed\u30b0\u30a4\u30f3\u3092\u3057\u3066\uff0c\u30b3\u30de\u30f3\u30c9\u3092\u53e9\u304f\u3053\u3068\u3067\u8a08\u7b97\u3092\u884c\u3063\u3066\u304d\u305f\uff0e\n\u3044\u308f\u3070\uff0c\u30d1\u30fc\u30bd\u30ca\u30eb\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u5ef6\u9577\u306e\u3088\u3046\u306a\u5f62\u3067\u30af\u30e9\u30a6\u30c9\u3092\u4f7f\u3063\u3066\u304d\u305f\u308f\u3051\u3067\u3042\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306a\uff0c\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3069\u3053\u304b\u3089\u3067\u3082\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u30d1\u30fc\u30bd\u30ca\u30eb\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3068\u3057\u3066\u306e\u30af\u30e9\u30a6\u30c9\u3068\u3044\u3046\u4f7f\u3044\u65b9\u3082\uff0c\u3082\u3061\u308d\u3093\u4fbf\u5229\u3067\u3042\u308b\u3057\uff0c\u3044\u308d\u3044\u308d\u306a\u5fdc\u7528\u306e\u53ef\u80fd\u6027\u304c\u3042\u308b\uff0e\n\u3057\u304b\u3057\uff0c\u3053\u308c\u3060\u3051\u3067\u306f\u30af\u30e9\u30a6\u30c9\u306e\u672c\u5f53\u306e\u4fa1\u5024\u306f\u5341\u5206\u306b\u767a\u63ee\u3055\u308c\u3066\u3044\u306a\u3044\u3068\u8a00\u3046\u3079\u304d\u3060\u308d\u3046\uff0e\nSection 2 \u3067\u8ff0\u3079\u305f\u3088\u3046\u306b\uff0c\u73fe\u4ee3\u7684\u306a\u30af\u30e9\u30a6\u30c9\u306e\u4e00\u756a\u306e\u5f37\u307f\u306f\u81ea\u7531\u306b\u8a08\u7b97\u6a5f\u306e\u898f\u6a21\u3092\u62e1\u5927\u3067\u304d\u308b\u3053\u3068\u306b\u3042\u308b\uff0e\n\u3059\u306a\u308f\u3061\uff0c\u591a\u6570\u306e\u30b5\u30fc\u30d0\u30fc\u3092\u540c\u6642\u306b\u8d77\u52d5\u3057\uff0c\u8907\u6570\u306e\u30b8\u30e7\u30d6\u3092\u5206\u6563\u4e26\u5217\u7684\u306b\u5b9f\u884c\u3055\u305b\u308b\u3053\u3068\u3067\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3057\u3066\u3053\u305d\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u672c\u9818\u304c\u767a\u63ee\u3055\u308c\u308b\u306e\u3067\u3042\u308b\uff0e\n\u672c\u7ae0\u304b\u3089\u306f\u3058\u307e\u308b3\u7ae0\u5206 (Section 7, Section 8, Section 9) \u3092\u4f7f\u3063\u3066\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u3069\u306e\u3088\u3046\u306b\u5927\u898f\u6a21\u306a\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3057\u30d3\u30c3\u30b0\u30c7\u30fc\u30bf\u306e\u89e3\u6790\u306b\u7acb\u3061\u5411\u304b\u3046\u306e\u304b\uff0c\u305d\u306e\u7247\u9c57\u3092\u304a\u898b\u305b\u3057\u305f\u3044\uff0e\n\u3068\u304f\u306b\uff0c\u524d\u7ae0\u3067\u6271\u3063\u305f\u6df1\u5c64\u5b66\u7fd2\u3092\u3069\u306e\u3088\u3046\u306b\u30d3\u30c3\u30b0\u30c7\u30fc\u30bf\u306b\u9069\u7528\u3057\u3066\u3044\u304f\u304b\u3068\u3044\u3046\u70b9\u306b\u7126\u70b9\u3092\u7d5e\u3063\u3066\u8b70\u8ad6\u3057\u3066\u3044\u304d\u305f\u3044\uff0e\n\u305d\u306e\u305f\u3081\u306e\u524d\u6e96\u5099\u3068\u3057\u3066\uff0c\u672c\u7ae0\u3067\u306f Docker \u3068\u3088\u3070\u308c\u308b\u8a08\u7b97\u6a5f\u74b0\u5883\u306e\u4eee\u60f3\u5316\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u7d39\u4ecb\u3059\u308b (Figure 38)\uff0e\n\u73fe\u4ee3\u306e\u30af\u30e9\u30a6\u30c9\u306f Docker \u306a\u3057\u306b\u306f\u6210\u308a\u7acb\u305f\u306a\u3044\u3068\u3044\u3063\u3066\u3082\u904e\u8a00\u3067\u306f\u306a\u3044\u3060\u308d\u3046\uff0e\n\u30af\u30e9\u30a6\u30c9\u306b\u9650\u3089\u305a\uff0c\u30ed\u30fc\u30ab\u30eb\u3067\u884c\u3046\u8a08\u7b97\u51e6\u7406\u306b\u3082 Docker \u306f\u5927\u5909\u4fbf\u5229\u3067\u3042\u308b\uff0e\nAWS \u304b\u3089\u306f\u5c11\u3057\u8a71\u304c\u96e2\u308c\u308b\u304c\uff0c\u3057\u3063\u304b\u308a\u3068\u7406\u89e3\u3057\u3066\u524d\u306b\u9032\u3093\u3067\u3082\u3089\u3044\u305f\u3044\uff0e\n\n7.1. \u6a5f\u68b0\u5b66\u7fd2\u306e\u5927\u898f\u6a21\u5316\n\u5148\u307b\u3069\u304b\u3089\"\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u306e\u5927\u898f\u6a21\u5316\"\u3068\u7e70\u308a\u8fd4\u3057\u5531\u3048\u3066\u3044\u308b\u304c\uff0c\u305d\u308c\u306f\u5177\u4f53\u7684\u306b\u306f\u3069\u306e\u3088\u3046\u306a\u3082\u306e\u3092\u6307\u3057\u3066\u3044\u308b\u306e\u304b\uff1f\n\u3053\u3053\u3067\u306f\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u8a08\u7b97\u6a5f\u30b7\u30b9\u30c6\u30e0\u3092\uff0c\u6a5f\u68b0\u5b66\u7fd2\u3092\u4f8b\u306b\u3068\u3063\u3066\u898b\u3066\u307f\u3088\u3046\uff0e\nSection 5 \u3067\u7d39\u4ecb\u3057\u305f GPT-3 \u306e\u3088\u3046\u306a\uff0c\u8d85\u5de8\u5927\u306a\u6570\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6709\u3059\u308b\u6df1\u5c64\u5b66\u7fd2\u30e2\u30c7\u30eb\u3092\u5b66\u7fd2\u3055\u305b\u305f\u3044\u3068\u3057\u3088\u3046\uff0e\n\u305d\u306e\u3088\u3046\u306a\u8a08\u7b97\u3092\u884c\u3044\u305f\u3044\u5834\u5408\uff0c\u4e00\u3064\u306e\u30b5\u30fc\u30d0\u30fc\u3067\u306f\u8a08\u7b97\u529b\u304c\u5230\u5e95\u8db3\u308a\u306a\u3044\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u5178\u578b\u7684\u306b\u306f Figure 36 \u306b\u793a\u3059\u3088\u3046\u306a\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u304c\u306a\u3055\u308c\u308b\uff0e\n\u3059\u306a\u308f\u3061\uff0c\u5927\u91cf\u306e\u6559\u5e2b\u30c7\u30fc\u30bf\u3092\u5c0f\u3055\u306a\u30c1\u30e3\u30f3\u30af\u3068\u3057\u3066\u8907\u6570\u306e\u30de\u30b7\u30f3\u306b\u5206\u6563\u3057\uff0c\u4e26\u5217\u7684\u306b\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6700\u9069\u5316\u3057\u3066\u3044\u304f\u3068\u3044\u3046\u69cb\u9020\u3067\u3042\u308b\uff0e\n\n\n\nFigure 36. \u8907\u6570\u306e\u8a08\u7b97\u6a5f\u3092\u4f7f\u3063\u305f\u5927\u898f\u6a21\u306a\u6df1\u5c64\u5b66\u7fd2\u30e2\u30c7\u30eb\u306e\u8a13\u7df4\n\n\u3042\u308b\u3044\u306f\uff0c\u5b66\u7fd2\u6e08\u307f\u306e\u30e2\u30c7\u30eb\u3092\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u306b\u9069\u7528\u3057\uff0c\u89e3\u6790\u3092\u884c\u3044\u305f\u3044\u3068\u3057\u3088\u3046\uff0e\n\u305f\u3068\u3048\u3070\uff0c SNS \u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u5927\u91cf\u306e\u753b\u50cf\u304c\u4e0e\u3048\u3089\u308c\u3066\uff0c\u305d\u308c\u305e\u308c\u306e\u5199\u771f\u306b\u4f55\u304c\u5199\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u30e9\u30d9\u30eb\u3065\u3051\u3059\u308b\uff0c\u306a\u3069\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u60f3\u5b9a\u3067\u304d\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u5834\u5408\u306f\uff0c Figure 37 \u306e\u3088\u3046\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u8003\u3048\u3089\u308c\u308b\u3060\u308d\u3046\uff0e\n\u3059\u306a\u308f\u3061\uff0c\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u8907\u6570\u306e\u30de\u30b7\u30f3\u3067\u5206\u5272\u3057\uff0c\u305d\u308c\u305e\u308c\u306e\u30de\u30b7\u30f3\u3067\u63a8\u8ad6\u306e\u8a08\u7b97\u3092\u884c\u3046\u3068\u3044\u3046\u3088\u3046\u306a\u69cb\u9020\u3067\u3042\u308b\uff0e\n\n\n\nFigure 37. \u8907\u6570\u306e\u8a08\u7b97\u6a5f\u306b\u3088\u308b\u6df1\u5c64\u5b66\u7fd2\u30e2\u30c7\u30eb\u3092\u4f7f\u3063\u305f\u63a8\u8ad6\u8a08\u7b97\n\n\u3053\u306e\u3088\u3046\u306a\u8907\u6570\u306e\u8a08\u7b97\u6a5f\u3092\u540c\u6642\u306b\u8d70\u3089\u305b\u308b\u3088\u3046\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u5b9f\u73fe\u3059\u308b\u306b\u306f\uff0c\u3069\u306e\u3088\u3046\u306b\u3059\u308c\u3070\u3088\u3044\u306e\u3060\u308d\u3046\u304b\uff1f\n\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3068\u3057\u3066\uff0c Figure 36 \u3084 Figure 37 \u3067\u8d77\u52d5\u3057\u3066\u3044\u308b\u8907\u6570\u306e\u30de\u30b7\u30f3\u306f\uff0c\u57fa\u672c\u7684\u306b\u5168\u304f\u540c\u4e00\u306eOS\u30fb\u8a08\u7b97\u74b0\u5883\u3092\u6709\u3057\u3066\u3044\u308b\u70b9\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\uff0c\u500b\u4eba\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3067\u884c\u3046\u3088\u3046\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u64cd\u4f5c\u3092\uff0c\u5404\u30de\u30b7\u30f3\u3067\u884c\u3046\u3053\u3068\u3082\u3067\u304d\u308b\u304c\uff0c\u305d\u308c\u306f\u5927\u5909\u306a\u624b\u9593\u3067\u3042\u308b\u3057\uff0c\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3082\u9762\u5012\u3060\u308d\u3046\uff0e\n\u3059\u306a\u308f\u3061\uff0c\u5927\u898f\u6a21\u306a\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u306b\u306f\uff0c\u7c21\u5358\u306b\u8a08\u7b97\u74b0\u5883\u3092\u8907\u88fd\u3067\u304d\u308b\u3088\u3046\u306a\u4ed5\u7d44\u307f\u304c\u5fc5\u8981\u3067\u3042\u308b\u3068\u3044\u3046\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u76ee\u7684\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u4f7f\u308f\u308c\u308b\u306e\u304c\uff0c Docker \u3068\u3088\u3070\u308c\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3042\u308b\uff0e\n\n\n7.2. Docker \u3068\u306f\n\n\n\nFigure 38. Docker \u306e\u30a2\u30a4\u30b3\u30f3\n\nDocker \u3068\u306f\uff0c \u30b3\u30f3\u30c6\u30ca (Container) \u3068\u3088\u3070\u308c\u308b\u4eee\u60f3\u74b0\u5883\u4e0b\u3067\uff0c\u30db\u30b9\u30c8OS\u3068\u306f\u72ec\u7acb\u3057\u305f\u5225\u306e\u8a08\u7b97\u74b0\u5883\u3092\u8d70\u3089\u305b\u308b\u305f\u3081\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3042\u308b\uff0e\nDocker \u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c OS \u3092\u542b\u3081\u305f\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30b3\u30f3\u30d1\u30af\u30c8\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u30f3\u30b0\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b (\u30d1\u30c3\u30b1\u30fc\u30b8\u3055\u308c\u305f\u4e00\u3064\u306e\u8a08\u7b97\u74b0\u5883\u306e\u3053\u3068\u3092 \u30a4\u30e1\u30fc\u30b8 (Image) \u3068\u3088\u3076)\uff0e\nDocker\u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u30b5\u30fc\u30d0\u30fc\u4e0a\u306b\u77ac\u6642\u306b\u8a08\u7b97\u74b0\u5883\u3092\u8907\u88fd\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\uff0c Figure 37 \u3067\u898b\u305f\u3088\u3046\u306a\u8907\u6570\u306e\u8a08\u7b97\u6a5f\u3092\u540c\u6642\u306b\u8d70\u3089\u305b\u308b\u305f\u3081\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u5b9f\u73fe\u3067\u304d\u308b\uff0e\nDocker \u306f2013\u5e74\u306b Solomon Hykes \u3089\u3092\u4e2d\u5fc3\u306b\u958b\u767a\u3055\u308c\uff0c\u305d\u308c\u4ee5\u964d\u7206\u767a\u7684\u306b\u666e\u53ca\u3057\uff0c\u30af\u30e9\u30a6\u30c9\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3060\u3051\u3067\u306a\u304f\uff0c\u6a5f\u68b0\u5b66\u7fd2\u30fb\u79d1\u5b66\u8a08\u7b97\u306e\u6587\u8108\u306a\u3069\u3067\u3082\u6b20\u304b\u3059\u3053\u3068\u306e\u3067\u304d\u306a\u3044\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3068\u306a\u3063\u305f\uff0e\nDocker \u306f\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u306e\u88fd\u54c1\u3092\u9664\u304d\u7121\u6599\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\uff0c\u30b3\u30a2\u306e\u90e8\u5206\u306f\n\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\n\u3068\u3057\u3066\u516c\u958b\u3055\u308c\u3066\u3044\u308b\uff0e\nDocker \u306f Linux, Windows, Mac \u3044\u305a\u308c\u306e OS \u3067\u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u6982\u5ff5\u3068\u3057\u3066\u306f\uff0c Docker \u306f\u4eee\u60f3\u30de\u30b7\u30f3 (Virtual machine; VM) \u306b\u3068\u3066\u3082\u8fd1\u3044\uff0e\n\u3053\u3053\u3067\u306f\uff0c VM \u3068\u306e\u5bfe\u6bd4\u3092\u3057\u306a\u304c\u3089\uff0cDocker \u3068\u306f\u306a\u306b\u304b\u3092\u7c21\u5358\u306b\u8aac\u660e\u3057\u3088\u3046\uff0e\n\u4eee\u60f3\u30de\u30b7\u30f3 (VM) \u3068\u306f\uff0c\u30db\u30b9\u30c8\u3068\u306a\u308b\u30de\u30b7\u30f3\u306e\u4e0a\u306b\uff0c\u4eee\u60f3\u5316\u3055\u308c\u305fOS\u3092\u8d70\u3089\u305b\u308b\u6280\u8853\u3067\u3042\u308b (Figure 39)\uff0e\nVM \u306b\u306f \u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc (Hypervisor) \u3068\u3088\u3070\u308c\u308b\u30ec\u30a4\u30e4\u30fc\u304c\u5b58\u5728\u3059\u308b\uff0e\nHypervisor \u306f\u307e\u305a\uff0c\u7269\u7406\u7684\u306a\u8a08\u7b97\u6a5f\u30ea\u30bd\u30fc\u30b9 (CPU, RAM, network \u306a\u3069) \u3092\u5206\u5272\u3057\uff0c\u4eee\u60f3\u5316\u3059\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c \u30db\u30b9\u30c8\u30de\u30b7\u30f3\u306b\u7269\u7406\u7684\u306a CPU \u304c4\u30b3\u30a2\u3042\u308b\u3068\u3057\u3066\uff0c\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306f\u305d\u308c\u3092 (2,2) \u500b\u306e\u7d44\u306b\u4eee\u60f3\u7684\u306b\u5206\u5272\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nVM \u4e0a\u3067\u8d77\u52d5\u3059\u308b OS \u306b\u306f\uff0c\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306b\u3088\u3063\u3066\u4eee\u60f3\u5316\u3055\u308c\u305f\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\nVM \u4e0a\u3067\u8d77\u52d5\u3059\u308b OS \u306f\u57fa\u672c\u7684\u306b\u5b8c\u5168\u306b\u72ec\u7acb\u3067\u3042\u308a\uff0c\u305f\u3068\u3048\u3070 OS-A \u306f OS-B \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305fCPU\u3084\u30e1\u30e2\u30ea\u30fc\u9818\u57df\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044 (\u3053\u308c\u3092 isolation \u3068\u3088\u3076)\uff0e\nVM \u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u6709\u540d\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3068\u3057\u3066\u306f\uff0c VMware\uff0c VirtualBox\uff0c Xen \u306a\u3069\u304c\u3042\u308b\uff0e\n\u307e\u305f\uff0c\u3053\u308c\u307e\u3067\u89e6\u3063\u3066\u304d\u305f EC2 \u3082\uff0c\u57fa\u672c\u7684\u306b VM \u6280\u8853\u3092\u4f7f\u3046\u3053\u3068\u3067\u6240\u671b\u306e\u30b9\u30da\u30c3\u30af\u3092\u3082\u3063\u305f\u4eee\u60f3\u30de\u30b7\u30f3\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u63d0\u793a\u3055\u308c\u308b\uff0e\nDocker \u3082\uff0c VM \u3068\u540c\u69d8\u306b\uff0c\u4eee\u60f3\u5316\u3055\u308c\u305f OS \u3092\u30db\u30b9\u30c8\u306eOS\u4e0a\u306b\u8d70\u3089\u305b\u308b\u305f\u3081\u306e\u6280\u8853\u3067\u3042\u308b\uff0e\nVM \u306b\u5bfe\u3057\uff0c Docker \u3067\u306f\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30ec\u30d9\u30eb\u306e\u4eee\u60f3\u5316\u306f\u884c\u308f\u308c\u3066\u304a\u3089\u305a\uff0c\u3059\u3079\u3066\u306e\u4eee\u60f3\u5316\u306f\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30ec\u30d9\u30eb\u3067\u5b9f\u73fe\u3055\u308c\u3066\u3044\u308b (Figure 39)\uff0e\nDocker \u3067\u8d70\u308b\u4eee\u60f3 OS \u306f\uff0c\u591a\u304f\u306e\u90e8\u5206\u3092\u30db\u30b9\u30c8\u306eOS\u306b\u4f9d\u5b58\u3057\u3066\u304a\u308a\uff0c\u7d50\u679c\u3068\u3057\u3066\u975e\u5e38\u306b\u30b3\u30f3\u30d1\u30af\u30c8\u3067\u3042\u308b\uff0e\n\u305d\u306e\u7d50\u679c\uff0c Docker \u3067\u4eee\u60f3 OS \u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u8981\u3059\u308b\u6642\u9593\u306f\uff0c VM \u306b\u6bd4\u3079\u3066\u5727\u5012\u7684\u306b\u65e9\u3044\uff0e\n\u307e\u305f\uff0c \u30d1\u30c3\u30b1\u30fc\u30b8\u5316\u3055\u308c\u305f\u74b0\u5883 (=\u30a4\u30e1\u30fc\u30b8) \u306e\u30b5\u30a4\u30ba\u3082\u5b8c\u5168\u306aOS\u306b\u6bd4\u3079\u5727\u5012\u7684\u306b\u5c0f\u3055\u304f\u306a\u308b\u306e\u3067\uff0c\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u901a\u3058\u305f\u3084\u308a\u53d6\u308a\u304c\u975e\u5e38\u306b\u9ad8\u901f\u5316\u3055\u308c\u308b\u70b9\u3082\u91cd\u8981\u3067\u3042\u308b\n\u52a0\u3048\u3066\uff0c VM \u306e\u3044\u304f\u3064\u304b\u306e\u5b9f\u88c5\u3067\u306f\uff0c\u30e1\u30bf\u30eb (\u4eee\u60f3\u5316\u30de\u30b7\u30f3\u306b\u5bfe\u3057\u3066\uff0c\u7269\u7406\u7684\u306a\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u4e0a\u3067\u76f4\u63a5\u8d77\u52d5\u3059\u308b\u5834\u5408\u306e\u3053\u3068) \u3068\u6bd4\u3079\uff0c\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u30ec\u30a4\u30e4\u30fc\u3067\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u306a\u3069\u306b\u3088\u308a\u6027\u80fd\u304c\u4f4e\u4e0b\u3059\u308b\u3053\u3068\u304c\u77e5\u3089\u308c\u3066\u3044\u308b\u304c\uff0c Docker \u3067\u306f\u30e1\u30bf\u30eb\u3068\u307b\u307c\u540c\u69d8\u306e\u6027\u80fd\u3092\u5f15\u304d\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u3068\u3055\u308c\u3066\u3044\u308b\uff0e\n\u305d\u306e\u4ed6\uff0c VM \u3068\u306e\u76f8\u9055\u70b9\u306a\u3069\u306f\u305f\u304f\u3055\u3093\u3042\u308b\u306e\u3060\u304c\uff0c\u3053\u3053\u3067\u306f\u3053\u308c\u4ee5\u4e0a\u8a73\u7d30\u306b\u306f\u7acb\u3061\u5165\u3089\u306a\u3044\uff0e\n\u5927\u4e8b\u306a\u306e\u306f\uff0c Docker \u3068\u306f\u3068\u3066\u3082\u30b3\u30f3\u30d1\u30af\u30c8\u304b\u3064\u30cf\u30a4\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306a\u4eee\u60f3\u8a08\u7b97\u74b0\u5883\u3092\u4f5c\u308b\u30c4\u30fc\u30eb\u3067\u3042\u308b\uff0c\u3068\u3044\u3046\u70b9\u3067\u3042\u308b\uff0e\n\u305d\u306e\u624b\u8efd\u3055\u3086\u3048\u306b\uff0c2013\u5e74\u306e\u767b\u5834\u4ee5\u964d\uff0c\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u5229\u7528\u304c\u6025\u901f\u306b\u5897\u52a0\u3057\uff0c\u73fe\u4ee3\u306e\u30af\u30e9\u30a6\u30c9\u3067\u306f\u6b20\u304f\u3053\u3068\u306e\u3067\u304d\u306a\u3044\u4e2d\u5fc3\u7684\u306a\u6280\u8853\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n\n\n7.3. Docker \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\nDocker \u3068\u306f\u306a\u306b\u304b\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u306f\uff0c\u5b9f\u969b\u306b\u89e6\u3063\u3066\u52d5\u304b\u3057\u3066\u307f\u308b\u306e\u304c\u4e00\u756a\u6709\u52b9\u306a\u624b\u7acb\u3066\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c Docker \u306e\u7c21\u5358\u306a\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u884c\u3063\u3066\u3044\u304f\uff0e\nDocker \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3064\u3044\u3066\u306f\uff0c Section 15.6 \u304a\u3088\u3073 \u516c\u5f0f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3092\u53c2\u7167\u3057\u3066\u3082\u3089\u3044\u305f\u3044\uff0e\nDocker \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3057\u3066\u3044\u308b\u524d\u63d0\u3067\uff0c\u4ee5\u4e0b\u306f\u8a71\u3092\u9032\u3081\u308b\u3082\u306e\u3068\u3059\u308b\uff0e\n\n7.3.1. Docker \u7528\u8a9e\u96c6\nDocker \u3092\u4f7f\u3044\u59cb\u3081\u308b\u306b\u5f53\u305f\u308a\uff0c\u6700\u521d\u306b\u4e3b\u8981\u306a\u7528\u8a9e\u3092\u89e3\u8aac\u3057\u3088\u3046\uff0e\n\u6b21\u306e\u30d1\u30e9\u30b0\u30e9\u30d5\u3067\u592a\u5b57\u3067\u5f37\u8abf\u3055\u308c\u305f\u7528\u8a9e\u3092\u982d\u306b\u5165\u308c\u305f\u4e0a\u3067\uff0c\u7d9a\u304f\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\nDocker \u3092\u8d77\u52d5\u3059\u308b\u969b\u306e\u5927\u307e\u304b\u306a\u30b9\u30c6\u30c3\u30d7\u3092\u793a\u3057\u305f\u306e\u304c Figure 40 \u3067\u3042\u308b\uff0e\n\u30d1\u30c3\u30b1\u30fc\u30b8\u3055\u308c\u305f\u4e00\u3064\u306e\u8a08\u7b97\u74b0\u5883\u306e\u3053\u3068\u3092 \u30a4\u30e1\u30fc\u30b8 (Image) \u3068\u3088\u3076\uff0e\n\u30a4\u30e1\u30fc\u30b8\u306f\uff0c Docker Hub \u306a\u3069\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u914d\u5e03\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u304b\uff0c\u81ea\u5206\u3067\u30ab\u30b9\u30bf\u30e0\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u201d\u30ec\u30b7\u30d4\u201d\u3092\u8a18\u8ff0\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u304c Dockerfile \u3067\u3042\u308b\uff0e\nDockerfile \u304b\u3089\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u64cd\u4f5c\u3092 build \u3068\u3088\u3076\uff0e\n\u30a4\u30e1\u30fc\u30b8\u304c\u30db\u30b9\u30c8\u30de\u30b7\u30f3\u306e\u30e1\u30e2\u30ea\u306b\u30ed\u30fc\u30c9\u3055\u308c\uff0c\u8d77\u52d5\u72b6\u614b\u306b\u3042\u308b\u8a08\u7b97\u74b0\u5883\u306e\u3053\u3068\u3092 \u30b3\u30f3\u30c6\u30ca (Container) \u3068\u3088\u3076\uff0e\nContainer \u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\u304c run \u3067\u3042\u308b\uff0e\n\n\n\nFigure 40. Image \u3068 Container\n\n\n\n7.3.2. \u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\u30d1\u30c3\u30b1\u30fc\u30b8\u5316\u3055\u308c\u305f Docker \u306e\u4eee\u60f3\u74b0\u5883 (= \u30a4\u30e1\u30fc\u30b8 (Image)) \u306f\uff0c Docker Hub \u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\uff0e\nDocker Hub \u306b\u306f\uff0c\u500b\u4eba\u3084\u4f01\u696d\u30fb\u56e3\u4f53\u304c\u4f5c\u6210\u3057\u305f Docker \u30a4\u30e1\u30fc\u30b8\u304c\u96c6\u3081\u3089\u308c\u3066\u304a\u308a\uff0c GitHub \u306a\u3069\u3068\u540c\u3058\u611f\u899a\u3067\uff0c\u30aa\u30fc\u30d7\u30f3\u306a\u5f62\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c Ubuntu \u306e\u30a4\u30e1\u30fc\u30b8\u306f Ubuntu \u306e\u516c\u5f0f\u30ea\u30dd\u30b8\u30c8\u30ea \u3067\u516c\u958b\u3055\u308c\u3066\u304a\u308a\uff0c pull \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\u3053\u3068\u3067\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n$ docker pull ubuntu:18.04\n\n\u3053\u3053\u3067\uff0c\u30a4\u30e1\u30fc\u30b8\u540d\u306e : (\u30b3\u30ed\u30f3) \u4ee5\u964d\u306b\u7d9a\u304f\u6587\u5b57\u5217\u3092 \u30bf\u30b0 (tag) \u3068\u547c\u3073\uff0c\u4e3b\u306b\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u306a\u3069\u306e\u76ee\u7684\u3067\u4f7f\u308f\u308c\u308b\uff0e\n\n\n\n\n\n\n\npull \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f Docker Hub \u3067\u30a4\u30e1\u30fc\u30b8\u3092\u691c\u7d22\u3057\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u884c\u3046\uff0e\nDocker \u30a4\u30e1\u30fc\u30b8\u3092\u516c\u958b\u3059\u308b\u305f\u3081\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 (\u30ec\u30b8\u30b9\u30c8\u30ea (registry) \u3068\u3088\u3076) \u306f Docker Hub \u3060\u3051\u3067\u306f\u306a\u304f\uff0c\u305f\u3068\u3048\u3070 GitLab \u3084 GitHub \u306f\u72ec\u81ea\u306e\u30ec\u30b8\u30b9\u30c8\u30ea\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u3057\uff0c\u500b\u4eba\u306e\u30b5\u30fc\u30d0\u30fc\u3067\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u7acb\u3061\u4e0a\u3052\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\nDocker Hub \u4ee5\u5916\u306e\u30ec\u30b8\u30b9\u30c8\u30ea\u304b\u3089 pull \u3059\u308b\u306b\u306f\uff0c myregistry.local:5000/testing/test-image \u306e\u3088\u3046\u306b\uff0c\u30a4\u30e1\u30fc\u30b8\u540d\u306e\u5148\u982d\u306b\u3064\u3051\u308b\u5f62\u3067\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u30a2\u30c9\u30ec\u30b9 (\u3055\u3089\u306b\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066\u30dd\u30fc\u30c8\u756a\u53f7) \u3092\u6307\u5b9a\u3059\u308b\uff0e\n\n\n\n\n\n\n7.3.3. \u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\nPull \u3057\u3066\u304d\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u8d77\u52d5\u3059\u308b\u306b\u306f\uff0c run \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\uff0e\n\n$ docker run -it ubuntu:18.04\n\n\u3053\u3053\u3067\uff0c -it \u3068\u306f\uff0c\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a shell \u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3042\u308b\uff0e\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c\u4eee\u60f3\u5316\u3055\u308c\u305f Ubuntu \u304c\u8d77\u52d5\u3055\u308c\uff0c\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u30b3\u30de\u30f3\u30c9\u304c\u6253\u3061\u8fbc\u3081\u308b\u3088\u3046\u306b\u306a\u308b (Figure 41)\uff0e\n\u3053\u306e\u3088\u3046\u306b\u8d77\u52d5\u72b6\u614b\u306b\u3042\u308b\u8a08\u7b97\u74b0\u5883 (\u30e9\u30f3\u30bf\u30a4\u30e0) \u306e\u3053\u3068\u3092 Container (\u30b3\u30f3\u30c6\u30ca) \u3068\u3088\u3076\uff0e\n\n\n\nFigure 41. Docker \u3092\u4f7f\u3063\u3066 ubuntu:18.04 \u30a4\u30e1\u30fc\u30b8\u3092\u8d77\u52d5\n\n\u3053\u3053\u3067\u4f7f\u7528\u3057\u305f ubuntu:18.04 \u306e\u30a4\u30e1\u30fc\u30b8\u306f\uff0c\u7a7a\u306e Ubuntu OS \u3060\u304c\uff0c\u3059\u3067\u306b\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u306e\u3082\u306e\u3082\u3042\u308b\uff0e\n\u3053\u308c\u306f\uff0c Section 6 \u3067\u307f\u305f DLAMI \u3068\u6982\u5ff5\u3068\u3057\u3066\u4f3c\u3066\u3044\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c PyTorch \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u306e\u30a4\u30e1\u30fc\u30b8\u306f PyTorch \u516c\u5f0f\u306e Docker Hub \u30ea\u30dd\u30b8\u30c8\u30ea \u3067\u516c\u958b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3092\u8d77\u52d5\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ docker run -it pytorch/pytorch\n\n\n\n\n\n\n\n\ndocker run \u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\uff0c\u30ed\u30fc\u30ab\u30eb\u306b\u8a72\u5f53\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306f\uff0c\u81ea\u52d5\u7684\u306b Docker Hub \u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u308b\uff0e\n\n\n\n\npytorch \u306e\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3057\u305f\u3089\uff0c Python \u306e\u30b7\u30a7\u30eb\u3092\u7acb\u3061\u4e0a\u3052\u3066\uff0c pytorch \u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ python3\nPython 3.7.7 (default, May  7 2020, 21:25:33)\n[GCC 7.3.0] :: Anaconda, Inc. on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> import torch\n>>> torch.cuda.is_available()\nFalse\n\n\u3053\u306e\u3088\u3046\u306b\uff0c Docker \u3092\u4f7f\u3046\u3053\u3068\u3067\u7c21\u5358\u306b\u7279\u5b9a\u306eOS\u30fb\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5165\u3063\u305f\u8a08\u7b97\u74b0\u5883\u3092\u518d\u73fe\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b\uff0e\n\n\n7.3.4. \u81ea\u5206\u3060\u3051\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u308b\n\u81ea\u5206\u306e\u4f7f\u3046\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30fb\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\uff0c\u81ea\u5206\u3060\u3051\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c \u672c\u66f8\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u5b9f\u884c\u7528\u306b\u63d0\u4f9b\u3057\u3066\u3044\u308b docker \u30a4\u30e1\u30fc\u30b8\n\u306b\u306f\uff0c Python, Node.js, AWS CLI, AWS CDK \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308a\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u308b\u3060\u3051\u3067\u3059\u3050\u306b\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\u30ab\u30b9\u30bf\u30e0\u306e docker \u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u308b\u306b\u306f\uff0c Dockerfile \u3068\u3044\u3046\u540d\u524d\u306e\u3064\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u305d\u306e\u4e2d\u306b\u3069\u3093\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u304b\u306a\u3069\u3092\u8a18\u8ff0\u3057\u3066\u3044\u304f\uff0e\n\n\nFROM node:12\nLABEL maintainer=\"Tomoyuki Mano\"\n\nRUN apt-get update \\\n    && apt-get install nano\n\n(1)\nRUN cd /opt \\\n    && curl -q \"https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz\" -o Python-3.7.6.tgz \\\n    && tar -xzf Python-3.7.6.tgz \\\n    && cd Python-3.7.6 \\\n    && ./configure --enable-optimizations \\\n    && make install\n\nRUN cd /opt \\\n    && curl \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\" \\\n    && unzip awscliv2.zip \\\n    && ./aws/install\n\n(2)\nRUN npm install -g aws-cdk@1.100\n\n# clean up unnecessary files\nRUN rm -rf /opt/*\n\n# copy hands-on source code in /root/\nCOPY handson/ /root/handson\n\nDockerfile \u306e\u4e2d\u8eab\u306e\u8aac\u660e\u306f\u8a73\u3057\u304f\u306f\u884c\u308f\u306a\u3044\u304c\uff0c\u305f\u3068\u3048\u3070\u4e0a\u306e\u30b3\u30fc\u30c9\u3067 <1> \u3067\u793a\u3057\u305f\u3068\u3053\u308d\u306f\uff0c Python 3.7 \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c <2> \u3067\u793a\u3057\u305f\u3068\u3053\u308d\u306f\uff0c AWS CDK \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\u3060\u308d\u3046\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u30ea\u30a2\u30eb\u306a OS \u3067\u884c\u3046\u306e\u3068\u540c\u3058\u6d41\u308c\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30b3\u30de\u30f3\u30c9\u3092\u9010\u4e00\u8a18\u8ff0\u3057\u3066\u3044\u304f\u3053\u3068\u3067\uff0c\u81ea\u5206\u3060\u3051\u306e Docker \u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u4e00\u5ea6\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308c\u3070\uff0c\u305d\u308c\u3092\u914d\u5e03\u3059\u308b\u3053\u3068\u3067\uff0c\u4ed6\u8005\u3082\u540c\u4e00\u306e\u8a08\u7b97\u74b0\u5883\u3092\u7c21\u5358\u306b\u518d\u69cb\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\"\u307c\u304f\u306e\u74b0\u5883\u3067\u306f\u305d\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u8d70\u3063\u305f\u306e\u306b\u306a\u2026\u200b\" \u3068\u3044\u3046\u306e\u306f\uff0c\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u521d\u5fc3\u8005\u3067\u306f\u3088\u304f\u8033\u306b\u3059\u308b\u4f1a\u8a71\u3060\u304c\uff0c Docker \u3092\u4f7f\u3044\u3053\u306a\u305b\u3070\u305d\u306e\u3088\u3046\u306a\u5fc3\u914d\u3068\u306f\u7121\u7e01\u3067\u3042\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u610f\u5473\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u4ee5\u5916\u306e\u5834\u9762\u3067\u3082\uff0c Docker \u306e\u6709\u7528\u6027\u30fb\u6c4e\u7528\u6027\u306f\u6975\u3081\u3066\u9ad8\u3044\uff0e\n\n\n\n\n7.4. Elastic Container Service (ECS)\n\n\n\nFigure 42. ECS \u306e\u30a2\u30a4\u30b3\u30f3\n\n\u3053\u3053\u307e\u3067\u306b\u8aac\u660e\u3057\u3066\u304d\u305f\u3088\u3046\u306b\uff0c Docker \u3092\u4f7f\u3046\u3053\u3068\u3067\u4eee\u60f3\u8a08\u7b97\u74b0\u5883\u3092\u7c21\u5358\u306b\u8907\u88fd\u30fb\u8d77\u52d5\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b\uff0e\n\u672c\u7ae0\u306e\u6700\u5f8c\u306e\u8a71\u984c\u3068\u3057\u3066\uff0c AWS \u4e0a\u3067 Docker \u3092\u4f7f\u3063\u305f\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u3088\u3046\uff0e\nElastic Container Service (ECS) \u3068\u306f\uff0c Docker \u3092\u4f7f\u3063\u305f\u8a08\u7b97\u6a5f\u30af\u30e9\u30b9\u30bf\u30fc\u3092 AWS \u4e0a\u306b\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3042\u308b (Figure 42)\uff0e\nECS \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\uff0c Docker \u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a08\u7b97\u6a5f\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u6295\u5165\u3057\u305f\u308a\uff0c\u8a08\u7b97\u6a5f\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8ffd\u52a0\u30fb\u524a\u9664\u3059\u308b\u64cd\u4f5c (=\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0) \u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nECS \u306e\u6982\u8981\u3092\u793a\u3057\u305f\u306e\u304c Figure 43 \u3067\u3042\u308b\uff0e\nECS \u306f\uff0c\u30bf\u30b9\u30af (Task) \u3068\u547c\u3070\u308c\u308b\u5358\u4f4d\u3067\u7ba1\u7406\u3055\u308c\u305f\u8a08\u7b97\u30b8\u30e7\u30d6\u3092\u53d7\u3051\u4ed8\u3051\u308b\uff0e\n\u30b7\u30b9\u30c6\u30e0\u306b\u30bf\u30b9\u30af\u304c\u6295\u5165\u3055\u308c\u308b\u3068\uff0cECS \u306f\u6700\u521d\u306b\u30bf\u30b9\u30af\u3067\u6307\u5b9a\u3055\u308c\u305f Docker \u30a4\u30e1\u30fc\u30b8\u3092\u5916\u90e8\u30ec\u30b8\u30b9\u30c8\u30ea\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u308b\uff0e\n\u5916\u90e8\u30ec\u30b8\u30b9\u30c8\u30ea\u3068\u3057\u3066\u306f\uff0c Docker Hub \u3084 AWS \u72ec\u81ea\u306e Docker \u30ec\u30b8\u30b9\u30c8\u30ea\u3067\u3042\u308b ECR (Elastic Container Registry) \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nECS \u306e\u6b21\u306e\u91cd\u8981\u306a\u5f79\u5272\u306f\u30bf\u30b9\u30af\u306e\u914d\u7f6e\u3067\u3042\u308b\uff0e\n\u3042\u3089\u304b\u3058\u3081\u5b9a\u7fa9\u3055\u308c\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\uff0c\u8a08\u7b97\u8ca0\u8377\u304c\u5c0f\u3055\u3044\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u9078\u3073\u51fa\u3057\uff0c\u305d\u3053\u306b Docker \u30a4\u30e1\u30fc\u30b8\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u3067\u6307\u5b9a\u3055\u308c\u305f\u8a08\u7b97\u30bf\u30b9\u30af\u304c\u958b\u59cb\u3055\u308c\u308b\uff0e\n\"\u8a08\u7b97\u8ca0\u8377\u304c\u5c0f\u3055\u3044\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u9078\u3073\u51fa\u3059\" \u3068\u8a00\u3063\u305f\u304c\uff0c\u5177\u4f53\u7684\u306b\u3069\u306e\u3088\u3046\u306a\u6226\u7565\u30fb\u30dd\u30ea\u30b7\u30fc\u3067\u3053\u306e\u9078\u629e\u3092\u884c\u3046\u304b\u306f\uff0c\u30e6\u30fc\u30b6\u30fc\u306e\u6307\u5b9a\u3057\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u5f93\u3046\uff0e\n\u307e\u305f\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3082ECS\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u6982\u5ff5\u3067\u3042\u308b\uff0e\n\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3068\u306f\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8a08\u7b97\u8ca0\u8377\u3092\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3057\uff0c\u8a08\u7b97\u8ca0\u8377\u306b\u5fdc\u3058\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u30fb\u505c\u6b62\u3092\u884c\u3046\u64cd\u4f5c\u3092\u6307\u3059\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u5168\u4f53\u306e\u8a08\u7b97\u8ca0\u8377\u304c\u6307\u5b9a\u3055\u308c\u305f\u95be\u5024 (\u305f\u3068\u3048\u307080%\u306e\u7a3c\u50cd\u7387) \u3092\u8d85\u3048\u3066\u3044\u305f\u5834\u5408\uff0c\u65b0\u305f\u306a\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306b\u7acb\u3061\u4e0a\u3052\u308b\u64cd\u4f5c\u3092 scale-out (\u30b9\u30b1\u30fc\u30eb\u30a2\u30a6\u30c8) \u3068\u3088\u3073\uff0c\n\u8ca0\u8377\u304c\u6e1b\u3063\u305f\u5834\u5408\u306b\u4e0d\u8981\u306a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u505c\u6b62\u3059\u308b\u64cd\u4f5c\u3092 scale-in (\u30b9\u30b1\u30fc\u30eb\u30a4\u30f3) \u3068\u3088\u3076\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\uff0c ECS \u304c\u307b\u304b\u306e AWS \u306e\u30b5\u30fc\u30d3\u30b9\u3068\u9023\u643a\u3059\u308b\u3053\u3068\u3067\u5b9f\u73fe\u3055\u308c\u308b\uff0e\n\u5177\u4f53\u7684\u306b\u306f\uff0c EC2 \u306e Auto scaling group (ASG) \u3084 Fargate \u306e\uff12\u3064\u306e\u9078\u629e\u80a2\u304c\u591a\u304f\u306e\u5834\u5408\u9078\u629e\u3055\u308c\u308b\uff0e\nASG \u306b\u3064\u3044\u3066\u306f Section 9, Fargate \u306b\u3064\u3044\u3066\u306f Section 8 \u3067\u3088\u308a\u8a73\u7d30\u306b\u89e3\u8aac\u3059\u308b\uff0e\n\u3053\u308c\u3089\u4e00\u9023\u306e\u30bf\u30b9\u30af\u306e\u7ba1\u7406\u3092\uff0c ECS \u306f\u81ea\u52d5\u3067\u3084\u3063\u3066\u304f\u308c\u308b\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3084\u30bf\u30b9\u30af\u306e\u914d\u7f6e\u306b\u95a2\u3057\u3066\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4e00\u5ea6\u6307\u5b9a\u3057\u3066\u3057\u307e\u3048\u3070\uff0c\u30e6\u30fc\u30b6\u30fc\u306f (\u307b\u3068\u3093\u3069\u306a\u306b\u3082\u8003\u3048\u305a\u306b) \u5927\u91cf\u306e\u30bf\u30b9\u30af\u3092\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u3063\u3066\u30bf\u30b9\u30af\u306e\u91cf\u306b\u3061\u3087\u3046\u3069\u5341\u5206\u306a\u3060\u3051\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3057\uff0c\u30bf\u30b9\u30af\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306f\u4e0d\u8981\u306a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u3059\u3079\u3066\u505c\u6b62\u3055\u308c\u308b\uff0e\n\u3055\u3066\uff0c\u3053\u3053\u307e\u3067\u8aac\u660e\u7684\u306a\u8a71\u304c\u7d9a\u3044\u3066\u3057\u307e\u3063\u305f\u304c\uff0c\u6b21\u7ae0\u304b\u3089\u306f\u65e9\u901f Docker \u3068 AWS \u3092\u4f7f\u3063\u3066\u5927\u898f\u6a21\u306a\u4e26\u5217\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3057\u3066\u3044\u3053\u3046\uff01\n\n\n\nFigure 43. ECS \u306e\u6982\u8981\n\n\n\n\n\n8. Hands-on #3: AWS \u3067\u81ea\u52d5\u8cea\u554f\u56de\u7b54\u30dc\u30c3\u30c8\u3092\u8d70\u3089\u305b\u308b\n\n\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u4e09\u56de\u3067\u306f\uff0c Docker \u3068 ECS \u3092\u99c6\u4f7f\u3057\u305f\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u3088\u3046\uff0e\n\u5177\u4f53\u7684\u306b\u306f\uff0c\u6df1\u5c64\u5b66\u7fd2\u306b\u3088\u308b\u81ea\u7136\u8a00\u8a9e\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u3067\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u4e0e\u3048\u3089\u308c\u305f\u6587\u7ae0\u984c\u306b\u5bfe\u3057\u3066\u56de\u7b54\u3092\u751f\u6210\u3059\u308b\uff0c\u81ea\u52d5 Question & Answering \u30dc\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3088\u3046\uff0e\nECS \u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u30b8\u30e7\u30d6\u306e\u6570\u306b\u3088\u3063\u3066\u52d5\u7684\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570\u3092\u5236\u5fa1\u3057\uff0c\u4e26\u5217\u306b\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3057\u3088\u3046\uff0e\n\n\n\n\n\n\n\n\u901a\u5e38\u306e\u6a5f\u68b0\u5b66\u7fd2\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u306f\uff0c\u30e2\u30c7\u30eb\u306e\u8a13\u7df4 \u21d2 \u63a8\u8ad6 (\u30c7\u30fc\u30bf\u3078\u306e\u9069\u7528) \u304c\u57fa\u672c\u7684\u306a\u6d41\u308c\u3067\u3042\u308b\uff0e\n\u3057\u304b\u3057\u306a\u304c\u3089\uff0c GPU \u642d\u8f09\u578b\u306e EC2 \u30af\u30e9\u30b9\u30bf\u30fc\u3092\u4f7f\u3063\u305f\u30e2\u30c7\u30eb\u306e\u8a13\u7df4\u306f\u3084\u3084\u96e3\u6613\u5ea6\u304c\u9ad8\u3044\u305f\u3081\uff0c\u6b21\u7ae0 (Section 9) \u3067\u53d6\u308a\u6271\u3046\uff0e\n\u672c\u7ae0\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u69cb\u7bc9\u30fb\u30bf\u30b9\u30af\u306e\u7ba1\u7406\u306a\u3069\u306e\u6982\u5ff5\u306b\u6163\u308c\u308b\u305f\u3081\uff0c\u3088\u308a\u30b7\u30f3\u30d7\u30eb\u306a\u5b9f\u88c5\u3067\u5b9f\u73fe\u3067\u304d\u308bFargate \u30af\u30e9\u30b9\u30bf\u30fc\u3092\u7528\u3044\u305f\u63a8\u8ad6\u8a08\u7b97\u306e\u4e26\u5217\u5316\u3092\u7d39\u4ecb\u3059\u308b\uff0e\n\n\n\n\n\n8.1. Fargate\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u5165\u3063\u3066\u3044\u304f\u524d\u306b\uff0c Fargate \u3068\u3044\u3046 AWS \u306e\u6a5f\u80fd\u3092\u77e5\u3063\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308b (Figure 44)\uff0e\n\n\n\nFigure 44. Fargate \u306e\u30a2\u30a4\u30b3\u30f3\n\nECS \u306e\u6982\u8981\u3092\u793a\u3057\u305f Figure 43 \u3092\u3082\u3046\u4e00\u5ea6\u898b\u3066\u307f\u3088\u3046\uff0e\n\u3053\u306e\u56f3\u3067\uff0c ECS \u306e\u7ba1\u7406\u4e0b\u306b\u3042\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u304c\u793a\u3055\u308c\u3066\u3044\u308b\u304c\uff0c\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u4e2d\u3067\u8a08\u7b97\u3092\u884c\u3046\u5b9f\u4f53\u3068\u3057\u3066\u306f\u4e8c\u3064\u306e\u9078\u629e\u80a2\u304c\u3042\u308b\uff0e\nEC2 \u3042\u308b\u3044\u306f Fargate \u306e\u3044\u305a\u308c\u304b\u3067\u3042\u308b\uff0e\nEC2 \u3092\u7528\u3044\u305f\u5834\u5408\u306f\uff0c\u5148\u306e\u7ae0 (Section 4, Section 6) \u3067\u8aac\u660e\u3057\u305f\u3088\u3046\u306a\u6d41\u308c\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3057\uff0c\u8a08\u7b97\u304c\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u3057\u304b\u3057\uff0c EC2 \u3092\u7528\u3044\u305f\u8a08\u7b97\u6a5f\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u4f5c\u6210\u30fb\u7ba1\u7406\u306f\u6280\u8853\u7684\u306a\u96e3\u6613\u5ea6\u304c\u3084\u3084\u9ad8\u3044\u306e\u3067\uff0c\u6b21\u7ae0 (Section 9) \u3067\u8aac\u660e\u3059\u308b\u3053\u3068\u306b\u3059\u308b\uff0e\nFargate \u3068\u306f\uff0c ECS \u3067\u306e\u5229\u7528\u306b\u7279\u5316\u3057\u3066\u8a2d\u8a08\u3055\u308c\u305f\uff0c\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3057\u305f\u8a08\u7b97\u30bf\u30b9\u30af\u3092\u8d70\u3089\u305b\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3067\u3042\u308b\uff0e\n\u8a08\u7b97\u3092\u8d70\u3089\u305b\u308b\u3068\u3044\u3046\u70b9\u3067\u306f EC2 \u3068\u5f79\u5272\u306f\u4f3c\u3066\u3044\u308b\u304c\uff0c Fargate \u306f EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u3088\u3046\u306a\u7269\u7406\u7684\u5b9f\u4f53\u306f\u3082\u305f\u306a\u3044\uff0e\n\u7269\u7406\u7684\u5b9f\u4f53\u3092\u3082\u305f\u306a\u3044\u3068\u3044\u3046\u306e\u306f\uff0c\u305f\u3068\u3048\u3070 SSH \u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3053\u3068\u306f\u57fa\u672c\u7684\u306b\u60f3\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u3057\uff0c\u306a\u306b\u304b\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u308a\u306a\u3069\u306e\u6982\u5ff5\u3082\u5b58\u5728\u3057\u306a\u3044\uff0e\nFargate \u3067\u306f\u3059\u3079\u3066\u306e\u8a08\u7b97\u306f Docker \u30b3\u30f3\u30c6\u30ca\u3092\u4ecb\u3057\u3066\u884c\u308f\u308c\u308b\uff0e\n\u3059\u306a\u308f\u3061\uff0c Fargate \u3092\u5229\u7528\u3059\u308b\u306b\u306f\uff0c\u30e6\u30fc\u30b6\u30fc\u306f\u6700\u521d\u306b\u6240\u671b\u306e Docker \u30a4\u30e1\u30fc\u30b8\u3092\u6307\u5b9a\u3057\u3066\u304a\u304d\uff0c Fargate \u306f docker run \u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u8a08\u7b97\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\uff0e\nFargate \u3092\u7528\u3044\u308b\u5229\u70b9\u306f\uff0c Fargate \u3092 ECS \u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u6307\u5b9a\u3059\u308b\u3068\uff0c\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306a\u3069\u306e\u64cd\u4f5c\u304c\u7c21\u5358\u306a\u8a2d\u5b9a\u30fb\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u69cb\u7bc9\u3067\u304d\u308b\u70b9\u3067\u3042\u308b\uff0e\nFargate \u3067\u306f\uff0c EC2 \u3068\u540c\u69d8\u306b CPU \u3068\u30e1\u30e2\u30ea\u30fc\u306e\u30b5\u30a4\u30ba\u3092\u5fc5\u8981\u306a\u5206\u3060\u3051\u6307\u5b9a\u3067\u304d\u308b\uff0e\n\u57f7\u7b46\u6642\u70b9\u3067\u306f\uff0c CPU \u306f 0.25 - 4 \u30b3\u30a2\uff0c RAM \u306f 0.5 - 30 GB \u306e\u9593\u3067\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b (\u8a73\u3057\u304f\u306f\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Amazon ECS on AWS Fargate\"\n\u53c2\u7167)\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u304c\u5bb9\u6613\u306a\u5206\uff0c Fargate \u3067\u306f EC2 \u307b\u3069\u5927\u304d\u306a CPU \u30b3\u30a2\u30fb RAM \u5bb9\u91cf\u3092\u5358\u4e00\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u4ed8\u4e0e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305a\uff0c\u307e\u305f GPU \u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u306a\u3044\uff0e\n\u4ee5\u4e0a\u304c Fargate \u306e\u6982\u8981\u3067\u3042\u3063\u305f\u304c\uff0c\u304f\u3069\u304f\u3069\u8a00\u8449\u3067\u8aac\u660e\u3057\u3066\u3082\u306a\u304b\u306a\u304b\u30d4\u30f3\u3068\u3053\u306a\u3044\u3060\u308d\u3046\uff0e\n\u3053\u3053\u304b\u3089\u306f\u5b9f\u969b\u306b\u624b\u3092\u52d5\u304b\u3057\u306a\u304c\u3089\uff0c ECS \u3068 Fargate \u3092\u4f7f\u3063\u305f\u4e26\u5217\u30bf\u30b9\u30af\u306e\u51e6\u7406\u306e\u4ed5\u65b9\u3092\u5b66\u3093\u3067\u3044\u3053\u3046\uff0e\n\n\n\n\n\n\n\n\u53b3\u5bc6\u306b\u306f\uff0c ECS \u306b\u4ed8\u4e0e\u3059\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u306f EC2 \u3068 Fargate \u306e\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n8.2. \u6e96\u5099\n\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u5b9f\u884c\u306b\u306f\uff0c\u7b2c\u4e00\u56de\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u8aac\u660e\u3057\u305f\u6e96\u5099 (Section 4.1) \u304c\u6574\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3059\u308b\uff0e\n\u307e\u305f\uff0c Docker \u304c\u81ea\u8eab\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\u3053\u3068\u3082\u5fc5\u8981\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f 1CPU/4GB RAM \u306e Fargate \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u7528\u3059\u308b\uff0e\n\u8a08\u7b97\u306e\u5b9f\u884c\u306b\u306f 0.025 $/hour \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\uff0e\n\n\n\n\n\n\n8.3. Transformer \u3092\u7528\u3044\u305f question-answering \u30d7\u30ed\u30b0\u30e9\u30e0\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u958b\u767a\u3059\u308b\uff0c\u81ea\u52d5\u8cea\u554f\u56de\u7b54\u30b7\u30b9\u30c6\u30e0\u3092\u3088\u308a\u5177\u4f53\u7684\u306b\u5b9a\u7fa9\u3057\u3088\u3046\uff0e\n\u6b21\u306e\u3088\u3046\u306a\u6587\u8108 (context) \u3068\u8cea\u554f (question) \u304c\u4e0e\u3048\u3089\u308c\u305f\u72b6\u6cc1\u3092\u60f3\u5b9a\u3059\u308b\uff0e\n\ncontext: Albert Einstein (14 March 1879 \u2013 18 April 1955) was a German-born theoretical physicist who developed the theory of relativity, one of the two pillars of modern physics (alongside quantum mechanics). His work is also known for its influence on the philosophy of science. He is best known to the general public for his mass\u2013energy equivalence formula E = mc2, which has been dubbed \\\"the world's most famous equation\\\". He received the 1921 Nobel Prize in Physics \\\"for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect\\\", a pivotal step in the development of quantum theory.\n\nquestion: In what year did Einstein win the Nobel prize?\n\n\u4eca\u56de\u4f5c\u6210\u3059\u308b\u81ea\u52d5\u56de\u7b54\u30b7\u30b9\u30c6\u30e0\u306f\uff0c\u3053\u306e\u3088\u3046\u306a\u554f\u984c\u306b\u5bfe\u3057\u3066\uff0c context \u306b\u542b\u307e\u308c\u308b\u6587\u5b57\u5217\u304b\u3089\u6b63\u89e3\u3068\u306a\u308b\u8a00\u8449\u3092\u898b\u3064\u3051\u51fa\u3059\u3082\u306e\u3068\u3059\u308b\uff0e\n\u4e0a\u306e\u554f\u984c\u3067\u306f\uff0c\u6b21\u306e\u3088\u3046\u306a\u56de\u7b54\u3092\u8fd4\u3059\u3079\u304d\u3067\u3042\u308b\uff0e\n\n\u4eba\u9593\u306b\u3068\u3063\u3066\u306f\uff0c\u3053\u306e\u3088\u3046\u306a\u6587\u7ae0\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f\u5bb9\u6613\u3067\u3042\u308b\u304c\uff0c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306b\u305d\u308c\u3092\u89e3\u304b\u305b\u308b\u306e\u306f\u96e3\u3057\u3044\u3053\u3068\u306f\u5bb9\u6613\u306b\u60f3\u50cf\u304c\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\u3057\u304b\u3057\uff0c\u8fd1\u5e74\u306e\u6df1\u5c64\u5b66\u7fd2\u3092\u4f7f\u3063\u305f\u81ea\u7136\u8a00\u8a9e\u51e6\u7406\u306e\u9032\u6b69\u306f\u8457\u3057\u304f\uff0c\u4e0a\u3067\u793a\u3057\u305f\u3088\u3046\u306a\u4f8b\u984c\u306a\u3069\u306f\u6975\u3081\u3066\u9ad8\u3044\u6b63\u7b54\u7387\u3067\u56de\u7b54\u3067\u304d\u308b\u30e2\u30c7\u30eb\u3092\u4f5c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u4eca\u56de\u306f\uff0c huggingface/transformers \u3067\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u5b66\u7fd2\u6e08\u307f\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u4e0a\u3067\u5b9a\u7fa9\u3057\u305f\u554f\u984c\u3092\u89e3\u304f Q&A \u30dc\u30c3\u30c8\u3092\u4f5c\u308b\uff0e\n\u3053\u306e Q&A \u30dc\u30c3\u30c8\u306f Transformer\n\u3068\u3088\u3070\u308c\u308b\u30e2\u30c7\u30eb\u3092\u4f7f\u3063\u305f\u81ea\u7136\u8a00\u8a9e\u51e6\u7406\u306b\u652f\u3048\u3089\u308c\u3048\u3066\u3044\u308b (Figure 45)\uff0e\n\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\uff0c Docker \u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3057\u305f\u3082\u306e\u304c\n\u8457\u8005\u306e Docker Hub \u30ea\u30dd\u30b8\u30c8\u30ea\n\u306b\u7528\u610f\u3057\u3066\u3042\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u306e\u8a2d\u8a08\u306b\u5165\u308b\u524d\u306b\uff0c\u307e\u305a\u306f\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5358\u4f53\u3067\u52d5\u304b\u3057\u3066\u307f\u3088\u3046\uff0e\n\n\n\nFigure 45. Transformer \u30e2\u30c7\u30eb\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3 (\u753b\u50cf\u51fa\u5178: Vaswani+ 2017)\n\n\n\n\n\n\n\n\n\u306a\u304a\uff0c\u4eca\u56de\u306f\u5b66\u7fd2\u6e08\u307f\u306e\u30e2\u30c7\u30eb\u3092\u7528\u3044\u3066\u3044\u308b\u306e\u3067\uff0c\u79c1\u9054\u304c\u884c\u3046\u306e\u306f\u4e0e\u3048\u3089\u308c\u305f\u5165\u529b\u3092\u30e2\u30c7\u30eb\u306b\u6295\u5165\u3057\u3066\u4e88\u6e2c\u3092\u884c\u3046 (\u63a8\u8ad6) \u306e\u307f\u3067\u3042\u308b\uff0e\n\u63a8\u8ad6\u306e\u6f14\u7b97\u306f\uff0c CPU \u3060\u3051\u3067\u3082\u5341\u5206\u9ad8\u901f\u306b\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\uff0c\u30b3\u30b9\u30c8\u306e\u524a\u6e1b\u3068\uff0c\u5b9f\u88c5\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u3059\u308b\u76ee\u7684\u3067\uff0c\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f GPU \u306f\u5229\u7528\u3057\u306a\u3044\uff0e\n\u4e00\u822c\u7684\u306b\uff0c \u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306f\u5b66\u7fd2\u306e\u307b\u3046\u304c\u5727\u5012\u7684\u306b\u8a08\u7b97\u30b3\u30b9\u30c8\u304c\u5927\u304d\u304f\uff0c\u305d\u306e\u3088\u3046\u306a\u5834\u5408\u306b GPU \u306f\u3088\u308a\u5a01\u529b\u3092\u767a\u63ee\u3059\u308b\uff0e\n\n\n\n\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\uff0c\u4eca\u56de\u4f7f\u3046 Docker image \u3092 \u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 (pull) \u3057\u3066\u3053\u3088\u3046\uff0e\n\n$ docker pull tomomano/qabot:latest\n\npull \u3067\u304d\u305f\u3089\uff0c\u65e9\u901f\u3053\u306e Docker \u306b\u8cea\u554f\u3092\u6295\u3052\u304b\u3051\u3066\u307f\u3088\u3046\uff0e\n\u307e\u305a\u306f context \u3068question \u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u5909\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\uff0e\n\n$ context=\"Albert Einstein (14 March 1879 \u2013 18 April 1955) was a German-born theoretical physicist who developed the theory of relativity, one of the two pillars of modern physics (alongside quantum mechanics). His work is also known for its influence on the philosophy of science. He is best known to the general public for his mass\u2013energy equivalence formula E = mc2, which has been dubbed the world's most famous equation. He received the 1921 Nobel Prize in Physics for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect, a pivotal step in the development of quantum theory.\"\n$ question=\"In what year did Einstein win the Nobel prize ?\"\n\n\u305d\u3046\u3057\u305f\u3089\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u3063\u3066\u30b3\u30f3\u30c6\u30ca\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ docker run tomomano/qabot \"${context}\" \"${question}\" foo --no_save\n\n\u4eca\u56de\u7528\u610f\u3057\u305f Docker image \u306f\uff0c\u7b2c\u4e00\u5f15\u6570\u306b context \u3068\u306a\u308b\u6587\u5b57\u5217\u3092\uff0c\u7b2c\u4e8c\u5f15\u6570\u306b question \u306b\u76f8\u5f53\u3059\u308b\u6587\u5b57\u5217\u3092\u53d7\u3051\u3064\u3051\u308b\uff0e\n\u7b2c\u4e09\u5f15\u6570\uff0c\u7b2c\u56db\u5f15\u6570\u306b\u3064\u3044\u3066\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306b\u5c55\u958b\u3059\u308b\u3068\u304d\u306e\u5b9f\u88c5\u4e0a\u306e\u90fd\u5408\u306a\u306e\u3067\uff0c\u3044\u307e\u306f\u6c17\u306b\u3057\u306a\u304f\u3066\u3088\u3044\uff0e\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c\u6b21\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\n{'score': 0.9881729286683587, 'start': 437, 'end': 441, 'answer': '1921'}\n\n\"score\" \u306f\u6b63\u89e3\u306e\u81ea\u4fe1\u5ea6\u3092\u8868\u3059\u6570\u5b57\u3067\uff0c [0,1] \u306e\u7bc4\u56f2\u3067\u4e0e\u3048\u3089\u308c\u308b\uff0e\n\"start\", \"end\" \u306f\uff0c context \u4e2d\u306e\u4f55\u6587\u5b57\u76ee\u304c\u6b63\u89e3\u306b\u76f8\u5f53\u3059\u308b\u304b\u3092\u793a\u3057\u3066\u304a\u308a\uff0c \"answer\" \u304c\u6b63\u89e3\u3068\u4e88\u6e2c\u3055\u308c\u305f\u6587\u5b57\u5217\u3067\u3042\u308b\uff0e\n1921 \u5e74\u3068\u3044\u3046\uff0c\u6b63\u3057\u3044\u7b54\u3048\u304c\u8fd4\u3063\u3066\u304d\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\uff0e\n\u3082\u3046\u5c11\u3057\u96e3\u3057\u3044\u8cea\u554f\u3092\u6295\u3052\u304b\u3051\u3066\u307f\u3088\u3046\uff0e\n\n$ question=\"Why did Einstein win the Nobel prize ?\"\n$ docker run tomomano/qabot \"${context}\" \"${question}\" foo --no_save\n\n\u51fa\u529b\uff1a\n\n{'score': 0.5235594527494207, 'start': 470, 'end': 506, 'answer': 'his services to theoretical physics,'}\n\n\u4eca\u5ea6\u306f\uff0c score \u304c 0.52 \u3068\uff0c\u5c11\u3057\u81ea\u4fe1\u304c\u306a\u3044\u3088\u3046\u3060\u304c\uff0c\u305d\u308c\u3067\u3082\u6b63\u3057\u3044\u7b54\u3048\u306b\u305f\u3069\u308a\u3064\u3051\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c \u6df1\u5c64\u5b66\u7fd2\u306b\u652f\u3048\u3089\u308c\u305f\u8a00\u8a9e\u30e2\u30c7\u30eb\u3092\u7528\u3044\u308b\u3053\u3068\u3067\uff0c\u5b9f\u7528\u306b\u3082\u5f79\u306b\u7acb\u3061\u305d\u3046\u306a Q&A \u30dc\u30c3\u30c8\u3092\u5b9f\u73fe\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u4ee5\u964d\u3067\u306f\uff0c\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30af\u30e9\u30a6\u30c9\u306b\u5c55\u958b\u3059\u308b\u3053\u3068\u3067\uff0c\u5927\u91cf\u306e\u8cea\u554f\u306b\u81ea\u52d5\u3067\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u3092\u8a2d\u8a08\u3057\u3066\u3044\u304f\uff0e\n\n\n\n\n\n\n\n\u4eca\u56de\u4f7f\u7528\u3059\u308b Question & Answering \u30b7\u30b9\u30c6\u30e0\u306b\u306f\uff0c DistilBERT \u3068\u3044\u3046 Transformer \u3092\u57fa\u306b\u3057\u305f\u8a00\u8a9e\u30e2\u30c7\u30eb\u304c\u7528\u3044\u3089\u308c\u3066\u3044\u308b\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\uff0c \u539f\u8457\u8ad6\u6587 \u3092\u53c2\u7167\u3057\u3066\u3082\u3089\u3044\u305f\u3044\uff0e\n\u307e\u305f\uff0c huggingface/transformers \u306b\u3088\u308b DistilBert \u306e\u5b9f\u88c5\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\n\n\n\n\n\n8.4. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092 Figure 46 \u306b\u793a\u3059\uff0e\n\n\n\nFigure 46. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n\n\u7c21\u5358\u306b\u307e\u3068\u3081\u308b\u3068\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a2d\u8a08\u3067\u3042\u308b\uff0e\n\n\n\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\uff0c\u8cea\u554f\u3092 AWS \u4e0a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u9001\u4fe1\u3059\u308b\uff0e\n\n\n\u8cea\u554f\u306e\u30bf\u30b9\u30af\u306f ECS \u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u308b\uff0e\n\n\nECS \u306f\uff0c Docker Hub \u304b\u3089\uff0c\u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\uff0e\n\n\n\u6b21\u306b\uff0cECS \u306f\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306b\u65b0\u305f\u306a Fargate \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u7acb\u3061\u4e0a\u3052\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f Docker \u30a4\u30e1\u30fc\u30b8\u3092\u3053\u306e\u65b0\u898f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u914d\u7f6e\u3059\u308b\uff0e\n\n\n\n\u3053\u306e\u3068\u304d\uff0c\u4e00\u3064\u306e\u8cea\u554f\u306b\u5bfe\u3057\u4e00\u3064\u306e Fargate \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u7acb\u3061\u4e0a\u3052\u308b\u3053\u3068\u3067\uff0c\u8907\u6570\u306e\u8cea\u554f\u3092\u4e26\u5217\u7684\u306b\u51e6\u7406\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\uff0e\n\n\n\n\n\n\u30b8\u30e7\u30d6\u304c\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\n\n\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u7d50\u679c (\u8cea\u554f\u3078\u306e\u56de\u7b54) \u306f\uff0c \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 (DynamoDB) \u306b\u66f8\u304d\u8fbc\u307e\u308c\u308b\uff0e\n\n\n\u6700\u5f8c\u306b\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f DynamoDB \u304b\u3089\u8cea\u554f\u3078\u306e\u56de\u7b54\u3092\u8aad\u307f\u53d6\u308b\uff0e\n\n\n\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\nclass EcsClusterQaBot(core.Stack):\n\n    def __init__(self, scope: core.App, name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        (1)\n        # dynamoDB table to store questions and answers\n        table = dynamodb.Table(\n            self, \"EcsClusterQaBot-Table\",\n            partition_key=dynamodb.Attribute(\n                name=\"item_id\", type=dynamodb.AttributeType.STRING\n            ),\n            billing_mode=dynamodb.BillingMode.PAY_PER_REQUEST,\n            removal_policy=core.RemovalPolicy.DESTROY\n        )\n\n        (2)\n        vpc = ec2.Vpc(\n            self, \"EcsClusterQaBot-Vpc\",\n            max_azs=1,\n        )\n\n        (3)\n        cluster = ecs.Cluster(\n            self, \"EcsClusterQaBot-Cluster\",\n            vpc=vpc,\n        )\n\n        (4)\n        taskdef = ecs.FargateTaskDefinition(\n            self, \"EcsClusterQaBot-TaskDef\",\n            cpu=1024, # 1 CPU\n            memory_limit_mib=4096, # 4GB RAM\n        )\n\n        # grant permissions\n        table.grant_read_write_data(taskdef.task_role)\n        taskdef.add_to_task_role_policy(\n            iam.PolicyStatement(\n                effect=iam.Effect.ALLOW,\n                resources=[\"*\"],\n                actions=[\"ssm:GetParameter\"]\n            )\n        )\n\n        (5)\n        container = taskdef.add_container(\n            \"EcsClusterQaBot-Container\",\n            image=ecs.ContainerImage.from_registry(\n                \"tomomano/qabot:latest\"\n            ),\n        )\n\n\n\n\n\n1\n\u3053\u3053\u3067\u306f\uff0c\u56de\u7b54\u306e\u7d50\u679c\u3092\u66f8\u304d\u8fbc\u3080\u305f\u3081\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u7528\u610f\u3057\u3066\u3044\u308b\uff0e\nDynamoDB \u306b\u3064\u3044\u3066\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u7ae0\u3067\u6271\u3046\u306e\u3067\uff0c\u4eca\u306f\u6c17\u306b\u3057\u306a\u304f\u3066\u3088\u3044\uff0e\n\n\n2\n\u3053\u3053\u3067\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3 #1, #2 \u3067\u884c\u3063\u305f\u306e\u3068\u540c\u69d8\u306b\uff0c VPC \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n3\n\u3053\u3053\u3067\uff0c ECS \u306e\u30af\u30e9\u30b9\u30bf\u30fc (cluster) \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u3068\u306f\uff0c\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306e\u30d7\u30fc\u30eb\u306e\u3053\u3068\u3067\u3042\u308a\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u4e2d\u306b\u8907\u6570\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u914d\u7f6e\u3059\u308b\uff0e\n\n\n4\n\u3053\u3053\u3067\uff0c\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b (task definition)\uff0e\n\n\n5\n\u3053\u3053\u3067\uff0c \u30bf\u30b9\u30af\u306e\u5b9f\u884c\u3067\u4f7f\u7528\u3059\u308b Docker \u30a4\u30e1\u30fc\u30b8\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n8.4.1. ECS \u3068 Fargate\nECS \u3068 Fargate \u306e\u90e8\u5206\u306b\u3064\u3044\u3066\uff0c\u30b3\u30fc\u30c9\u3092\u304f\u308f\u3057\u304f\u898b\u3066\u307f\u3088\u3046\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\ncluster = ecs.Cluster(\n    self, \"EcsClusterQaBot-Cluster\",\n    vpc=vpc,\n)\n\ntaskdef = ecs.FargateTaskDefinition(\n    self, \"EcsClusterQaBot-TaskDef\",\n    cpu=1024, # 1 CPU\n    memory_limit_mib=4096, # 4GB RAM\n)\n\ncontainer = taskdef.add_container(\n    \"EcsClusterQaBot-Container\",\n    image=ecs.ContainerImage.from_registry(\n        \"tomomano/qabot:latest\"\n    ),\n)\n\n\ncluster = \u306e\u7b87\u6240\u3067\uff0c\u7a7a\u306e ECS \u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u6b21\u306b\uff0c taskdef=ecs.FargateTaskDefinition \u306e\u7b87\u6240\u3067\uff0c Fargate \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u3063\u305f\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3057\u3066\u304a\u308a\uff0c\u3068\u304f\u306b\u3053\u3053\u3067\u306f 1 CPU, 4GB RAM \u3068\u3044\u3046\u30de\u30b7\u30f3\u30b9\u30da\u30c3\u30af\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u3053\u306e\u3088\u3046\u306b\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u306f\uff0c\u30c7\u30d5\u30a9\u30eb\u30c8\u30671\u30bf\u30b9\u30af\u306b\u3064\u304d1\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u308b\uff0e\n\u6700\u5f8c\u306b\uff0c container = \u306e\u7b87\u6240\u3067\uff0c\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u3067\u4f7f\u7528\u3059\u308b Docker image \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c Docker Hub \u306b\u7f6e\u3044\u3066\u3042\u308b image \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u308b\u3088\u3046\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\u308f\u305a\u304b\u6570\u884c\u306e\u30b3\u30fc\u30c9\u3067\u3042\u308b\u304c\uff0c\u3053\u308c\u3060\u3051\u3067\u524d\u8ff0\u3057\u305f\u3088\u3046\u306a\uff0c\u30bf\u30b9\u30af\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u306a\u3069\u304c\u81ea\u52d5\u3067\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\n\n\n\n\n\n\n\u3053\u306e\u30b3\u30fc\u30c9\u3067 cpu=1024 \u3068\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u306e\u306b\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\uff0e\n\u3053\u308c\u306f CPU \u30e6\u30cb\u30c3\u30c8\u3068\u547c\u3070\u308c\u308b\u6570\u3067\uff0c \u4ee5\u4e0b\u306e\u63db\u7b97\u8868\u306b\u5f93\u3063\u3066\u4eee\u60f3CPU (virtual CPU; vCPU) \u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\n1024 \u304c 1 CPU \u306b\u76f8\u5f53\u3059\u308b\uff0e\n0.25 \u3084 0.5 vCPU \u306a\u3069\u306e\u6570\u5b57\u306f\uff0c\u305d\u308c\u305e\u308c\u5b9f\u52b9\u7684\u306b 1/4, 1/2 \u306e CPU \u6642\u9593\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3059\u308b\uff0e\n\u307e\u305f\uff0c CPU \u30e6\u30cb\u30c3\u30c8\u306b\u3088\u3063\u3066\u4f7f\u7528\u3067\u304d\u308b\u30e1\u30e2\u30ea\u30fc\u91cf\u3082\u5909\u308f\u3063\u3066\u304f\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c 1024 CPU \u30e6\u30cb\u30c3\u30c8\u3092\u9078\u629e\u3057\u305f\u5834\u5408\u306f\uff0c 2 \u304b\u3089 8 GB \u306e\u7bc4\u56f2\u3067\u306e\u307f\u30e1\u30e2\u30ea\u30fc\u91cf\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u6700\u65b0\u306e\u60c5\u5831\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Amazon ECS on AWS Fargate\" \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\nTable 4. CPU\u3000\u30e6\u30cb\u30c3\u30c8\u3068 \u6307\u5b9a\u53ef\u80fd\u306a\u30e1\u30e2\u30ea\u30fc\u91cf\u306e\u63db\u7b97\u8868\n\n\n\n\n\n\nCPU \u30e6\u30cb\u30c3\u30c8\n\u30e1\u30e2\u30ea\u30fc\u306e\u5024\n\n\n256 (.25 vCPU)\n0.5 GB, 1 GB, 2 GB\n\n\n512 (.5 vCPU)\n1 GB, 2 GB, 3 GB, 4 GB\n\n\n1024 (1 vCPU)\n2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB\n\n\n2048 (2 vCPU)\nBetween 4 GB and 16 GB in 1-GB increments\n\n\n4096 (4 vCPU)\nBetween 8 GB and 30 GB in 1-GB increments\n\n\n\n\n\n\n\n\n\n\n8.5. \u30b9\u30bf\u30c3\u30af\u306e\u30c7\u30d7\u30ed\u30a4\n\u30b9\u30bf\u30c3\u30af\u306e\u4e2d\u8eab\u304c\u7406\u89e3\u3067\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u65e9\u901f\u30b9\u30bf\u30c3\u30af\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\nSSH \u306b\u3088\u308b\u30ed\u30b0\u30a4\u30f3\u306e\u5fc5\u8981\u304c\u306a\u3044\u306e\u3067\uff0c\u3080\u3057\u308d\u5358\u7d14\u306a\u304f\u3089\u3044\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u305d\u308c\u305e\u308c\u306e\u610f\u5473\u3092\u5fd8\u308c\u3066\u3057\u307e\u3063\u305f\u5834\u5408\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f31, 2\u306b\u623b\u3063\u3066\u5fa9\u7fd2\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd handson/qa-bot\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy\n\n\u30c7\u30d7\u30ed\u30a4\u306e\u30b3\u30de\u30f3\u30c9\u304c\u7121\u4e8b\u306b\u5b9f\u884c\u3055\u308c\u308c\u3070\uff0c Figure 47 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\n\n\nFigure 47. CDK\u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\uff0c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30b9\u30bf\u30c3\u30af\u306e\u4e2d\u8eab\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\uff0cECS \u306e\u30da\u30fc\u30b8\u306b\u884c\u304f\u3068 Figure 48 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\nEcsClusterQaBot-XXXX \u3068\u3044\u3046\u540d\u524d\u3064\u3044\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u898b\u3064\u3051\u3088\u3046\uff0e\nCluster \u3068\u3044\u3046\u306e\u304c\uff0c\u5148\u307b\u3069\u8aac\u660e\u3057\u305f\u3068\u304a\u308a\uff0c\u8907\u6570\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u675f\u306d\u308b\u4e00\u3064\u306e\u5358\u4f4d\u3067\u3042\u308b\uff0e\nFigure 48 \u3067\uff0c FARGATE \u3068\u3044\u3046\u6587\u5b57\u306e\u4e0b\u306b 0 Running tasks, 0 Pending tasks \u3068\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u3053\u306e\u6642\u70b9\u3067\u306f\u4e00\u3064\u3082\u30bf\u30b9\u30af\u304c\u8d70\u3063\u3066\u3044\u306a\u3044\u306e\u3067\uff0c\u6570\u5b57\u306f\u3059\u3079\u30660\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\n\n\nFigure 48. ECS \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\n\n\u7d9a\u3044\u3066\uff0c\u3053\u306e\u753b\u9762\u306e\u5de6\u306e\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u304b\u3089 Task Definitions \u3068\u3044\u3046\u9805\u76ee\u3092\u898b\u3064\u3051\uff0c\u30af\u30ea\u30c3\u30af\u3057\u3088\u3046\uff0e\n\u79fb\u52d5\u3057\u305f\u5148\u306e\u30da\u30fc\u30b8\u3067 EcsClusterQaBotEcsClusterQaBotTaskDefXXXX \u3068\u3044\u3046\u9805\u76ee\u304c\u898b\u3064\u304b\u308b\u306e\u3067\uff0c\u958b\u304f\uff0e\n\u958b\u3044\u305f\u5148\u306e\u30da\u30fc\u30b8\u3092\u30b9\u30af\u30ed\u30fc\u30eb\u3059\u308b\u3068 Figure 49 \u306b\u793a\u3057\u305f\u3088\u3046\u306a\u60c5\u5831\u304c\u898b\u3064\u304b\u308b\u3060\u308d\u3046\uff0e\n\u4f7f\u7528\u3059\u308b CPU \u30fb\u30e1\u30e2\u30ea\u30fc\u306e\u91cf\u3084\uff0c Docker container \u306e\u5b9f\u884c\u306b\u95a2\u3059\u308b\u8a2d\u5b9a\u306a\u3069\u304c\uff0c\u3053\u306e Task Definition \u306e\u753b\u9762\u304b\u3089\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\nFigure 49. Task definition \u306e\u78ba\u8a8d\n\n\n\n8.6. \u30bf\u30b9\u30af\u306e\u5b9f\u884c\n\u305d\u308c\u3067\u306f\uff0c\u8cea\u554f\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u30af\u30e9\u30a6\u30c9\u306b\u63d0\u51fa\u3057\u3066\u307f\u3088\u3046\uff0e\n\n\u6b21\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3067\uff0cECS\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u65b0\u3057\u3044\u8cea\u554f\u3092\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n$ python run_task.py ask \"A giant peach was flowing in the river. She picked it up and brought it home. Later, a healthy baby was born from the peach. She named the baby Momotaro.\" \"What is the name of the baby?\"\n\n\n\n\n\n\n\n\nrun_task.py \u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3067 AWS \u306e\u8a8d\u8a3c\u60c5\u5831\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u524d\u63d0\u3067\u3042\u308b\uff0e\n\n\n\n\n\"ask\" \u306e\u5f15\u6570\u306b\u7d9a\u304d\uff0c\u6587\u8108 (context) \u3068\u8cea\u554f (question) \u3092\u5f15\u6570\u3068\u3057\u3066\u6e21\u3057\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c \"Waiting for the task to finish\u2026\u200b\" \u3068\u51fa\u529b\u304c\u8868\u793a\u3055\u308c\uff0c\u56de\u7b54\u3092\u5f97\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u5f85\u305f\u3055\u308c\u308b\uff0e\n\u3053\u306e\u9593\uff0c AWS \u3067\u306f ECS \u304c\u30bf\u30b9\u30af\u3092\u53d7\u7406\u3057\uff0c\u65b0\u3057\u3044 Fargate \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\uff0c Docker \u30a4\u30e1\u30fc\u30b8\u3092\u305d\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u914d\u7f6e\u3059\u308b\uff0c\u3068\u3044\u3046\u4e00\u9023\u306e\u51e6\u7406\u304c\u306a\u3055\u308c\u3066\u3044\u308b\uff0e\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\uff0c\u3053\u306e\u4e00\u9023\u306e\u69d8\u5b50\u3092\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3057\u3066\u307f\u3088\u3046\uff0e\n\u5148\u307b\u3069\u306e ECS \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u306b\u3082\u3069\u308a\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u8a73\u7d30\u753b\u9762\u3092\u958b\u304f\uff0e\n\u6b21\u306b\uff0c \"Tasks\" \u3068\u3044\u3046\u540d\u524d\u306e\u30bf\u30d6\u304c\u3042\u308b\u306e\u3067\uff0c\u305d\u308c\u3092\u958b\u304f (Figure 50)\uff0e\n\u3059\u308b\u3068\uff0c\u5b9f\u884c\u4e2d\u306e\u30bf\u30b9\u30af\u306e\u4e00\u89a7\u304c\u8868\u793a\u3055\u308c\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 50. ECS \u306e\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u72b6\u6cc1\u3092\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\n\nFigure 50 \u3067\u898b\u3066\u53d6\u308c\u308b\u3088\u3046\u306b\uff0c \"Last status = Pending\" \u3068\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u304b\u3089\uff0c\u3053\u306e\u6642\u70b9\u3067\u306f\uff0c\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u3092\u3057\u3066\u3044\u308b\u6bb5\u968e\u3067\u3042\u308b\uff0c\u3068\u3044\u3046\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\nFargate \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\uff0c Docker image \u3092\u914d\u7f6e\u3059\u308b\u307e\u3067\u304a\u3088\u305d1-2\u5206\u306e\u6642\u9593\u304c\u304b\u304b\u308b\uff0e\n\u3057\u3070\u3089\u304f\u5f85\u3064\u3046\u3061\u306b\uff0c Status \u304c \"RUNNING\" \u306b\u9077\u79fb\u3057\uff0c\u8a08\u7b97\u304c\u59cb\u307e\u308b\uff0e\n\u8a08\u7b97\u304c\u7d42\u308f\u308b\u3068\uff0c Status \u306f \"STOPPED\" \u306b\u9077\u79fb\u3057\uff0c ECS \u306b\u3088\u3063\u3066 Fargate \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u81ea\u52d5\u7684\u306b\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3055\u308c\u308b\uff0e\nFigure 50 \u306e\u753b\u9762\u304b\u3089\uff0c \"Task\" \u306e\u5217\u306b\u3042\u308b\u30bf\u30b9\u30afID\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\uff0c\u30bf\u30b9\u30af\u306e\u8a73\u7d30\u753b\u9762\u3092\u958b\u3044\u3066\u307f\u3088\u3046 (Figure 51)\uff0e\n\"Last status\", \"Platform version\" \u306a\u3069\uff0c\u30bf\u30b9\u30af\u306e\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c \"Logs\" \u306e\u30bf\u30d6\u3092\u958b\u304f\u3053\u3068\u3067\uff0c\u30b3\u30f3\u30c6\u30ca\u306e\u5410\u304d\u51fa\u3057\u305f\u5b9f\u884c\u30ed\u30b0\u3092\u95b2\u89a7\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\nFigure 51. \u8cea\u554f\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u7d50\u679c\n\n\u3055\u3066\uff0c run_task.py \u3092\u5b9f\u884c\u3057\u305f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306b\u623b\u3063\u3066\u304d\u3066\u307f\u308b\u3068\uff0c Figure 52 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\"Momotaro\" \u3068\u3044\u3046\u6b63\u3057\u3044\u56de\u7b54\u304c\u8fd4\u3063\u3066\u304d\u3066\u3044\u308b\uff01\n\n\n\nFigure 52. \u8cea\u554f\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u7d50\u679c\n\n\n\n8.7. \u30bf\u30b9\u30af\u306e\u540c\u6642\u5b9f\u884c\n\u3055\u3066\uff0c\u5148\u307b\u3069\u306f\u305f\u3063\u305f\u4e00\u3064\u306e\u8cea\u554f\u3092\u6295\u5165\u3057\u305f\u308f\u3051\u3060\u304c\uff0c\u4eca\u56de\u8a2d\u8a08\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\uff0c ECS \u3068 Fargate \u3092\u4f7f\u3046\u3053\u3068\u3067\u540c\u6642\u306b\u305f\u304f\u3055\u3093\u306e\u8cea\u554f\u3092\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u5b9f\u969b\u306b\uff0c\u305f\u304f\u3055\u3093\u306e\u8cea\u554f\u3092\u4e00\u5ea6\u306b\u6295\u5165\u3057\u3066\u307f\u3088\u3046\uff0e\nrun_task.py \u306b ask_many \u3068\u3044\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u308b\u3053\u3068\u3067\uff0c\u8907\u6570\u306e\u8cea\u554f\u3092\u4e00\u5ea6\u306b\u9001\u4fe1\u3067\u304d\u308b\uff0e\n\u8cea\u554f\u306e\u5185\u5bb9\u306f\nhandson/qa-bot/problems.json \u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\uff0e\n\u6b21\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3088\u3046\uff0e\n\n$ python run_task.py ask_many\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u3067\uff0c\u5148\u307b\u3069\u306e ECS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u304d\uff0c\u30bf\u30b9\u30af\u306e\u4e00\u89a7\u3092\u898b\u3066\u307f\u3088\u3046 (Figure 53)\uff0e\n\u8907\u6570\u306e Fargate \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3055\u308c\uff0c\u30bf\u30b9\u30af\u304c\u4e26\u5217\u306b\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u306e\u304c\u308f\u304b\u308b\uff0e\n\n\n\nFigure 53. \u8907\u6570\u306e\u8cea\u554f\u30bf\u30b9\u30af\u3092\u540c\u6642\u306b\u6295\u5165\u3059\u308b\n\n\u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u304c \"STOPPED\" \u306b\u306a\u3063\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u4e0a\u3067\uff0c\u8cea\u554f\u3078\u306e\u56de\u7b54\u3092\u53d6\u5f97\u3057\u3088\u3046\uff0e\n\u305d\u308c\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ python run_task.py list_answers\n\n\u7d50\u679c\u3068\u3057\u3066\uff0c Figure 54 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u3060\u308d\u3046\uff0e\n\u8907\u96d1\u306a\u6587\u7ae0\u554f\u984c\u306b\u5bfe\u3057\uff0c\u9ad8\u3044\u6b63\u7b54\u7387\u3067\u56de\u7b54\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 54. $ python run_task.py list_answers \u306e\u5b9f\u884c\u7d50\u679c\n\n\u304a\u3081\u3067\u3068\u3046\uff01\n\u3053\u3053\u307e\u3067\u3064\u3044\u3066\u3053\u308c\u305f\u8aad\u8005\u306f\u3068\u3066\u3082\u521d\u6b69\u7684\u306a\u304c\u3089\u3082\uff0c\u6df1\u5c64\u5b66\u7fd2\u306b\u3088\u308b\u8a00\u8a9e\u30e2\u30c7\u30eb\u3092\u4f7f\u3063\u3066\u81ea\u52d5\u3067\u8cea\u554f\u3078\u306e\u56de\u7b54\u3092\u751f\u6210\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3092\u5275\u308a\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff01\n\u305d\u308c\u3082\uff0c\u6570\u767e\u306e\u8cea\u554f\u306b\u3082\u540c\u6642\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306a\uff0c\u3068\u3066\u3082\u9ad8\u3044\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u30fc\u3092\u3082\u3063\u305f\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308b\uff01\n\u4eca\u56de\u306f GUI (Graphical User Interface) \u3092\u7528\u610f\u3059\u308b\u3053\u3068\u306f\u3057\u306a\u304b\u3063\u305f\u304c\uff0c\u3053\u306e\u30b7\u30b9\u30c6\u30e0\u306b\u7c21\u5358\u306a GUI \u3092\u8ffd\u52a0\u3059\u308c\u3070\u306a\u304b\u306a\u304b\u7acb\u6d3e\u306a\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u904b\u7528\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\n\n\n\n\n\n\nrun_task.py \u3067\u8cea\u554f\u3092\u6295\u5165\u3057\u7d9a\u3051\u308b\u3068\uff0c\u56de\u7b54\u3092\u8a18\u9332\u3057\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u3069\u3093\u3069\u3093\u30a8\u30f3\u30c8\u30ea\u30fc\u304c\u6e9c\u307e\u3063\u3066\u3044\u304f\uff0e\n\u3053\u308c\u3089\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u3059\u3079\u3066\u6d88\u53bb\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\uff0e\n\n$ python run_task.py clear\n\n\n\n\n\n\n\n8.8. \u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\n\u3053\u308c\u306b\u3066\uff0c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\u7d42\u4e86\u3067\u3042\u308b\uff0e\n\u6700\u5f8c\u306b\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff0c\u524d\u56de\u307e\u3067\u3068\u540c\u69d8\u306b\uff0c AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057 CloudFormation \u306e\u753b\u9762\u304b\u3089 DELETE \u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u304b\uff0c\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u884c\u3046\u5834\u5408\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3059\u308b\uff0e\n\n\n\n\n\n9. Hands-on #4: AWS Batch \u3092\u4f7f\u3063\u3066\u6a5f\u68b0\u5b66\u7fd2\u306e\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u3092\u4e26\u5217\u5316\u3059\u308b\n\n\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u4e09\u56de\u3067\u306f\uff0c ECS \u3068 Fargate \u3092\u4f7f\u3063\u3066\u81ea\u52d5\u8cea\u554f\u56de\u7b54\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3057\u305f\uff0e\n\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u3082\uff0c\u8907\u6570\u306e\u8cea\u554f\u304c\u9001\u3089\u308c\u305f\u5834\u5408\u306b\u306f\u4e26\u5217\u306b\u30b8\u30e7\u30d6\u304c\u5b9f\u884c\u3055\u308c\uff0c\u30e6\u30fc\u30b6\u30fc\u306b\u7b54\u3048\u304c\u8fd4\u3055\u308c\u308b\u30b7\u30b9\u30c6\u30e0\u3092\u4f5c\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u3059\u3067\u306b\u5b66\u7fd2\u6e08\u307f\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3092\u7528\u3044\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3057\u305f\uff0e\n\u3057\u304b\u3057\uff0c\u4e00\u822c\u7684\u306b\u8a00\u3063\u3066\uff0c\u6a5f\u68b0\u5b66\u7fd2\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u306f\u81ea\u5206\u3067\u4f5c\u3063\u305f\u30e2\u30c7\u30eb\u3092\u8a13\u7df4\u3059\u308b\u3053\u3068\u304c\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u3042\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u305d\u3053\u3067\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u7b2c\u56db\u56de\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u7528\u3044\u3066\u6a5f\u68b0\u5b66\u7fd2\u306e\u8a13\u7df4\u3092\u4e26\u5217\u5316\u30fb\u9ad8\u901f\u5316\u3059\u308b\u3053\u3068\u3092\u8003\u3048\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\u6df1\u5c64\u5b66\u7fd2\u306b\u304a\u3051\u308b\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u6700\u9069\u5316\u3092\u53d6\u308a\u4e0a\u3052\u308b\uff0e\n\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u306f\uff0c\u52fe\u914d\u964d\u4e0b\u6cd5\u306b\u3088\u3063\u3066\u6700\u9069\u5316\u3055\u308c\u308b\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5916\u306b\u3042\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u3053\u3068\u3067\u3042\u308a\uff0c\u5177\u4f53\u7684\u306b\u306f\u30e2\u30c7\u30eb\u306e\u5c64\u306e\u5e45\u30fb\u6df1\u3055\u306a\u3069\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u95a2\u308f\u308b\u3082\u306e\uff0c\u5b66\u7fd2\u7387\u3084\u30e2\u30e1\u30f3\u30bf\u30e0\u306a\u3069\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u66f4\u65b0\u5247\u306b\u95a2\u308f\u308b\u3082\u306e\u306a\u3069\u304c\u542b\u307e\u308b\uff0e\n\u6df1\u5c64\u5b66\u7fd2\u306b\u304a\u3044\u3066\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8abf\u6574\u306f\u3068\u3066\u3082\u91cd\u8981\u306a\u30bf\u30b9\u30af\u3067\u3042\u308b\uff0e\n\u3057\u304b\u3057\u306a\u304c\u3089\uff0c\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8abf\u6574\u3059\u308b\u306b\u306f\uff0c\u5c11\u3057\u305a\u3064\u6761\u4ef6\u3092\u5909\u3048\u306a\u304c\u3089\u4f55\u5ea6\u3082\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u3092\u5b66\u7fd2\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\uff0c\u591a\u304f\u306e\u8a08\u7b97\u6642\u9593\u304c\u304b\u304b\u308b\uff0e\n\u7814\u7a76\u30fb\u958b\u767a\u306b\u304a\u3044\u3066\u306f\uff0c\u30b9\u30eb\u30fc\u30d7\u30c3\u30c8\u3088\u304f\u305f\u304f\u3055\u3093\u306e\u30e2\u30c7\u30eb\u306e\u53ef\u80fd\u6027\u3092\u63a2\u7d22\u3059\u308b\u3053\u3068\u304c\u751f\u7523\u6027\u3092\u6c7a\u3081\u308b\u91cd\u8981\u306a\u30d5\u30a1\u30af\u30bf\u30fc\u3067\u3042\u308a\uff0c\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u63a2\u7d22\u3092\u9ad8\u901f\u306b\u89e3\u304f\u3068\u3044\u3046\u554f\u984c\u306f\u6975\u3081\u3066\u95a2\u5fc3\u304c\u9ad8\u3044\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u5f37\u529b\u306a\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u3092\u5229\u7528\u3057\u3066\u4e26\u5217\u7684\u306b\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u8a13\u7df4\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c\u3053\u306e\u554f\u984c\u3092\u89e3\u304f\u65b9\u6cd5\u3092\u5b66\u3093\u3067\u3044\u3053\u3046\uff0e\n\n9.1. Auto scaling groups (ASG)\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u5165\u3063\u3066\u3044\u304f\u524d\u306b\uff0c Auto scaling groups (ASG) \u3068\u3088\u3070\u308c\u308b EC2 \u306e\u6982\u5ff5\u3092\u77e5\u3063\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308b\uff0e\nECS \u306e\u6982\u8981\u3092\u793a\u3057\u305f Figure 43 \u3092\u632f\u308a\u8fd4\u3063\u3066\u898b\u3066\u307b\u3057\u3044\uff0e\n\u524d\u7ae0 (Section 8) \u3067\u3082\u8aac\u660e\u3057\u305f\u304c\uff0c ECS \u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3067\u8a08\u7b97\u3092\u62c5\u3046\u5b9f\u4f53\u3068\u3057\u3066\u306f EC2 \u3068 Fargate \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nFargate \u306b\u3064\u3044\u3066\u306f\u524d\u7ae0\u3067\u8a18\u8ff0\u3057\u305f\uff0e\nFargate \u3092\u7528\u3044\u308b\u3068\uff0c\u81ea\u5728\u306b\u30b9\u30b1\u30fc\u30eb\u3059\u308b\u8a08\u7b97\u74b0\u5883\u3092\u3068\u3066\u3082\u7c21\u5358\u306a\u8a2d\u5b9a\u3067\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff0e\n\u3057\u304b\u3057\uff0c GPU \u3092\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u306a\u3069\uff0c\u3044\u304f\u3064\u304b\u306e\u5236\u7d04\u304c\u3042\u3063\u305f\uff0e\nEC2 \u3092\u4f7f\u7528\u3057\u305f\u8a08\u7b97\u74b0\u5883\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\uff0c\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u8907\u96d1\u5ea6\u306f\u5897\u3059\u304c\uff0c GPU \u3084\u305d\u306e\u4ed6\u306e\u3088\u308a\u9ad8\u5ea6\u304b\u3064\u8907\u96d1\u306a\u8a2d\u5b9a\u3092\u4f34\u3063\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nEC2 \u30af\u30e9\u30b9\u30bf\u30fc\u306b\u306f ASG \u3068\u547c\u3070\u308c\u308b\u30b5\u30fc\u30d3\u30b9\u304c\u914d\u7f6e\u3055\u308c\u308b\uff0e\nASG \u306f\u8907\u6570\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30ed\u30b8\u30ab\u30eb\u306a\u5358\u4f4d\u3067\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u3053\u3068\u3067\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u69cb\u6210\u3059\u308b\uff0e\nASG \u306f\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306b\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3059\u308b\uff0c\u3042\u308b\u3044\u306f\u4e0d\u8981\u306b\u306a\u3063\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u505c\u6b62\u3059\u308b\u306a\u3069\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u62c5\u3046\uff0e\nASG \u3067\u91cd\u8981\u306a\u6982\u5ff5\u3068\u3057\u3066\uff0c desired capacity, minimum capacity, maximum capacity \u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u3042\u308b\uff0e\nminimum capacity\uff0c maximum capacity \u306f\uff0c\u305d\u308c\u305e\u308c\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306b\u914d\u7f6e\u3067\u304d\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570\u306e\u6700\u5c0f\u5024\u30fb\u6700\u5927\u5024\u3092\u6307\u5b9a\u3059\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u3042\u308b\uff0e\n\u524d\u8005\u306f\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u8ca0\u8377\u304c\u304b\u304b\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u3067\u3082\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u72b6\u614b\u306b\u3042\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u3067\uff0c\u6025\u306b\u8ca0\u8377\u304c\u5897\u5927\u3057\u305f\u6642\u306a\u3069\u306e\u30d0\u30c3\u30d5\u30a1\u30fc\u3068\u3057\u3066\u4f5c\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u5f8c\u8005\u306f\uff0c\u8ca0\u8377\u304c\u6025\u306b\u5897\u3048\u305f\u3068\u304d\u306b\uff0c\u904e\u5270\u306a\u6570\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3059\u308b\u4e8b\u614b\u3092\u9632\u304e\uff0c\u7d4c\u6e08\u7684\u306a\u30b3\u30b9\u30c8\u306e\u4e0a\u9650\u3092\u5b9a\u3081\u308b\u5f79\u5272\u3092\u679c\u305f\u3059\uff0e\ndesired capacity \u304c\uff0c\u305d\u306e\u6642\u3005\u3067\u30b7\u30b9\u30c6\u30e0\u304c\u8981\u6c42\u3059\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570\u3092\u6307\u5b9a\u3059\u308b\uff0e\ndesired capacity \u306f\uff0c\u4f8b\u3048\u307024\u6642\u9593\u306e\u30ea\u30ba\u30e0\u306b\u5408\u308f\u305b\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570\u3092\u5897\u6e1b\u3055\u305b\u308b (\u663c\u306f\u591a\u304f\u591c\u306f\u5c11\u306a\u304f\u306a\u3069) \u306a\u3069\u306e\u6c7a\u307e\u3063\u305f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306b\u57fa\u3065\u3044\u305f\u8a2d\u5b9a\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3042\u308b\u3044\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u5168\u4f53\u306b\u304b\u304b\u3063\u3066\u3044\u308b\u8ca0\u8377\u306b\u5fdc\u3058\u3066\uff0c desired capacity \u3092\u52d5\u7684\u306b\u5236\u5fa1\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3069\u306e\u3088\u3046\u306a\u57fa\u6e96\u3067\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u884c\u3046\u304b\u3092\u5b9a\u3081\u308b\u30eb\u30fc\u30eb\u306e\u3053\u3068\u3092\uff0c\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc\u3068\u3088\u3076\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u5168\u4f53\u306e\u7a3c\u50cd\u7387 (\u8ca0\u8377) \u3092\u5e38\u306b 80% \u306b\u7dad\u6301\u3059\u308b\uff0c\u306a\u3069\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc\u304c\u60f3\u5b9a\u3067\u304d\u308b\uff0e\n\u3053\u306e\u5834\u5408\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u5168\u4f53\u306e\u8ca0\u8377\u304c80%\u3092\u4e0b\u56de\u3063\u305f\u3068\u304d\u306b\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u524a\u9664\u3055\u308c\uff0c80%\u3092\u8d85\u3048\u308b (\u3042\u308b\u3044\u306f\u8d85\u3048\u308b\u3068\u4e88\u6e2c\u3055\u308c\u308b) \u5834\u5408\u306f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8ffd\u52a0\u3059\u308b\uff0c\u3068\u3044\u3046\u64cd\u4f5c\u304c ASG \u306b\u3088\u3063\u3066\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u308b\uff0e\n\u4e0a\u8a18\u306e\u3088\u3046\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u691c\u8a0e\u3057\uff0c\u30e6\u30fc\u30b6\u30fc\u306f ASG \u3092\u4f5c\u6210\u3059\u308b\uff0e\nASG \u3092\u4f5c\u6210\u3057\u305f\u306e\u3061\uff0c ECS \u3068\u306e\u9023\u643a\u3092\u30d7\u30ed\u30b0\u30e9\u30e0\u3057\u3066\u3042\u3052\u308b\u3053\u3068\u3067\uff0c ECS \u3092\u4ecb\u3057\u3066 ASG \u306b\u3088\u308b EC2 \u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30bf\u30b9\u30af\u3092\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b\uff0e\n\n\n9.2. AWS Batch\n\n\n\nFigure 55. AWS Batch \u306e\u30a2\u30a4\u30b3\u30f3\n\n\u5148\u306b\u8aac\u660e\u3057\u305f\u3088\u3046\u306b\uff0c ECS \u3068 ASG \u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\uff0c\u6240\u671b\u306e\u8a08\u7b97\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3057\u304b\u3057\u306a\u304c\u3089\uff0c ECS \u3068 ASG \u306b\u306f\u304b\u306a\u308a\u8fbc\u307f\u5165\u3063\u305f\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3042\u308a\uff0c\u521d\u5fc3\u8005\u306b\u3068\u3063\u3066\u3082\u7d4c\u9a13\u8005\u306b\u3068\u3063\u3066\u3082\u306a\u304b\u306a\u304b\u9762\u5012\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u8981\u6c42\u3055\u308c\u308b\uff0e\n\u305d\u3053\u3067\uff0c ECS \u3068 ASG \u306b\u3088\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u8a2d\u8a08\u3092\u81ea\u52d5\u5316\u3057\u3066\u304f\u308c\u308b\u30b5\u30fc\u30d3\u30b9\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\uff0e\n\u305d\u308c\u304c AWS Batch \u3067\u3042\u308b\uff0e\nAWS Batch \u306f\u305d\u306e\u540d\u306e\u3068\u304a\u308a\u30d0\u30c3\u30c1 (Batch) \u5316\u3055\u308c\u305f\u30b8\u30e7\u30d6 (\u5165\u529b\u30c7\u30fc\u30bf\u3060\u3051\u304c\u7570\u306a\u308b\u72ec\u7acb\u3057\u305f\u6f14\u7b97\u304c\u7e70\u308a\u8fd4\u3057\u5b9f\u884c\u3055\u308c\u308b\u3053\u3068) \u3092\u60f3\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u591a\u304f\u306e\u79d1\u5b66\u8a08\u7b97\u3084\u6a5f\u68b0\u5b66\u7fd2\u304c\u30d0\u30c3\u30c1\u8a08\u7b97\u306b\u5f53\u3066\u306f\u307e\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u521d\u671f\u5024\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5909\u3048\u3066\u8907\u6570\u306e\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u8d70\u3089\u305b\u308b\uff0c\u3068\u3044\u3063\u305f\u30b1\u30fc\u30b9\u3060\uff0e\nAWS Batch \u3092\u7528\u3044\u308b\u3053\u3068\u306e\u5229\u70b9\u306f\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3084\u30b8\u30e7\u30d6\u306e\u5272\u308a\u632f\u308a\u306f\u3059\u3079\u3066\u81ea\u52d5\u3067\u5b9f\u884c\u3055\u308c\uff0c\n\u30e6\u30fc\u30b6\u30fc\u306f\u30af\u30e9\u30a6\u30c9\u306e\u821e\u53f0\u88cf\u306e\u8a73\u7d30\u3092\u6c17\u306b\u3059\u308b\u3053\u3068\u306a\u304f\uff0c\u5927\u91cf\u306e\u30b8\u30e7\u30d6\u3092\u6295\u5165\u3067\u304d\u308b\u30b7\u30b9\u30c6\u30e0\u304c\u624b\u306b\u5165\u308b\u70b9\u3067\u3042\u308b\uff0e\n\u304c\uff0c\u77e5\u8b58\u3068\u3057\u3066\u80cc\u5f8c\u3067\u306f ECS/ASG/EC2 \u306e\u4e09\u3064\u5df4\u304c\u5354\u8abf\u3057\u3066\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3068\u3044\u3046\u70b9\u306f\u77e5\u3063\u3066\u304a\u3044\u3066\u307b\u3057\u3044\uff0e\nAWS Batch \u3067\u306f\uff0c\u30b8\u30e7\u30d6\u306e\u6295\u5165\u30fb\u7ba1\u7406\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u884c\u3046\u305f\u3081\uff0c\u6b21\u306e\u3088\u3046\u306a\u6982\u5ff5\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b (Figure 56)\uff0e\n\u307e\u305a\uff0c \u30b8\u30e7\u30d6 (Job) \u3068\u3044\u3046\u306e\u304c\uff0cAWS Batch \u306b\u3088\u3063\u3066\u5b9f\u884c\u3055\u308c\u308b\u4e00\u3064\u306e\u8a08\u7b97\u306e\u5358\u4f4d\u3067\u3042\u308b\uff0e\nJob definitions \u3068\u306f\u30b8\u30e7\u30d6\u306e\u5185\u5bb9\u3092\u5b9a\u7fa9\u3059\u308b\u3082\u306e\u3067\u3042\u308a\uff0c\u3053\u308c\u306b\u306f\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d Docker \u306e\u30a4\u30e1\u30fc\u30b8\u306e\u30a2\u30c9\u30ec\u30b9\u3084\uff0c\u5272\u308a\u5f53\u3066\u308b CPU\u30fbRAM \u306e\u5bb9\u91cf\uff0c\u74b0\u5883\u5909\u6570\u306a\u3069\u306e\u8a2d\u5b9a\u304c\u542b\u307e\u308c\u308b\uff0e\nJob definition \u306b\u57fa\u3065\u3044\u3066\u500b\u3005\u306e\u30b8\u30e7\u30d6\u304c\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u30b8\u30e7\u30d6\u304c\u5b9f\u884c\u3055\u308c\u308b\u3068\uff0c\u30b8\u30e7\u30d6\u306f Job queues \u306b\u5165\u308b\uff0e\nJob queues \u3068\u306f\uff0c\u5b9f\u884c\u5f85\u3061\u72b6\u614b\u306b\u3042\u308b\u30b8\u30e7\u30d6\u306e\u5217\u306e\u3053\u3068\u3067\u3042\u308a\uff0c\u6642\u9593\u7684\u306b\u6700\u3082\u5148\u982d\u306b\u6295\u5165\u3055\u308c\u305f\u30b8\u30e7\u30d6\u304c\u6700\u521d\u306b\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u307e\u305f\uff0c\u8907\u6570\u306e queue \u3092\u914d\u7f6e\u3057\uff0c queue \u3054\u3068\u306b priority (\u512a\u5148\u5ea6) \u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308a\uff0c priority \u306e\u9ad8\u3044 queue \u306b\u6e9c\u307e\u3063\u305f\u30b8\u30e7\u30d6\u304c\u512a\u5148\u7684\u306b\u5b9f\u884c\u3055\u308c\u308b\n(\u7b46\u8005\u306f\u3053\u308c\u3092\u30c7\u30a3\u30ba\u30cb\u30fc\u30e9\u30f3\u30c9\u306e\"\u30d5\u30a1\u30b9\u30c8\u30d1\u30b9\"\u3092\u9023\u60f3\u3057\u3066\u6349\u3048\u3066\u3044\u308b)\uff0e\nCompute environment \u3068\u306f\uff0c\u5148\u8ff0\u3057\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u3068\u307b\u307c\u540c\u7fa9\u306e\u6982\u5ff5\u3067\u3042\u308a\uff0c\u8a08\u7b97\u304c\u5b9f\u884c\u3055\u308c\u308b\u5834\u6240 (EC2 \u3084 Fargate \u304b\u3089\u306a\u308b\u30af\u30e9\u30b9\u30bf\u30fc) \u3092\u6307\u3059\uff0e\nCompute environment \u306b\u306f\uff0c\u4f7f\u7528\u3059\u308b EC2 \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3084\u540c\u6642\u306b\u8d77\u52d5\u3059\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u6570\u306e\u4e0a\u9650\u306a\u3069\u306e\u7c21\u6613\u306a\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\nJob queues \u306f Compute environment \u306e\u7a7a\u304d\u72b6\u6cc1\u3092\u76e3\u8996\u3057\u3066\u304a\u308a\uff0c \u305d\u308c\u306b\u5fdc\u3058\u3066\u30b8\u30e7\u30d6\u3092 Compute environment \u306b\u6295\u4e0b\u3059\u308b\uff0e\n\u4ee5\u4e0a\u304c AWS Batch \u3092\u4f7f\u7528\u3059\u308b\u3046\u3048\u3067\u7406\u89e3\u3057\u3066\u304a\u304b\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u6982\u5ff5\u3067\u3042\u308b\u304c\uff0c\u304f\u3069\u304f\u3069\u8a00\u8449\u3067\u8aac\u660e\u3057\u3066\u3082\u306a\u304b\u306a\u304b\u30d4\u30f3\u3068\u3053\u306a\u3044\u3060\u308d\u3046\uff0e\n\u3053\u3053\u304b\u3089\u306f\uff0c\u5b9f\u969b\u306b\u81ea\u5206\u3067\u624b\u3092\u52d5\u304b\u3057\u306a\u304c\u3089\u5b66\u3093\u3067\u3044\u3053\u3046\uff0e\n\n\n\nFigure 56. AWS Batch \u306e\u4e3b\u8981\u306a\u6982\u5ff5\n\n\n\n\n\n\n\n\nEC2 or Fargate?\nECS \u3067\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u69cb\u6210\u3059\u308b\u969b\uff0c\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\u5834\u3068\u3057\u3066 EC2 \u3068 Fargate \u306e\u4e8c\u3064\u306e\u9078\u629e\u80a2\u304c\u3042\u308b\u3053\u3068\u3092\u8aac\u660e\u3057\u305f\uff0e\n\u305d\u308c\u305e\u308c\u9577\u6240\u3068\u77ed\u6240\u3092\u62b1\u3048\u3066\u3044\u308b\u306e\u3060\u304c\uff0c\u3069\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u3069\u3061\u3089\u3092\u4f7f\u3046\u3079\u304d\u3060\u308d\u3046\u304b\uff1f\n\u305d\u308c\u3092\u691c\u8a0e\u3059\u308b\u305f\u3081\uff0c\u307e\u305a\u306f Table 5 \u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\u3053\u308c\u306fEC2 \u3068 Fargate \u306e\u7279\u5fb4\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3042\u308b\uff0e\n\u8aac\u660e\u306e\u90fd\u5408\u4e0a\uff0c\u5927\u5e45\u306a\u7c97\u8996\u5316\u304c\u884c\u308f\u308c\u3066\u3044\u308b\u70b9\u306f\u7559\u610f\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\nTable 5. EC2 vs Fargate\n\n\n\n\n\n\n\n\nEC2\nFargate\n\n\n\n\nCompute capacity\nMedium to large\nSmall to medium\n\n\nGPU\nYes\nNo\n\n\nLaunch speed\nSlow\nFast\n\n\nTask placement flexibility\nLow\nHigh\n\n\nProgramming complexity\nHigh\nLow\n\n\n\n\u3053\u308c\u307e\u3067\u306b\u898b\u3066\u304d\u305f\u3088\u3046\u306b\uff0c EC2 \u306f\u6700\u5927\u306e CPU \u6570\u30fb\u30e1\u30e2\u30ea\u30fc\u30b5\u30a4\u30ba\u304c\u5927\u304d\u304b\u3063\u305f\u308a\uff0c GPU \u3092\u5229\u7528\u3067\u304d\u305f\u308a\u3059\u308b\u306a\u3069\uff0c\u5358\u4e00\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u306e\u8a08\u7b97\u80fd\u529b\u306f\u9ad8\u3044\uff0e\n\u5bfe\u3057\u3066\uff0c Fargate \u306f\u5358\u4e00\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6700\u5927 CPU \u6570\u306f4\u30b3\u30a2\u304c\u4e0a\u9650\u3067\u3042\u308b\uff0e\n\u305d\u306e\u4e00\u65b9\u3067\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u306b\u8981\u3059\u308b\u6642\u9593\u306f Fargate \u306e\u307b\u3046\u304c\u5727\u5012\u7684\u306b\u65e9\u304f\uff0c\u3088\u308a\u4fca\u654f\u306b\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u307e\u305f\uff0c\u30bf\u30b9\u30af\u3092\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u6295\u5165\u3059\u308b\u969b\u306e\u30d5\u30ec\u30ad\u30b7\u30d3\u30ea\u30c6\u30a3\u3082 Fargate \u306e\u307b\u3046\u304c\u9ad8\u3044\uff0e\n\u30d5\u30ec\u30ad\u30b7\u30d3\u30ea\u30c6\u30a3\u3068\u3044\u3046\u306e\u306f\uff0c\u4f8b\u3048\u3070\u4e00\u3064\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30672\u3064\u4ee5\u4e0a\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u8d70\u3089\u305b\u308b\uff0c\u306a\u3069\u306e\u72b6\u6cc1\u3067\u3042\u308b\uff0e\n\u5358\u4f4d CPU \u3042\u305f\u308a\u3067\u51e6\u7406\u3055\u308c\u308b\u30bf\u30b9\u30af\u306e\u6570\u3092\u6700\u5927\u5316\u3059\u308b\u969b\u306b\u306f\uff0c\u3053\u306e\u3088\u3046\u306a\u8a2d\u8a08\u304c\u3057\u3070\u3057\u3070\u63a1\u7528\u3055\u308c\u308b\uff0e\n\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u8907\u96d1\u3055\u3068\u3044\u3046\u89b3\u70b9\u304b\u3089\u306f\uff0c Fargate \u306e\u307b\u3046\u304c\u4e00\u822c\u7684\u306b\u30b7\u30f3\u30d7\u30eb\u306a\u5b9f\u88c5\u306b\u306a\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c EC2 \u3068 Fargate \u306f\u4e92\u3044\u306b\u76f8\u88dc\u7684\u306a\u7279\u6027\u3092\u6709\u3057\u3066\u304a\u308a\uff0c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u3088\u3063\u3066\u6700\u9069\u306a\u8a08\u7b97\u74b0\u5883\u306f\u691c\u8a0e\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u307e\u305f\uff0cEC2 \u3068 Fargate \u3092\u4e21\u65b9\u7528\u3044\u305f\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u30af\u30e9\u30b9\u30bf\u30fc\u3068\u3044\u3046\u306e\u3082\u5b9a\u7fa9\u53ef\u80fd\u3067\u3042\u308a\uff0c\u305d\u306e\u3088\u3046\u306a\u9078\u629e\u80a2\u3082\u3057\u3070\u3057\u3070\u7528\u3044\u3089\u308c\u308b\uff0e\n\n\n\n\n\n\n9.3. \u6e96\u5099\n\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u5b9f\u884c\u306b\u306f\uff0c\u7b2c\u4e00\u56de\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u8aac\u660e\u3057\u305f\u6e96\u5099 (Section 4.1) \u304c\u6574\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3059\u308b\uff0e\n\u307e\u305f\uff0c Docker \u304c\u81ea\u8eab\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\u3053\u3068\u3082\u5fc5\u8981\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\uff0c g4dn.xlarge \u30bf\u30a4\u30d7\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u3046\u306e\u3067\uff0c\u30a2\u30e1\u30ea\u30ab\u6771\u90e8 (us-east-1) \u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306f 0.526 $/hour \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\u6771\u4eac (ap-northeast-1) \u3092\u9078\u629e\u3057\u305f\u5834\u5408\u306f 0.71 $/hour \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\nSection 6.1 \u3067\u3082\u6ce8\u610f\u3057\u305f\u304c\uff0c\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u59cb\u3081\u308b\u524d\u306b G \u30bf\u30a4\u30d7\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u4e0a\u9650\u3092 AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306e EC2 \u7ba1\u7406\u753b\u9762\u304b\u3089\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u3082\u3057\u4e0a\u9650\u304c0\u306b\u306a\u3063\u3066\u3044\u305f\u5834\u5408\u306f\uff0c\u4e0a\u9650\u7de9\u548c\u306e\u7533\u8acb\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308b\uff0e\nSection 9.5 \u306b\u3082\u95a2\u9023\u3057\u305f\u60c5\u5831\u3092\u8a18\u8f09\u3057\u3066\u3044\u308b\u306e\u3067\uff0c\u4f75\u305b\u3066\u53c2\u7167\u3055\u308c\u305f\u3044\uff0e\n\n\n\n\n\n\n9.4. MNIST \u624b\u66f8\u304d\u6587\u5b57\u8a8d\u8b58 (\u518d\u8a2a)\n\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u6a5f\u68b0\u5b66\u7fd2\u306e\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u8abf\u6574\u3092\u53d6\u308a\u4e0a\u3052\u308b\u3068\u5192\u982d\u3067\u8ff0\u3079\u305f\uff0e\n\u305d\u306e\u6700\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u4f8b\u984c\u3068\u3057\u3066\uff0c Section 6.7 \u3067\u6271\u3063\u305f MNIST \u624b\u66f8\u304d\u6587\u5b57\u8a8d\u8b58\u306e\u554f\u984c\u3092\u518d\u5ea6\u53d6\u308a\u4e0a\u3052\u3088\u3046\uff0e\nSection 6.7 \u3067\u306f\uff0c\u9069\u5f53\u306b\u30c1\u30e7\u30a4\u30b9\u3057\u305f\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u7528\u3044\u3066\u30e2\u30c7\u30eb\u306e\u8a13\u7df4\u3092\u884c\u3063\u305f\uff0e\n\u3053\u3053\u3067\u4f7f\u7528\u3057\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u306f\uff0c\u78ba\u7387\u7684\u52fe\u914d\u964d\u4e0b\u6cd5 (SGD) \u306b\u304a\u3051\u308b\u5b66\u7fd2\u7387\u3084\u30e2\u30e1\u30f3\u30bf\u30e0\u304c\u542b\u307e\u308c\u308b\uff0e\n\u30b3\u30fc\u30c9\u3067\u3044\u3046\u3068\uff0c\u6b21\u306e\u884c\u304c\u8a72\u5f53\u3059\u308b\uff0e\n\noptimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n\n\u3053\u3053\u3067\u4f7f\u7528\u3055\u308c\u305f \u5b66\u7fd2\u7387 (lr=0.01) \u3084\u30e2\u30e1\u30f3\u30bf\u30e0 (momentum=0.5) \u306f\u6063\u610f\u7684\u306b\u9078\u629e\u3055\u308c\u305f\u5024\u3067\u3042\u308a\uff0c\u3053\u308c\u304c\u30d9\u30b9\u30c8\u306a\u6570\u5024\u3067\u3042\u308b\u306e\u304b\u306f\u308f\u304b\u3089\u306a\u3044\uff0e\n\u305f\u307e\u305f\u307e\u3053\u306e\u30c1\u30e7\u30a4\u30b9\u304c\u6700\u9069\u3067\u3042\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u3057\uff0c\u3082\u3063\u3068\u9ad8\u3044\u7cbe\u5ea6\u3092\u51fa\u3059\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u7d44\u304c\u5b58\u5728\u3059\u308b\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\n\u3053\u306e\u554f\u984c\u306b\u7b54\u3048\u308b\u305f\u3081\uff0c\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u3092\u884c\u304a\u3046\uff0e\n\u4eca\u56de\u306f\uff0c\u6700\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3068\u3057\u3066\uff0c\u30b0\u30ea\u30c3\u30c9\u30b5\u30fc\u30c1\u306b\u3088\u308b\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u3092\u884c\u304a\u3046\uff0e\n\n\u307e\u305a\u306f\uff0c\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u7528\u3059\u308b Docker \u30a4\u30e1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\nDocker \u30a4\u30e1\u30fc\u30b8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\nhandson/aws-batch/docker\n\u306b\u3042\u308b\uff0e\n\u57fa\u672c\u7684\u306b Section 6.7 \u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5143\u306b\u3057\uff0c\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u5c02\u7528\u306e\u8efd\u5fae\u306a\u5909\u66f4\u304c\u65bd\u3057\u3066\u3042\u308b\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3082\u542b\u3081\u3066\u8aad\u3093\u3067\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u7df4\u7fd2\u3068\u3057\u3066\uff0c\u3053\u306e Docker \u30a4\u30e1\u30fc\u30b8\u3092\u624b\u5143\u3067\u30d3\u30eb\u30c9\u3059\u308b\u3068\u3053\u308d\u304b\u3089\u306f\u3058\u3081\u3066\u307f\u3088\u3046\uff0e\nDockerfile \u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\uff0c mymnist \u3068\u3044\u3046\u540d\u524d (Tag) \u3092\u3064\u3051\u3066\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ cd handson/aws-batch/docker\n$ docker build -t mymnist .\n\n\n\n\n\n\n\n\ndocker build \u3067\u30a8\u30e9\u30fc\u304c\u51fa\u305f\u3068\u304d\u306f\u6b21\u306e\u53ef\u80fd\u6027\u3092\u7591\u3063\u3066\u307b\u3057\u3044\uff0e\n\u30d3\u30eb\u30c9\u306e\u4e2d\u3067\uff0c MNIST \u306e\u753b\u50cf\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092 http://yann.lecun.com/exdb/mnist/ \u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306e\u3060\u304c\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5148\u306e\u30b5\u30fc\u30d0\u30fc\u304c\u3057\u3070\u3057\u3070\u30c0\u30a6\u30f3\u3057\u3066\u3044\u308b\uff0e\n\u4e16\u754c\u4e2d\u306e\u6a5f\u68b0\u5b66\u7fd2\u30e6\u30fc\u30b6\u30fc\u304c\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306e\u3067\uff0c\u3053\u308c\u306f\u3057\u3070\u3057\u3070\u767a\u751f\u3059\u308b\u3088\u3046\u3067\u3042\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u308b\u3068\u30d3\u30eb\u30c9\u3082\u5931\u6557\u3057\u3066\u3057\u307e\u3046\uff0e\n\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u305d\u308c\u3089\u3057\u3044\u6587\u8a00\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u3089\uff0c\u3053\u306e\u53ef\u80fd\u6027\u3092\u7591\u304a\u3046\uff0e\n\n\n\n\n\n\n\n\n\n\n\n\u624b\u5143\u3067\u30d3\u30eb\u30c9\u3059\u308b\u304b\u308f\u308a\u306b\uff0c Docker Hub \u304b\u3089 pull \u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u305d\u306e\u5834\u5408\u306f\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ docker pull tomomano/mymnist:latest\n\n\n\n\n\n\u30a4\u30e1\u30fc\u30b8\u306e\u6e96\u5099\u304c\u3067\u304d\u305f\u3089\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3057\uff0c MNIST \u306e\u5b66\u7fd2\u3092\u5b9f\u884c\u3059\u308b\uff0e\uff0e\n\n$ docker run mymnist --lr 0.1 --momentum 0.5 --epochs 10\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c\u6307\u5b9a\u3057\u305f\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf (--lr \u3067\u4e0e\u3048\u3089\u308c\u308b\u5b66\u7fd2\u7387\u3068 --momentum \u3067\u4e0e\u3048\u3089\u308c\u308b\u30e2\u30e1\u30f3\u30bf\u30e0) \u3092\u4f7f\u3063\u3066\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u6700\u9069\u5316\u304c\u59cb\u307e\u308b\uff0e\n\u5b66\u7fd2\u3092\u884c\u3046\u6700\u5927\u306e\u30a8\u30dd\u30c3\u30af\u6570\u306f --epochs \u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u6307\u5b9a\u3059\u308b\uff0e\nSection 6 \u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u898b\u305f\u3088\u3046\u306a\uff0c Loss \u306e\u4f4e\u4e0b\u304c\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u4e0a\u306b\u51fa\u529b\u3055\u308c\u308b\u3060\u308d\u3046 (Figure 57)\uff0e\n\n\n\nFigure 57. Docker \u3092\u5b9f\u884c\u3057\u305f\u969b\u306e\u51fa\u529b\n\n\u4e0a\u306b\u793a\u3057\u305f\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\u3068\uff0c\u8a08\u7b97\u306f CPU \u3092\u4f7f\u3063\u3066\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u3082\u3057\uff0c\u30ed\u30fc\u30ab\u30eb\u306e\u8a08\u7b97\u6a5f\u306b GPU \u304c\u5099\u308f\u3063\u3066\u304a\u308a\uff0c nvidia-docker \u306e\u8a2d\u5b9a\u304c\u6e08\u3093\u3067\u3044\u308b\u306a\u3089\u3070\uff0c\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a GPU \u3092\u4f7f\u3063\u3066\u8a08\u7b97\u3092\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\n$ docker run --gpus all mymnist --lr 0.1 --momentum 0.5 --epochs 10\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067\u306f\uff0c--gpus all \u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u52a0\u308f\u3063\u305f\uff0e\nCPU/GPU \u3069\u3061\u3089\u3067\u5b9f\u884c\u3057\u305f\u5834\u5408\u3067\u3082\uff0c\u30a8\u30dd\u30c3\u30af\u3092\u91cd\u306d\u308b\u306b\u3064\u308c\u3066\u8a13\u7df4\u30c7\u30fc\u30bf (Train \u30c7\u30fc\u30bf) \u306e Loss \u306f\u5358\u8abf\u306b\u6e1b\u5c11\u3057\u3066\u3044\u304f\u306e\u304c\u898b\u3066\u53d6\u308c\u308b\u3060\u308d\u3046\uff0e\n\u4e00\u65b9\uff0c\u691c\u8a3c\u30c7\u30fc\u30bf (Validation \u30c7\u30fc\u30bf) \u306e Loss \u304a\u3088\u3073 Accuracy \u306f\uff0c\u3042\u308b\u7a0b\u5ea6\u307e\u3067\u6e1b\u5c11\u3057\u305f\u5f8c\uff0c\u305d\u308c\u4ee5\u4e0a\u6027\u80fd\u304c\u5411\u4e0a\u3057\u306a\u3044\u3053\u3068\u306b\u6c17\u304c\u3064\u304f\u3060\u308d\u3046\uff0e\n\u3053\u308c\u3092\u5b9f\u969b\u306b\u30d7\u30ed\u30c3\u30c8\u3057\u3066\u307f\u308b\u3068 Figure 58 \u306e\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\n\n\nFigure 58. (\u5de6) Train/Validation \u30c7\u30fc\u30bf\u305d\u308c\u305e\u308c\u306e Loss \u306e\u30a8\u30dd\u30c3\u30af\u3054\u3068\u306e\u5909\u5316\uff0e (\u53f3) Validation \u30c7\u30fc\u30bf\u306e Accuracy \u306e\u30a8\u30dd\u30c3\u30af\u3054\u3068\u306e\u5909\u5316\n\n\u3053\u308c\u306f\u30aa\u30fc\u30d0\u30fc\u30d5\u30a3\u30c3\u30c6\u30a3\u30f3\u30b0\u3068\u3088\u3070\u308c\u308b\u73fe\u8c61\u3067\uff0c\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u304c\u8a13\u7df4\u30c7\u30fc\u30bf\u306b\u904e\u5ea6\u306b\u6700\u9069\u5316\u3055\u308c\uff0c\u8a13\u7df4\u30c7\u30fc\u30bf\u306e\u5916\u306e\u30c7\u30fc\u30bf\u306b\u5bfe\u3057\u3066\u306e\u7cbe\u5ea6 (\u6c4e\u5316\u6027\u80fd) \u304c\u5411\u4e0a\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u306e\u5bfe\u51e6\u6cd5\u3068\u3057\u3066\uff0c Early stopping \u3068\u3088\u3070\u308c\u308b\u30c6\u30af\u30cb\u30c3\u30af\u304c\u77e5\u3089\u308c\u3066\u3044\u308b\uff0e\nEarly stopping \u3068\u306f\uff0c\u691c\u8a3c\u30c7\u30fc\u30bf\u306e Loss \u3092\u8ffd\u8de1\u3057\uff0c\u305d\u308c\u304c\u6e1b\u5c11\u304b\u3089\u5897\u52a0\u306b\u8ee2\u3058\u308b\u30a8\u30dd\u30c3\u30af\u3067\u5b66\u7fd2\u3092\u3046\u3061\u6b62\u3081\uff0c\u305d\u306e\u30a8\u30dd\u30c3\u30af\u3067\u306e\u30a6\u30a7\u30a4\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u63a1\u7528\u3059\u308b\uff0c\u3068\u3044\u3046\u3082\u306e\u3067\u3042\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u3082\uff0c Early stopping \u306b\u3088\u3063\u3066\u8a13\u7df4\u306e\u7d42\u4e86\u3092\u5224\u65ad\u3057\uff0c\u30e2\u30c7\u30eb\u306e\u6027\u80fd\u8a55\u4fa1\u3092\u884c\u3063\u3066\u3044\u304f\uff0e\n\n\n\n\n\n\n\nMNIST \u624b\u66f8\u304d\u6587\u5b57\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3067\u306f\uff0c\u8a13\u7df4\u30c7\u30fc\u30bf\u3068\u3057\u3066 60,000 \u679a\uff0c\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u3068\u3057\u3066 10,000 \u679a\u306e\u753b\u50cf\u304c\u4e0e\u3048\u3089\u308c\u3066\u3044\u308b\uff0e\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u7528\u3059\u308b\u30b3\u30fc\u30c9\u3067\u306f\uff0c\u8a13\u7df4\u30c7\u30fc\u30bf\u306e\u3046\u3061 80% \u306e 48,000 \u679a\u3092\u8a13\u7df4\u30c7\u30fc\u30bf\u3068\u3057\u3066\u4f7f\u7528\u3057\uff0c\u6b8b\u308a 20% \u306e 12,000 \u679a\u3092\u691c\u8a3c\u30c7\u30fc\u30bf\u3068\u3057\u3066\u7528\u3044\u3066\u3044\u308b\uff0e\n\u8a73\u3057\u304f\u306f\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\n\n\n\n\n9.5. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092 Figure 59 \u306b\u793a\u3059\uff0e\n\n\n\nFigure 59. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n\n\u7c21\u5358\u306b\u307e\u3068\u3081\u308b\u3068\uff0c\u6b21\u306e\u3088\u3046\u306a\u8a2d\u8a08\u3067\u3042\u308b\uff0e\n\n\n\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\uff0c\u3042\u308b\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u7d44\u3092\u6307\u5b9a\u3057\u3066 Batch \u306b\u30b8\u30e7\u30d6\u3092\u63d0\u51fa\u3059\u308b\n\n\nBatch \u306f\u30b8\u30e7\u30d6\u3092\u53d7\u3051\u53d6\u308b\u3068\uff0c EC2 \u304b\u3089\u306a\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3067\u8a08\u7b97\u3092\u5b9f\u884c\u3059\u308b\n\n\n\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u306f g4dn.xlarge \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3059\u308b\n\n\nDocker \u30a4\u30e1\u30fc\u30b8\u306f\uff0c AWS \u5185\u306b\u7528\u610f\u3055\u308c\u305f ECR (Elastic Container Registry) \u304b\u3089\u53d6\u5f97\u3055\u308c\u308b\n\n\n\u8907\u6570\u306e\u30b8\u30e7\u30d6\u304c\u6295\u4e0b\u3055\u308c\u305f\u5834\u5408\u306f\uff0c\u305d\u306e\u6570\u3060\u3051\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3057\u4e26\u5217\u306b\u5b9f\u884c\u3055\u308c\u308b\n\n\n\u5404\u30b8\u30e7\u30d6\u306b\u3088\u308b\u8a08\u7b97\u306e\u7d50\u679c\u306f S3 \u306b\u4fdd\u5b58\u3055\u308c\u308b\n\n\n\u6700\u5f8c\u306b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f S3 \u304b\u3089\u7d50\u679c\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\uff0c\u6700\u9069\u306a\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u7d44\u3092\u6c7a\u5b9a\u3059\u308b\n\n\n\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\nclass SimpleBatch(core.Stack):\n\n    def __init__(self, scope: core.App, name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        (1)\n        bucket = s3.Bucket(\n            self, \"bucket\",\n            removal_policy=core.RemovalPolicy.DESTROY,\n            auto_delete_objects=True,\n        )\n\n        vpc = ec2.Vpc(\n            self, \"vpc\",\n            # other parameters...\n        )\n\n        (2)\n        managed_env = batch.ComputeEnvironment(\n            self, \"managed-env\",\n            compute_resources=batch.ComputeResources(\n                vpc=vpc,\n                allocation_strategy=batch.AllocationStrategy.BEST_FIT,\n                desiredv_cpus=0,\n                maxv_cpus=64,\n                minv_cpus=0,\n                instance_types=[\n                    ec2.InstanceType(\"g4dn.xlarge\")\n                ],\n            ),\n            managed=True,\n            compute_environment_name=self.stack_name + \"compute-env\"\n        )\n\n        (3)\n        job_queue = batch.JobQueue(\n            self, \"job-queue\",\n            compute_environments=[\n                batch.JobQueueComputeEnvironment(\n                    compute_environment=managed_env,\n                    order=100\n                )\n            ],\n            job_queue_name=self.stack_name + \"job-queue\"\n        )\n\n        (4)\n        job_role = iam.Role(\n            self, \"job-role\",\n            assumed_by=iam.CompositePrincipal(\n                iam.ServicePrincipal(\"ecs-tasks.amazonaws.com\")\n            )\n        )\n        # allow read and write access to S3 bucket\n        bucket.grant_read_write(job_role)\n\n        (5)\n        repo = ecr.Repository(\n            self, \"repository\",\n            removal_policy=core.RemovalPolicy.DESTROY,\n        )\n\n        (6)\n        job_def = batch.JobDefinition(\n            self, \"job-definition\",\n            container=batch.JobDefinitionContainer(\n                image=ecs.ContainerImage.from_ecr_repository(repo),\n                command=[\"python3\", \"main.py\"],\n                vcpus=4,\n                gpu_count=1,\n                memory_limit_mib=12000,\n                job_role=job_role,\n                environment={\n                    \"BUCKET_NAME\": bucket.bucket_name\n                }\n            ),\n            job_definition_name=self.stack_name + \"job-definition\",\n            timeout=core.Duration.hours(2),\n        )\n\n\n\n\n\n1\n\u3067\uff0c\u8a08\u7b97\u7d50\u679c\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e S3 \u30d0\u30b1\u30c3\u30c8\u3092\u7528\u610f\u3057\u3066\u3044\u308b\n\n\n2\n\u3067\uff0c Compute environment \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f g4dn.xlarge \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3092\u4f7f\u7528\u3059\u308b\u3068\u3057\uff0c\u6700\u5927\u306e vCPU \u4f7f\u7528\u6570\u306f 64 \u3068\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u6700\u5c0f\u306e vCPU \u306f 0 \u3067\u3042\u308b\uff0e\n\u4eca\u56de\u306f\uff0c\u8ca0\u8377\u304c\u304b\u304b\u3063\u3066\u3044\u306a\u3044\u3068\u304d\u306b\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u72b6\u614b\u306b\u3042\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u7528\u610f\u3059\u308b\u5229\u70b9\u306f\u5168\u304f\u306a\u3044\u306e\u3067\uff0c\u3053\u3053\u306f0\u306b\u3059\u308b\u306e\u304c\u671b\u307e\u3057\u3044\uff0e\n\n\n3\n\u3067\uff0c <2> \u3067\u4f5c\u6210\u3057\u305f Compute environment \u3068\u7d10\u4ed8\u3044\u305f Job queue \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n4\n\u3067\uff0c\u30b8\u30e7\u30d6\u304c\u8a08\u7b97\u7d50\u679c\u3092 S3 \u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\uff0c IAM \u30ed\u30fc\u30eb\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n(IAM \u3068\u306f\u30ea\u30bd\u30fc\u30b9\u304c\u3082\u3064\u6a29\u9650\u3092\u7ba1\u7406\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3042\u308b\uff0e\u8a73\u3057\u304f\u306f Section 13.2.5 \u3092\u53c2\u7167)\n\n\n5\n\u3067\u306f\uff0c Docker image \u3092\u914d\u7f6e\u3059\u308b\u305f\u3081\u306e ECR \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n6\n\u3067 Job definition \u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c4 vCPU\uff0c 12000 MB (=12GB) \u306e RAM \u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u4eca\u5f8c\u5fc5\u8981\u3068\u306a\u308b\u74b0\u5883\u5909\u6570 (BUCKET_NAME) \u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u3055\u3089\u306b\uff0c <4> \u3067\u4f5c\u3063\u305f IAM \u3092\u4ed8\u4e0e\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\ng4dn.xlarge \u306f 1\u53f0\u3042\u305f\u308a 4 vCPU \u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u306f Compute environment \u306e maximum vCPUs \u3092 64 \u3068\u6307\u5b9a\u3057\u3066\u3044\u308b\u306e\u3067\uff0c\u6700\u5927\u3067 16 \u53f0\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u540c\u6642\u306b\u8d77\u52d5\u3059\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\n\u3053\u3053\u3067 maxium vCPUs \u309264\u306b\u9650\u5b9a\u3057\u3066\u3044\u308b\u306e\u306f\uff0c\u306a\u3093\u3089\u304b\u306e\u30df\u30b9\u3067\u610f\u56f3\u305b\u306c\u30b8\u30e7\u30d6\u3092\u5927\u91cf\u306b\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u6295\u5165\u3057\u3066\u3057\u307e\u3063\u305f\u4e8b\u614b\u3067\uff0c\u9ad8\u984d\u306e AWS \u5229\u7528\u6599\u91d1\u304c\u767a\u751f\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u3067\u3042\u308b\uff0e\n\u3082\u3057\uff0c\u81ea\u5206\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5fc5\u8981\u3068\u5224\u65ad\u3057\u305f\u306a\u3089\u3070\u81ea\u5df1\u8cac\u4efb\u306b\u304a\u3044\u306664\u3088\u308a\u3082\u5927\u304d\u306a\u6570\u3092\u8a2d\u5b9a\u3057\u3066\u69cb\u308f\u306a\u3044\uff0e\n\u3053\u3053\u3067\u6ce8\u610f\u304c\u4e00\u70b9\u3042\u308b\uff0e\nAWS \u3067\u306f\u5404\u30a2\u30ab\u30a6\u30f3\u30c8\u3054\u3068\u306b EC2 \u3067\u8d77\u52d5\u3067\u304d\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4e0a\u9650\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u4e0a\u9650\u306f AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\uff0c EC2\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u5de6\u5074\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u306e Limits \u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u78ba\u8a8d\u3067\u304d\u308b (Figure 60)\uff0e\ng4dn.xlarge (EC2 \u306e\u533a\u5206\u3067\u3044\u3046\u3068 G \u30d5\u30a1\u30df\u30ea\u30fc\u306b\u5c5e\u3059\u308b) \u306e\u5236\u9650\u3092\u78ba\u8a8d\u3059\u308b\u306b\u306f\uff0c Running On-Demand All G instances \u3068\u3044\u3046\u540d\u524d\u306e\u9805\u76ee\u3092\u898b\u308b\uff0e\n\u3053\u3053\u306b\u3042\u308b\u6570\u5b57\u304c\uff0c AWS \u306b\u3088\u3063\u3066\u8ab2\u3055\u308c\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4e0a\u9650\u3067\u3042\u308a\uff0c\u3053\u306e\u4e0a\u9650\u3092\u8d85\u3048\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\uff0e\n\u3082\u3057\uff0c\u81ea\u5206\u306e\u7528\u9014\u306b\u5bfe\u3057\u3066\u4e0a\u9650\u304c\u4f4e\u3059\u304e\u308b\u5834\u5408\u306f\uff0c\u4e0a\u9650\u306e\u7de9\u548c\u7533\u8acb\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u8a73\u3057\u304f\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Amazon EC2 service quotas\" \u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\n\n\nFigure 60. EC2\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u5404\u7a2e\u306e\u4e0a\u9650\u3092\u78ba\u8a8d\u3059\u308b\n\n\n\n\n\n\n\n9.6. \u30b9\u30bf\u30c3\u30af\u306e\u30c7\u30d7\u30ed\u30a4\n\u30b9\u30bf\u30c3\u30af\u306e\u4e2d\u8eab\u304c\u7406\u89e3\u3067\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u65e9\u901f\u30b9\u30bf\u30c3\u30af\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd handson/aws-batch\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy\n\n\u30c7\u30d7\u30ed\u30a4\u306e\u30b3\u30de\u30f3\u30c9\u304c\u7121\u4e8b\u306b\u5b9f\u884c\u3055\u308c\u305f\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u305f\u3089\uff0cAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\uff0c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30b9\u30bf\u30c3\u30af\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u691c\u7d22\u30d0\u30fc\u3067 batch \u3068\u5165\u529b\u3057\uff0c AWS Batch \u306e\u7ba1\u7406\u753b\u9762\u3092\u958b\u304f (Figure 61)\uff0e\n\n\n\nFigure 61. AWS Batch \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762 (\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9)\n\n\u307e\u305a\u76ee\u3092\u5411\u3051\u3066\u307b\u3057\u3044\u306e\u304c\uff0c\u753b\u9762\u306e\u4e00\u756a\u4e0b\u306b\u3042\u308b Compute environment overview \u306e\u4e2d\u306e SimpleBatchcompute-env \u3068\u3044\u3046\u540d\u524d\u306e\u9805\u76ee\u3060\uff0e\nCompute environment \u3068\u306f\uff0c\u5148\u307b\u3069\u8ff0\u3079\u305f\u3068\u304a\u308a\uff0c\u8a08\u7b97\u304c\u5b9f\u884c\u3055\u308c\u308b\u74b0\u5883 (\u30af\u30e9\u30b9\u30bf\u30fc\u3068\u8aad\u307f\u66ff\u3048\u3066\u3082\u3088\u3044) \u3067\u3042\u308b\uff0e\n\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u6307\u5b9a\u3057\u305f\u3068\u304a\u308a\uff0c g4dn.xlarge \u304c\u5b9f\u969b\u306b\u4f7f\u7528\u3055\u308c\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30bf\u30a4\u30d7\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c Minimum vCPUs \u304c0\uff0cMaximum vCPUs \u304c 64 \u3068\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3082\u898b\u3066\u53d6\u308c\u308b\uff0e\n\u52a0\u3048\u3066\uff0c\u3053\u306e\u6642\u70b9\u3067\u306f\u4e00\u3064\u3082\u30b8\u30e7\u30d6\u304c\u8d70\u3063\u3066\u3044\u306a\u3044\u306e\u3067\uff0c Desired vCPUs \u306f0\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\u3088\u308a\u8a73\u7d30\u306a Compute environment \u306e\u60c5\u5831\u3092\u95b2\u89a7\u3057\u305f\u3044\u5834\u5408\u306f\uff0c\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u753b\u9762\u304c\u958b\u304f\uff0e\n\u6b21\u306b\uff0cJob queue overview \u306b\u3042\u308b SimpleBatch-queue \u3068\u3044\u3046\u9805\u76ee\u306b\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\uff0e\n\u3053\u3053\u3067\u306f\u5b9f\u884c\u5f85\u3061\u306e\u30b8\u30e7\u30d6\u30fb\u5b9f\u884c\u4e2d\u306e\u30b8\u30e7\u30d6\u30fb\u5b9f\u884c\u304c\u5b8c\u4e86\u3057\u305f\u30b8\u30e7\u30d6\u3092\u4e00\u89a7\u3067\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nPENDING, RUNNING, SUCCEEDED, FAILED \u306a\u3069\u306e\u30ab\u30e9\u30e0\u304c\u3042\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\u30b8\u30e7\u30d6\u304c\u9032\u884c\u3059\u308b\u306b\u3064\u308c\u3066\uff0c\u30b8\u30e7\u30d6\u306e\u72b6\u614b\u304c\u3053\u306e\u30ab\u30e9\u30e0\u306b\u3057\u305f\u304c\u3063\u3066\u9077\u79fb\u3057\u3066\u3044\u304f\uff0e\n\u5f8c\u3067\u30b8\u30e7\u30d6\u3092\u5b9f\u969b\u306b\u30b5\u30d6\u30df\u30c3\u30c8\u3057\u305f\u3068\u304d\u306b\u623b\u3063\u3066\u3053\u3088\u3046\uff0e\n\u6700\u5f8c\u306b\uff0c\u4eca\u56de\u4f5c\u6210\u3057\u305f Job definition \u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u5de6\u5074\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u3000Job definitions \u3092\u9078\u629e\u3057\uff0c\u6b21\u306e\u753b\u9762\u3067 SimpleBatchjob-definition \u3068\u3044\u3046\u9805\u76ee\u3092\u898b\u3064\u3051\u3066\u958b\u304f\uff0e\n\u3053\u3053\u304b\u3089 Job definition \u306e\u8a73\u7d30\u3092\u95b2\u89a7\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b (Figure 62)\uff0e\n\u4e2d\u3067\u3082\u91cd\u8981\u306a\u60c5\u5831\u3068\u3057\u3066\u306f\uff0c\u3000vCPUs, Memory, GPU \u304c\u305d\u308c\u305e\u308c Docker \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b vCPU\u30fb\u30e1\u30e2\u30ea\u30fc\u30fb GPU \u306e\u91cf\u3092\u898f\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c Image \u3068\u66f8\u3044\u3066\u3042\u308b\u3068\u3053\u308d\u306b\uff0c\u30b8\u30e7\u30d6\u3067\u4f7f\u7528\u3055\u308c\u308b Docker \u30a4\u30e1\u30fc\u30b8\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c ECR \u306e\u30ec\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u7167\u3057\u3066\u3044\u308b\uff0e\n\u73fe\u6642\u70b9\u3067\u306f\u3053\u306e ECR \u306f\u7a7a\u3067\u3042\u308b\uff0e\n\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\uff0c\u3053\u306e ECR \u306b\u30a4\u30e1\u30fc\u30b8\u3092\u914d\u7f6e\u3059\u308b\u4f5c\u696d\u3092\u884c\u304a\u3046\uff0e\n\n\n\nFigure 62. AWS Batch \u304b\u3089 Job definition \u3092\u78ba\u8a8d\n\n\n\n9.7. Docker image \u3092 ECR \u306b\u914d\u7f6e\u3059\u308b\n\u3055\u3066\uff0c Batch \u304c\u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c\u3069\u3053\u304b\u6307\u5b9a\u3055\u308c\u305f\u5834\u6240\u304b\u3089 Docker \u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 (pull) \u3057\u3066\u304f\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u524d\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3 (Section 8) \u3067\u306f\uff0c\u516c\u958b\u8a2d\u5b9a\u306b\u3057\u3066\u3042\u308b Docker Hub \u304b\u3089\u30a4\u30e1\u30fc\u30b8\u3092 pull \u3057\u3066\u304d\u305f\uff0e\n\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c AWS \u304b\u3089\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u30ec\u30b8\u30b9\u30c8\u30ea\u3067\u3042\u308b ECR (Elastic Container Registry) \u306b image \u3092\u914d\u7f6e\u3059\u308b\u3068\u3044\u3046\u8a2d\u8a08\u3092\u63a1\u7528\u3059\u308b\uff0e\nECR \u3092\u5229\u7528\u3059\u308b\u5229\u70b9\u306f\uff0c\u81ea\u5206\u3060\u3051\u304c\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u306e\u3067\u304d\u308b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30a4\u30e1\u30fc\u30b8\u306e\u7f6e\u304d\u5834\u6240\u3092\u7528\u610f\u3067\u304d\u308b\u70b9\u3067\u3042\u308b\uff0e\nBatch \u306f ECR \u304b\u3089\u30a4\u30e1\u30fc\u30b8\u3092 pull \u3057\u3066\u304f\u308b\u3053\u3068\u3067\uff0c\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b (Figure 59)\uff0e\n\u30b9\u30bf\u30c3\u30af\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3067\u3044\u3046\u3068\uff0c\u6b21\u306e\u7b87\u6240\u304c ECR \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n(1)\nrepo = ecr.Repository(\n    self, \"repository\",\n    removal_policy=core.RemovalPolicy.DESTROY,\n)\n\njob_def = batch.JobDefinition(\n    self, \"job-definition\",\n    container=batch.JobDefinitionContainer(\n        image=ecs.ContainerImage.from_ecr_repository(repo), (2)\n        ...\n    ),\n    ...\n)\n\n\n\n\n1\n\u3067\uff0c\u65b0\u898f\u306e ECR \u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\uff0e\n\n\n2\n\u3067 Job definition \u3092\u5b9a\u7fa9\u3059\u308b\u4e2d\u3067\uff0c\u30a4\u30e1\u30fc\u30b8\u3092 <1> \u3067\u4f5c\u3063\u305f ECR \u304b\u3089\u53d6\u5f97\u3059\u308b\u3088\u3046\u306b\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3068\u540c\u6642\u306b\uff0c Job definition \u306b\u306f ECR \u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u304c IAM \u3092\u901a\u3058\u3066\u81ea\u52d5\u7684\u306b\u4ed8\u4e0e\u3055\u308c\u308b\uff0e\n\n\n\n\u3055\u3066\uff0c\u30b9\u30bf\u30c3\u30af\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u6642\u70b9\u3067\u306f\uff0c ECR \u306f\u7a7a\u3063\u307d\u3067\u3042\u308b\uff0e\n\u3053\u3053\u306b\u81ea\u5206\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f7f\u3046 Docker \u30a4\u30e1\u30fc\u30b8\u3092 push \u3057\u3066\u3042\u3052\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u305d\u306e\u305f\u3081\u306b\uff0c\u307e\u305a\u306f AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089 ECR \u306e\u753b\u9762\u3092\u958b\u3053\u3046 (\u691c\u7d22\u30d0\u30fc\u306b Elastic Container Registry \u3068\u5165\u529b\u3059\u308b\u3068\u51fa\u3066\u304f\u308b)\uff0e\nPrivate \u3068\u3044\u3046\u30bf\u30d6\u3092\u9078\u629e\u3059\u308b\u3068\uff0c simplebatch-repositoryXXXXXX \u3068\u3044\u3046\u540d\u524d\u306e\u30ec\u30dd\u30b8\u30c8\u30ea\u304c\u898b\u3064\u304b\u308b\u3060\u308d\u3046 (Figure 63)\uff0e\n\n\n\nFigure 63. ECR \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\n\n\u6b21\u306b\uff0c\u3053\u306e\u30ec\u30dd\u30b8\u30c8\u30ea\u306e\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u30ec\u30dd\u30b8\u30c8\u30ea\u306e\u8a73\u7d30\u753b\u9762\u306b\u9077\u79fb\u3059\u308b\uff0e\n\u305d\u3046\u3057\u305f\u3089\uff0c\u753b\u9762\u53f3\u4e0a\u306b\u3042\u308b View push commands \u3068\u3044\u3046\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\uff0e\n\u3059\u308b\u3068 Figure 64 \u306e\u3088\u3046\u306a\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u753b\u9762\u304c\u7acb\u3061\u4e0a\u304c\u308b\uff0e\n\n\n\nFigure 64. ECR \u3078\u306e push \u30b3\u30de\u30f3\u30c9\n\n\u3053\u306e\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u753b\u9762\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u56db\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u9806\u756a\u306b\u5b9f\u884c\u3057\u3066\u3044\u304f\u3053\u3068\u3067\uff0c\u624b\u5143\u306e Docker \u30a4\u30e1\u30fc\u30b8\u3092 ECR \u306b push \u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\npush \u3092\u5b9f\u884c\u3059\u308b\u524d\u306b\uff0c AWS \u306e\u8a8d\u8a3c\u60c5\u5831\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u305d\u306e\u3046\u3048\u3067\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u4e2d\u306b\u3042\u308b docker/ \u3068\u3044\u3046\u540d\u524d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3059\u308b\uff0e\n\u305d\u3046\u3057\u305f\u3089\uff0c\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u753b\u9762\u3067\u8868\u793a\u3055\u308c\u305f\u30b3\u30de\u30f3\u30c9\u3092\u4e0a\u304b\u3089\u9806\u306b\u5b9f\u884c\u3057\u3066\u3044\u304f\uff0e\n\n\n\n\n\n\n\n\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3067\u8868\u793a\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\u306e2\u3064\u3081\u3092\u898b\u3066\u307f\u308b\u3068 docker build -t XXXXX . \u3068\u306a\u3063\u3066\u3044\u308b\uff0e\n\u6700\u5f8c\u306e . \u304c\u91cd\u8981\u3067\uff0c\u3053\u308c\u306f \u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b Dockerfile \u3092\u4f7f\u3063\u3066\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u305b\u3088 \u3068\u3044\u3046\u610f\u5473\u3067\u3042\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306a\u7406\u7531\u3067\uff0c Dockerfile \u304c\u7f6e\u3044\u3066\u3042\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\u56db\u3064\u76ee\u306e\u30b3\u30de\u30f3\u30c9\u306f\uff0c\u6570GB\u3042\u308b\u30a4\u30e1\u30fc\u30b8\u3092 ECR \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u306e\u3067\u5c11\u3057\u6642\u9593\u304c\u304b\u304b\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u304c\uff0c\u3053\u308c\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3081\u3067\u305f\u304f\u30a4\u30e1\u30fc\u30b8\u304c ECR \u306b\u914d\u7f6e\u3055\u308c\u305f\u3053\u3068\u306b\u306a\u308b\uff0e\n\u3082\u3046\u4e00\u5ea6 ECR \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u898b\u3066\u307f\u308b\u3068\uff0c\u78ba\u304b\u306b\u30a4\u30e1\u30fc\u30b8\u304c\u914d\u7f6e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b (Figure 65)\uff0e\n\u3053\u308c\u3067\uff0cAWS Batch \u3092\u4f7f\u3063\u3066\u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3055\u305b\u308b\u305f\u3081\u306e\u6700\u5f8c\u306e\u6e96\u5099\u304c\u5b8c\u4e86\u3057\u305f\uff0e\n\n\n\nFigure 65. ECR \u3078 image \u306e\u914d\u7f6e\u304c\u5b8c\u4e86\u3057\u305f\n\n\n\n9.8. \u5358\u4e00\u306e\u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3059\u308b\n\u3055\u3066\uff0c\u3053\u3053\u304b\u3089\u306f\u5b9f\u969b\u306b AWS Batch \u306b\u30b8\u30e7\u30d6\u3092\u6295\u5165\u3059\u308b\u65b9\u6cd5\u3092\u898b\u3066\u3044\u3053\u3046\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e notebook/ \u3068\u3044\u3046\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\uff0c\nrun_single.ipynb\n\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b (.ipynb \u306f Jupyter notebook \u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f)\uff0e\n\u3053\u308c\u3092 Jupyter notebook \u304b\u3089\u958b\u3053\u3046\uff0e\n\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c venv \u306b\u3088\u308b\u4eee\u60f3\u74b0\u5883\u306e\u4e2d\u306b Jupyter notebook \u3082\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\uff0e\n\u306a\u306e\u3067\uff0c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u304b\u3089\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067 Jupyter notebook \u3092\u7acb\u3061\u4e0a\u3052\u308b\uff0e\n\n# .env \u306e\u4eee\u60f3\u74b0\u5883\u306b\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\n(.env) $ cd notebook\n(.env) $ jupyter notebook\n\nJupyter notebook \u304c\u8d77\u52d5\u3057\u305f\u3089\uff0c run_single.ipynb \u3092\u958b\u304f\uff0e\n\u6700\u521d\u306e [1], [2], [3] \u756a\u306e\u30bb\u30eb\u306f\uff0c\u30b8\u30e7\u30d6\u3092\u30b5\u30d6\u30df\u30c3\u30c8\u3059\u308b\u305f\u3081\u306e\u95a2\u6570 (submit_job()) \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n# [1]\nimport boto3\nimport argparse\n\n# [2]\n# AWS \u8a8d\u8a3c\u30d8\u30eb\u30d1\u30fc ...\u7701\u7565...\n\n# [3]\ndef submit_job(lr:float, momentum:float, epochs:int, profile_name=\"default\"):\n    if profile_name is None:\n        session = boto3.Session()\n    else:\n        session = boto3.Session(profile_name=profile_name)\n    client = session.client(\"batch\")\n\n    title = \"lr\" + str(lr).replace(\".\", \"\") + \"_m\" + str(momentum).replace(\".\", \"\")\n    resp = client.submit_job(\n        jobName=title,\n        jobQueue=\"SimpleBatchjob-queue\",\n        jobDefinition=\"SimpleBatchjob-definition\",\n        containerOverrides={\n            \"command\": [\"--lr\", str(lr),\n                        \"--momentum\", str(momentum),\n                        \"--epochs\", str(epochs),\n                        \"--uploadS3\", \"true\"]\n        }\n    )\n    print(\"Job submitted!\")\n    print(\"job name\", resp[\"jobName\"], \"job ID\", resp[\"jobId\"])\n\n\nsubmit_job() \u95a2\u6570\u306b\u3064\u3044\u3066\u7c21\u5358\u306b\u8aac\u660e\u3057\u3088\u3046\uff0e\nSection 9.4 \u3067\uff0c MNIST \u306e Docker \u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\uff0c\u6b21\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u305f\uff0e\n\n$ docker run -it mymnist --lr 0.1 --momentum 0.5 --epochs 10\n\n\u3053\u3053\u3067\uff0c --lr 0.1 --momentum 0.5 --epochs 10 \u306e\u90e8\u5206\u304c\uff0c\u30b3\u30f3\u30c6\u30ca\u306b\u6e21\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3042\u308b\uff0e\nAWS Batch \u3067\u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3059\u308b\u969b\u3082\uff0cContainerOverrides \u306e command \u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u30b3\u30f3\u30c6\u30ca\u306b\u6e21\u3055\u308c\u308b\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30b3\u30fc\u30c9\u3067\u306f\u4ee5\u4e0b\u306e\u90e8\u5206\u304c\u8a72\u5f53\u3059\u308b\uff0e\n\n1\n2\n3\n4\n5\n6\ncontainerOverrides={\n    \"command\": [\"--lr\", str(lr),\n                \"--momentum\", str(momentum),\n                \"--epochs\", str(epochs),\n                \"--uploadS3\", \"true\"]\n}\n\n\n\u7d9a\u3044\u3066\uff0c [4] \u756a\u306e\u30bb\u30eb\u306b\u79fb\u308d\u3046\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u4e0a\u8a18\u306e submit_job() \u95a2\u6570\u3092\u7528\u3044\u3066\uff0c \u5b66\u7fd2\u7387 = 0.01, \u30e2\u30e1\u30f3\u30bf\u30e0=0.1, \u30a8\u30dd\u30c3\u30af\u6570=100 \u3092\u6307\u5b9a\u3057\u305f\u30b8\u30e7\u30d6\u3092\u6295\u5165\u3059\u308b\uff0e\n\n# [4]\nsubmit_job(0.01, 0.1, 100)\n\n\n\n\n\n\n\n\nAWS \u306e\u8a8d\u8a3c\u60c5\u5831\u306f\uff0c Jupyter Notebook \u306e\u5185\u90e8\u304b\u3089\u518d\u5ea6\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u3053\u308c\u3092\u624b\u52a9\u3051\u3059\u308b\u305f\u3081\uff0c Notebook \u306e [2] \u756a\u306e\u30bb\u30eb (\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3059\u3079\u3066\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3055\u308c\u3066\u3044\u308b) \u3092\u7528\u610f\u3057\u305f\uff0e\n\u3053\u308c\u3092\u4f7f\u3046\u306b\u306f\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3059\u308c\u3070\u3088\u3044\uff0e\n\u3053\u306e\u30bb\u30eb\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c AWS \u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u5165\u529b\u3059\u308b\u5bfe\u8a71\u7684\u306a\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u8868\u793a\u3055\u308c\u308b\uff0e\n\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u5f93\u3063\u3066 aws secret key \u306a\u3069\u3092\u5165\u529b\u3059\u308b\u3053\u3068\u3067\uff0c (Jupyter \u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u56fa\u6709\u306a) \u74b0\u5883\u5909\u6570\u306b AWS \u306e\u8a8d\u8a3c\u60c5\u5831\u304c\u8a18\u9332\u3055\u308c\u308b\uff0e\n\u3082\u3046\u4e00\u3064\u306e\u8a8d\u8a3c\u65b9\u6cd5\u3068\u3057\u3066\uff0c submit_job() \u95a2\u6570\u306b profile_name \u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u7528\u610f\u3057\u305f\uff0e\n\u3082\u3057 ~/.aws/credentials \u306b\u8a8d\u8a3c\u60c5\u5831\u304c\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u308b\u306e\u306a\u3089\u3070 (\u8a73\u3057\u304f\u306f Section 15.3)\uff0c profile_name \u306b\u4f7f\u7528\u3057\u305f\u3044\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u524d\u3092\u6e21\u3059\u3060\u3051\u3067\uff0c\n\u8a8d\u8a3c\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u6163\u308c\u3066\u3044\u308b\u8aad\u8005\u306f\u5f8c\u8005\u306e\u307b\u3046\u304c\u4fbf\u5229\u3067\u3042\u308b\u3068\u611f\u3058\u308b\u3060\u308d\u3046\uff0e\n\n\n\n\n[4] \u756a\u306e\u30bb\u30eb\u3092\u5b9f\u884c\u3057\u305f\u3089\uff0c\u30b8\u30e7\u30d6\u304c\u5b9f\u969b\u306b\u6295\u5165\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u3092 AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\nAWS Batch \u306e\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u958b\u304f\u3068\uff0c Figure 66 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 66. AWS Batch \u3067\u30b8\u30e7\u30d6\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u69d8\u5b50\n\nFigure 66 \u3067\u8d64\u3067\u56f2\u3063\u305f\u7b87\u6240\u306b\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\uff0e\n\u4e00\u3064\u306e\u30b8\u30e7\u30d6\u304c\u6295\u5165\u3055\u308c\u308b\u3068\uff0c\u305d\u308c\u306f SUBMITTED \u3068\u3044\u3046\u72b6\u614b\u3092\u7d4c\u3066 RUNNABLE \u3068\u3044\u3046\u72b6\u614b\u306b\u9077\u79fb\u3059\u308b\uff0e\nRUNNABLE \u3068\u306f\uff0c \u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c Compute environment \u306b\u4e0d\u8db3\u3057\u3066\u3044\u308b\u305f\u3081\uff0c\u65b0\u305f\u306a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3055\u308c\u308b\u306e\u3092\u5f85\u3063\u3066\u3044\u308b\u72b6\u614b\u306b\u76f8\u5f53\u3059\u308b\uff0e\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6e96\u5099\u304c\u6574\u3046\u3068\uff0c\u30b8\u30e7\u30d6\u306e\u72b6\u614b\u306f STARTING \u3092\u7d4c\u3066 RUNNING \u306b\u81f3\u308b\uff0e\n\u6b21\u306b\uff0c\u30b8\u30e7\u30d6\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u304c RUNNING \u306e\u3068\u304d\u306e Compute environment \u306e Desired vCPU \u3092\u898b\u3066\u307f\u3088\u3046 (Figure 66 \u3067\u7d2b\u3067\u56f2\u3063\u305f\u7b87\u6240)\uff0e\n\u3053\u3053\u3067 4 \u3068\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u306e\u306f\uff0c g4dn.xlarge \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4e00\u3064\u5206\u306e vCPU \u306e\u6570\u3067\u3042\u308b\uff0e\n\u30b8\u30e7\u30d6\u306e\u6295\u5165\u306b\u5fdc\u3058\u3066\uff0c\u305d\u308c\u3092\u5b9f\u884c\u3059\u308b\u306e\u306b\u6700\u4f4e\u9650\u5fc5\u8981\u306a EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3055\u308c\u305f\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\n(\u8208\u5473\u306e\u3042\u308b\u4eba\u306f\uff0c EC2 \u30b3\u30f3\u30bd\u30fc\u30eb\u3082\u540c\u6642\u306b\u8997\u3044\u3066\u307f\u308b\u3068\u3088\u3044)\uff0e\n\u3057\u3070\u3089\u304f\u7d4c\u3064\u3068\uff0c\u30b8\u30e7\u30d6\u306e\u72b6\u614b\u306f RUNNING \u304b\u3089 SUCCEEDED (\u3042\u308b\u3044\u306f\u4f55\u3089\u304b\u306e\u7406\u7531\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u3068\u304d\u306b\u306f FAILED) \u306b\u9077\u79fb\u3059\u308b\uff0e\n\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u3063\u3066\u3044\u308b MNIST \u306e\u5b66\u7fd2\u306f\u3060\u3044\u305f\u3044 10 \u5206\u304f\u3089\u3044\u3067\u5b8c\u4e86\u3059\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u30b8\u30e7\u30d6\u306e\u72b6\u614b\u304c SUCCEEDED \u306b\u306a\u308b\u307e\u3067\u898b\u5c4a\u3051\u3088\u3046\uff0e\n\u30b8\u30e7\u30d6\u304c\u5b8c\u4e86\u3059\u308b\u3068\uff0c\u5b66\u7fd2\u306e\u7d50\u679c (\u30a8\u30dd\u30c3\u30af\u3054\u3068\u306e Loss \u3068 Accuracy \u3092\u8a18\u9332\u3057\u305f CSV \u30d5\u30a1\u30a4\u30eb) \u306f S3 \u306b\u4fdd\u5b58\u3055\u308c\u308b\uff0e\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u3053\u308c\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\nS3 \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u304f\u3068 simplebatch-bucketXXXX (XXXX \u306e\u90e8\u5206\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u7570\u306a\u308b) \u3068\u3044\u3046\u540d\u524d\u306e\u30d0\u30b1\u30c3\u30c8\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u308c\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u4e2d\u8eab\u3092\u898b\u3066\u307f\u308b\u3068\uff0c metrics_lr0.0100_m0.1000.csv \u3068\u3044\u3046\u540d\u524d\u306e CSV \u304c\u3042\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046 (Figure 67)\uff0e\n\u3053\u308c\u304c\uff0c \u5b66\u7fd2\u7387 = 0.01, \u30e2\u30e1\u30f3\u30bf\u30e0 = 0.1 \u3068\u3057\u3066\u5b66\u7fd2\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u7d50\u679c\u3067\u3042\u308b\uff0e\n\n\n\nFigure 67. \u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u7d50\u679c\u306f S3 \u306b\u4fdd\u5b58\u3055\u308c\u308b\n\n\u3055\u3066\uff0c\u3053\u3053\u3067 run_single.ipynb \u306b\u623b\u3063\u3066\u3053\u3088\u3046\uff0e\n[5] \u304b\u3089 [7] \u756a\u306e\u30bb\u30eb\u3067\u306f\uff0c\u5b66\u7fd2\u7d50\u679c\u306e CSV \u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u884c\u3063\u3066\u3044\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n# [5]\nimport pandas as pd\nimport io\nfrom matplotlib import pyplot as plt\n\n# [6]\ndef read_table_from_s3(bucket_name, key, profile_name=None):\n    if profile_name is None:\n        session = boto3.Session()\n    else:\n        session = boto3.Session(profile_name=profile_name)\n    s3 = session.resource(\"s3\")\n    bucket = s3.Bucket(bucket_name)\n\n    obj = bucket.Object(key).get().get(\"Body\")\n    df = pd.read_csv(obj)\n\n    return df\n\n# [7]\nbucket_name = \"simplebatch-bucket43879c71-mbqaltx441fu\"\ndf = read_table_from_s3(\n    bucket_name,\n    \"metrics_lr0.0100_m0.1000.csv\"\n)\n\n\n[6] \u3067 S3 \u304b\u3089 CSV \u30c7\u30fc\u30bf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\uff0c pandas \u306e DataFrame \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u30ed\u30fc\u30c9\u3059\u308b\u95a2\u6570\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n[7] \u3092\u5b9f\u884c\u3059\u308b\u969b\uff0c bucket_name \u3068\u3044\u3046\u5909\u6570\u306e\u5024\u3092\uff0c\u81ea\u5206\u81ea\u8eab\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3088\u3046\n(\u5148\u307b\u3069 S3 \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d\u3057\u305f simplebatch-bucketXXXX \u306e\u3053\u3068\u3067\u3042\u308b)\uff0e\n\u7d9a\u3044\u3066\uff0c [9] \u756a\u306e\u30bb\u30eb\u3067\uff0c CSV \u306e\u30c7\u30fc\u30bf\u3092\u30d7\u30ed\u30c3\u30c8\u3057\u3066\u3044\u308b (Figure 68)\uff0e\n\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u3068\u540c\u3058\u3088\u3046\u306b\uff0c AWS Batch \u3092\u7528\u3044\u3066 MNIST \u30e2\u30c7\u30eb\u3092\u8a13\u7df4\u3059\u308b\u3053\u3068\u306b\u6210\u529f\u3057\u305f\uff01\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n# [9]\nfig, (ax1, ax2) = plt.subplots(1,2, figsize=(9,4))\nx = [i for i in range(df.shape[0])]\nax1.plot(x, df[\"train_loss\"], label=\"Train\")\nax1.plot(x, df[\"val_loss\"], label=\"Val\")\nax2.plot(x, df[\"val_accuracy\"])\n\nax1.set_xlabel(\"Epochs\")\nax1.set_ylabel(\"Loss\")\nax1.legend()\n\nax2.set_xlabel(\"Epochs\")\nax2.set_ylabel(\"Accuracy\")\n\nprint(\"Best loss:\", df[\"val_loss\"].min())\nprint(\"Best loss epoch:\", df[\"val_loss\"].argmin())\nprint(\"Best accuracy:\", df[\"val_accuracy\"].max())\nprint(\"Best accuracy epoch:\", df[\"val_accuracy\"].argmax())\n\n\n\n\n\nFigure 68. AWS Batch \u3067\u884c\u3063\u305f MNIST \u30e2\u30c7\u30eb\u306e\u5b66\u7fd2\u306e\u7d50\u679c\n\n\n\n9.9. \u4e26\u5217\u306b\u8907\u6570\u306e Job \u3092\u5b9f\u884c\u3059\u308b\n\u3055\u3066\uff0c\u3053\u3053\u304b\u3089\u304c\u6700\u5f8c\u306e\u4ed5\u4e0a\u3052\u3067\u3042\u308b\uff0e\n\u3053\u3053\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u69cb\u7bc9\u3057\u305f AWS Batch \u306e\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u3063\u3066\uff0c\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u3092\u5b9f\u969b\u306b\u884c\u304a\u3046\uff0e\n\u5148\u307b\u3069\u5b9f\u884c\u3057\u305f run_single.ipynb \u3068\u540c\u3058\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b run_sweep.ipynb \u3092\u958b\u304f\uff0e\n\u30bb\u30eb [1], [2], [3] \u306f run_single.ipynb \u3068\u540c\u4e00\u3067\u3042\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n# [1]\nimport boto3\nimport argparse\n\n# [2]\n# AWS \u8a8d\u8a3c\u30d8\u30eb\u30d1\u30fc ...\u7701\u7565...\n\n# [3]\ndef submit_job(lr:float, momentum:float, epochs:int, profile_name=None):\n    # ...\u7701\u7565...\n\n\n\u30bb\u30eb [4] \u306e for \u30eb\u30fc\u30d7\u3092\u4f7f\u3063\u3066\uff0c\u30b0\u30ea\u30c3\u30c9\u72b6\u306b\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u7528\u610f\u3057\uff0c batch \u306b\u30b8\u30e7\u30d6\u3092\u6295\u5165\u3057\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f 3x3=9\u500b\u306e\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3057\u305f\uff0e\n\n1\n2\n3\n4\n# [4]\nfor lr in [0.1, 0.01, 0.001]:\n    for m in [0.5, 0.1, 0.05]:\n        submit_job(lr, m, 100)\n\n\n\u30bb\u30eb [4] \u3092\u5b9f\u884c\u3057\u305f\u3089\uff0c Batch \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u958b\u3053\u3046\uff0e\n\u5148\u307b\u3069\u3068\u540c\u69d8\u306b\uff0c\u30b8\u30e7\u30d6\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u306f SUBMITTED > RUNNABLE > STARTING > RUNNING \u3068\u79fb\u308a\u5909\u308f\u3063\u3066\u3044\u304f\u3053\u3068\u304c\u308f\u304b\u308b\u3060\u308d\u3046\uff0e\n\u6700\u7d42\u7684\u306b 9 \u500b\u306e\u30b8\u30e7\u30d6\u304c\u3059\u3079\u3066 RUNNING \u306e\u72b6\u614b\u306b\u306a\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046 (Figure 69)\uff0e\n\u307e\u305f\uff0c\u3053\u306e\u3068\u304d Compute environment \u306e Desired vCPUs \u306f 4x9=36 \u3068\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046 (Figure 69)\uff0e\n\n\n\nFigure 69. \u8907\u6570\u306e\u30b8\u30e7\u30d6\u3092\u540c\u6642\u6295\u5165\u3057\u305f\u3068\u304d\u306e Batch \u30b3\u30f3\u30bd\u30fc\u30eb\n\n\u6b21\u306b\uff0cBatch \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u5de6\u5074\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089 Jobs \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u307f\u3088\u3046\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u5b9f\u884c\u4e2d\u306e\u30b8\u30e7\u30d6\u306e\u4e00\u89a7\u304c\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b (Figure 70)\uff0e\n\u30b8\u30e7\u30d6\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3092\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n9\u500b\u306e\u30b8\u30e7\u30d6\u304c\u3069\u308c\u3082 RUNNING \u72b6\u614b\u306b\u3042\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 70. \u8907\u6570\u306e\u30b8\u30e7\u30d6\u3092\u540c\u6642\u6295\u5165\u3057\u305f\u3068\u304d\u306e Job \u4e00\u89a7\n\n\u4eca\u5ea6\u306f EC2 \u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\u5de6\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089 Instances \u3092\u9078\u629e\u3059\u308b\u3068\uff0c Figure 71 \u306b\u793a\u3059\u3088\u3046\u306a\u8d77\u52d5\u4e2d\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4e00\u89a7\u304c\u8868\u793a\u3055\u308c\u308b\uff0e\ng4dn.xlarge \u304c 9 \u53f0\u7a3c\u50cd\u3057\u3066\u3044\u308b\u306e\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\nBatch \u304c\u30b8\u30e7\u30d6\u306e\u6295\u4e0b\u306b\u5408\u308f\u305b\u3066\u5fc5\u8981\u306a\u6570\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u3066\u304f\u308c\u305f\u306e\u3060\uff01\n\n\n\nFigure 71. \u8907\u6570\u306e\u30b8\u30e7\u30d6\u3092\u540c\u6642\u6295\u5165\u3057\u305f\u3068\u304d\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4e00\u89a7\n\n\u3053\u3053\u307e\u3067\u78ba\u8a8d\u3067\u304d\u305f\u3089\uff0c\u305d\u308c\u305e\u308c\u306e Job \u304c\u7d42\u4e86\u3059\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u5f85\u3068\u3046 (\u3060\u3044\u305f\u3044 10-15 \u5206\u304f\u3089\u3044\u3067\u7d42\u308f\u308b)\uff0e\n\u3059\u3079\u3066\u306e\u30b8\u30e7\u30d6\u304c\u7d42\u4e86\u3059\u308b\u3068\uff0c\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e SUCCEEDED \u304c 9 \u3068\u306a\u3063\u3066\u3044\u308b\u306f\u305a\u3060\uff0e\n\u307e\u305f\uff0c Compute environment \u306e Desired vCPUs \u3082 0 \u306b\u843d\u3061\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u6700\u5f8c\u306b EC2 \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u3063\u3066\uff0c\u3059\u3079\u3066\u306e g4dn \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u505c\u6b62\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u4ee5\u4e0a\u304b\u3089\uff0c AWS Batch \u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c\u30b8\u30e7\u30d6\u306e\u6295\u5165\u306b\u5fdc\u3058\u3066\u81ea\u52d5\u7684\u306b EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8d77\u52d5\u3055\u308c\uff0c\u30b8\u30e7\u30d6\u306e\u5b8c\u4e86\u3068\u3068\u3082\u306b\uff0c\u305f\u3060\u3061\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u505c\u6b62\u304c\u884c\u308f\u308c\u308b\u4e00\u9023\u306e\u6319\u52d5\u3092\u89b3\u5bdf\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff0e\n\u4e00\u3064\u306e\u30b8\u30e7\u30d6\u306e\u5b8c\u4e86\u306b\u304a\u3088\u305d10\u5206\u306e\u6642\u9593\u304c\u304b\u304b\u308b\u306e\u3067\uff0c9\u500b\u306e\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u7d44\u3092\u9010\u6b21\u7684\u306b\u8a08\u7b97\u3057\u3066\u3044\u305f\u5834\u5408\u306f90\u5206\u306e\u6642\u9593\u3092\u8981\u3059\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\nAWS Batch \u3092\u4f7f\u3063\u3066\u3053\u308c\u3089\u306e\u8a08\u7b97\u3092\u4e26\u5217\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c\u30b8\u30e7\u30d6\u4e00\u500b\u5206\u306e\u8a08\u7b97\u6642\u9593 (=10\u5206) \u3067\u3059\u3079\u3066\u306e\u8a08\u7b97\u3092\u7d42\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff01\n\u3055\u3066\uff0c\u518d\u3073 run_sweep.ipynb \u306b\u623b\u3063\u3066\u3053\u3088\u3046\uff0e\n[5] \u4ee5\u964d\u306e\u30bb\u30eb\u3067\u306f\uff0c\u30b0\u30ea\u30c3\u30c9\u30b5\u30fc\u30c1\u306e\u7d50\u679c\u3092\u53ef\u8996\u5316\u3057\u3066\u3044\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n# [5]\nimport pandas as pd\nimport numpy as np\nimport io\nfrom matplotlib import pyplot as plt\n\n# [6]\ndef read_table_from_s3(bucket_name, key, profile_name=None):\n    if profile_name is None:\n        session = boto3.Session()\n    else:\n        session = boto3.Session(profile_name=profile_name)\n    s3 = session.resource(\"s3\")\n    bucket = s3.Bucket(bucket_name)\n\n    obj = bucket.Object(key).get().get(\"Body\")\n    df = pd.read_csv(obj)\n\n    return df\n\n# [7]\ngrid = np.zeros((3,3))\nfor (i, lr) in enumerate([0.1, 0.01, 0.001]):\n    for (j, m) in enumerate([0.5, 0.1, 0.05]):\n        key = f\"metrics_lr{lr:0.4f}_m{m:0.4f}.csv\"\n        df = read_table_from_s3(\"simplebatch-bucket43879c71-mbqaltx441fu\", key)\n        grid[i,j] = df[\"val_accuracy\"].max()\n\n# [8]\nfig, ax = plt.subplots(figsize=(6,6))\nax.set_aspect('equal')\n\nc = ax.pcolor(grid, edgecolors='w', linewidths=2)\n\nfor i in range(3):\n    for j in range(3):\n        text = ax.text(j+0.5, i+0.5, f\"{grid[i, j]:0.1f}\",\n                       ha=\"center\", va=\"center\", color=\"w\")\n\n\n\u6700\u7d42\u7684\u306b\u51fa\u529b\u3055\u308c\u308b\u30d7\u30ed\u30c3\u30c8\u304c Figure 72 \u3067\u3042\u308b\uff0e\n\n\n\nFigure 72. \u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30b0\u30ea\u30c3\u30c9\u30b5\u30fc\u30c1\u306e\u7d50\u679c\n\n\u3053\u306e\u30d7\u30ed\u30c3\u30c8\u304b\u3089\uff0c\u5dee\u306f\u50c5\u304b\u3067\u3042\u308b\u304c\uff0c\u5b66\u7fd2\u7387\u304c 0.1 \u306e\u3068\u304d\u306b\u7cbe\u5ea6\u306f\u6700\u5927\u3068\u306a\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u307e\u305f\uff0c\u5b66\u7fd2\u7387 0.1 \u306e\u3068\u304d\u306f\u30e2\u30e1\u30f3\u30bf\u30e0\u3092\u5909\u3048\u3066\u3082\u5927\u304d\u306a\u5dee\u306f\u751f\u3058\u306a\u3044\u3053\u3068\u304c\u898b\u3066\u53d6\u308c\u308b\uff0e\n\n\n\n\n\n\n\n\u4eca\u56de\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u306f\u52c9\u5f37\u7528\u306b\u6975\u3081\u3066\u5358\u7d14\u5316\u3055\u308c\u305f\u3082\u306e\u3067\u3042\u308b\u70b9\u306f\u627f\u77e5\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u305f\u3068\u3048\u3070\uff0c\u4eca\u56de\u306f\u5b66\u7fd2\u7387\u304c 0.1 \u304c\u6700\u3082\u826f\u3044\u3068\u3055\u308c\u305f\u304c\uff0c\u305d\u308c\u306f\u8a13\u7df4\u306e\u30a8\u30dd\u30c3\u30af\u3092 100 \u306b\u9650\u5b9a\u3057\u3066\u3044\u308b\u304b\u3089\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\n\u5b66\u7fd2\u7387\u304c\u4f4e\u3044\u3068\u305d\u306e\u5206\u8a13\u7df4\u306b\u5fc5\u8981\u306a\u30a8\u30dd\u30c3\u30af\u6570\u3082\u591a\u304f\u306a\u308b\uff0e\n\u8a13\u7df4\u306e\u30a8\u30dd\u30c3\u30af\u6570\u3092\u3082\u3063\u3068\u5897\u3084\u305b\u3070\u307e\u305f\u9055\u3063\u305f\u7d50\u679c\u304c\u89b3\u5bdf\u3055\u308c\u308b\u53ef\u80fd\u6027\u306f\u3042\u308b\uff0e\n\u307e\u305f\uff0c\u4eca\u56de\u306f MNIST \u306e\u8a13\u7df4\u30c7\u30fc\u30bf 60,000 \u679a\u306e\u3046\u3061\uff0c 48,000 \u679a\u3092\u8a13\u7df4\u30c7\u30fc\u30bf\uff0c\u6b8b\u308a 12,000 \u679a\u3092\u691c\u8a3c\u30c7\u30fc\u30bf\u3068\u3057\u3066\u7528\u3044\u305f\uff0e\n\u3053\u306e\u5206\u5272\u306f\u4e71\u6570\u3092\u56fa\u5b9a\u3057\u3066\u30e9\u30f3\u30c0\u30e0\u306b\u884c\u3063\u305f\u304c\uff0c\u3082\u3057\u3053\u306e\u5206\u5272\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u30d0\u30a4\u30a2\u30b9\u3092\u6c17\u306b\u3059\u308b\u306a\u3089\u3070\uff0c k \u500b\u306e\u7570\u306a\u308b\u5b66\u7fd2\u30fb\u691c\u8a3c\u30c7\u30fc\u30bf\u306e\u5206\u5272\u3092\u3042\u3089\u304b\u3058\u3081\u7528\u610f\u3057\u3066\uff0c\u8907\u6570\u56de\u30e2\u30c7\u30eb\u306e\u8a55\u4fa1\u3092\u884c\u3046 (k-fold cross-validation) \u65b9\u6cd5\u3082\uff0c\u3088\u308a\u7cbe\u7dfb\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3068\u3057\u3066\u8003\u3048\u3089\u308c\u308b\uff0e\n\n\n\n\n\u4ee5\u4e0a\u306e\u3088\u3046\u306b\u3057\u3066\uff0c CNN \u3092\u7528\u3044\u305f MNIST \u5206\u985e\u30e2\u30c7\u30eb\u306e\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u6700\u9069\u5316\u306e\u4e00\u9023\u306e\u6d41\u308c\u3092\u4f53\u9a13\u3057\u305f\uff0e\nAWS Batch \u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u6bd4\u8f03\u7684\u5c11\u306a\u3044\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067\uff0c\u52d5\u7684\u306b EC2 \u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5236\u5fa1\u3057\uff0c\u4e26\u5217\u306b\u30b8\u30e7\u30d6\u3092\u51e6\u7406\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u304c\u69cb\u7bc9\u3067\u304d\u305f\uff0e\n\u3053\u3053\u307e\u3067 EC2 \u3092\u4f7f\u3044\u3053\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u308c\u3070\uff0c\u591a\u304f\u306e\u554f\u984c\u3092\u81ea\u529b\u3067\u89e3\u304f\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308b\u3060\u308d\u3046\uff01\n\n\n9.10. \u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\n\u3053\u308c\u306b\u3066\uff0c\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\u7d42\u4e86\u3067\u3042\u308b\uff0e\u6700\u5f8c\u306b\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u4eca\u56de\u306e\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\u306b\u3042\u305f\u308a\uff0cECR \u306b\u914d\u7f6e\u3055\u308c\u305f Docker \u306e\u30a4\u30e1\u30fc\u30b8\u306f\u624b\u52d5\u3067\u524a\u9664\u3055\u308c\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\n(\u3053\u308c\u3092\u3057\u306a\u3044\u3068\uff0c cdk destroy \u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\u306b\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3057\u307e\u3046\uff0e\n\u3053\u308c\u306f CloudFormation \u306e\u4ed5\u69d8\u306a\u306e\u3067\u5f93\u3046\u3057\u304b\u306a\u3044)\uff0e\nECR \u306e Docker image \u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff0c ECR \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u304d\uff0c\u30a4\u30e1\u30fc\u30b8\u304c\u914d\u7f6e\u3055\u308c\u305f\u30ec\u30dd\u30b8\u30c8\u30ea\u3092\u958b\u304f\uff0e\n\u305d\u3057\u3066\uff0c\u753b\u9762\u53f3\u4e0a\u306e DELETE \u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u524a\u9664\u3059\u308b (Figure 73)\uff0e\n\n\n\nFigure 73. ECR \u304b\u3089 Docker image \u3092\u524a\u9664\u3059\u308b\n\n\u3042\u308b\u3044\u306f\uff0c AWS CLI \u304b\u3089\u540c\u69d8\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\uff0c\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u7528\u3044\u308b (XXXX \u306f\u81ea\u5206\u306e ECR \u30ec\u30dd\u30b8\u30c8\u30ea\u540d\u306b\u7f6e\u304d\u63db\u3048\u308b)\uff0e\n\n$ aws ecr batch-delete-image --repository-name XXXX --image-ids imageTag=latest\n\nimage \u306e\u524a\u9664\u304c\u5b8c\u4e86\u3057\u305f\u3046\u3048\u3067\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\uff0e\n\n[sec:batch_development_and_debug]\n=== \u30af\u30e9\u30a6\u30c9\u3092\u7528\u3044\u305f\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3068\u30c7\u30d0\u30c3\u30b0\n\u672c\u7ae0\u3067\u7d39\u4ecb\u3057\u305f\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c AWS Batch \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u5b66\u7fd2\u3092\u8907\u6570\u4e26\u5217\u306b\u5b9f\u884c\u3057\uff0c\u9ad8\u901f\u5316\u3092\u5b9f\u73fe\u3057\u305f\uff0e\n\u672c\u7ae0\u306e\u6700\u5f8c\u306e\u8a71\u984c\u3068\u3057\u3066\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u7528\u3044\u305f\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8ff0\u3079\u3088\u3046\uff0e\n\u30ed\u30fc\u30ab\u30eb\u306b GPU \u3092\u642d\u8f09\u3057\u305f\u5f37\u529b\u306a\u30de\u30b7\u30f3\u304c\u306a\u304f\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u4e88\u7b97\u304c\u78ba\u4fdd\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3042\u308c\u3070\uff0c Figure 74 \u306e\u3088\u3046\u306a\u958b\u767a\u306e\u30b9\u30ad\u30fc\u30e0\u304c\u7406\u60f3\u7684\u3067\u3042\u308b\u3068\u8003\u3048\u308b\uff0e\n\u6700\u521d\u306e\u6bb5\u968e\u3067\u306f\uff0c Section 6 \u3067\u898b\u305f\u3088\u3046\u306a\u65b9\u6cd5\u3067\uff0c GPU \u642d\u8f09\u578b\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3057\uff0c Jupyter Notebook \u306a\u3069\u306e\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u74b0\u5883\u3067\u69d8\u3005\u306a\u30e2\u30c7\u30eb\u3092\u8a66\u3057\u5b9f\u9a13\u3092\u884c\u3046\uff0e\nJupyter \u3067\u3042\u308b\u7a0b\u5ea6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5b8c\u6210\u3057\u3066\u304d\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u3067\uff0c\u4f5c\u6210\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092 Docker \u30a4\u30e1\u30fc\u30b8\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u30f3\u30b0\u3059\u308b\uff0e\n\u305d\u3057\u3066\uff0c EC2 \u4e0a\u3067 docker run \u3092\u884c\u3044\uff0c\u4f5c\u6210\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u30d0\u30b0\u306a\u304f\u52d5\u4f5c\u3059\u308b\u304b\u78ba\u8a8d\u3092\u884c\u3046\uff0e\n\u305d\u306e\u6b21\u306b\uff0c\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u6700\u9069\u5316\u306a\u3069\u306e\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u3092\uff0c Section 9 \u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u5b66\u3093\u3060 AWS Batch \u306a\u3069\u306e\u8a08\u7b97\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u3066\u884c\u3046\uff0e\n\u3088\u3044\u6df1\u5c64\u5b66\u7fd2\u30e2\u30c7\u30eb\u304c\u5b8c\u6210\u3057\u305f\u3089\uff0c\u4ed5\u4e0a\u3052\u306b\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u3078\u306e\u63a8\u8ad6\u51e6\u7406\u3092\u884c\u3046\u30b7\u30b9\u30c6\u30e0\u3092 Section 8 \u3092\u53c2\u8003\u306b\u69cb\u7bc9\u3059\u308b\uff0e\n\u5b9f\u969b\uff0c\u672c\u66f8\u3067\u306f\u3053\u306e\u6d41\u308c\u306b\u6cbf\u3063\u3066\u6f14\u7fd2\u3092\u9032\u3081\u3066\u304d\u305f\uff0e\nMNIST \u30bf\u30b9\u30af\u3092\u89e3\u304f\u30e2\u30c7\u30eb\u3092\uff0c\u6700\u521d Jupyter Notebook \u3092\u4f7f\u7528\u3057\u3066\u5b9f\u9a13\u3057\uff0c\u305d\u306e\u30b3\u30fc\u30c9\u3092\u307b\u3068\u3093\u3069\u305d\u306e\u307e\u307e Docker \u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3057\uff0c AWS Batch \u3092\u7528\u3044\u3066\u30cf\u30a4\u30d1\u30fc\u30d1\u30e9\u30e1\u30fc\u30bf\u30b5\u30fc\u30c1\u3092\u884c\u3063\u305f\uff0e\n\u3053\u306e\u30b5\u30a4\u30af\u30eb\u3092\u7e70\u308a\u8fd4\u3059\u3053\u3068\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3057\u305f\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\nFigure 74. \u30af\u30e9\u30a6\u30c9\u3092\u6d3b\u7528\u3057\u305f\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u30d5\u30ed\u30fc\n\n\n\n9.11. \u5c0f\u62ec\n\u3053\u3053\u307e\u3067\u304c\uff0c\u672c\u66f8\u7b2c\u4e8c\u90e8\u306e\u5185\u5bb9\u3067\u3042\u308b\uff0e\n\u7b2c\u4e00\u90e8\u306b\u5f15\u304d\u7d9a\u304d\u76db\u308a\u3060\u304f\u3055\u3093\u306e\u5185\u5bb9\u3067\u3042\u3063\u305f\u304c\uff0c\u3064\u3044\u3066\u3053\u308c\u305f\u3067\u3042\u308d\u3046\u304b\uff1f\n\u7b2c\u4e8c\u90e8\u3067\u306f\u307e\u305a\u6700\u521d\u306b\uff0c\u6df1\u5c64\u5b66\u7fd2\u306e\u8a08\u7b97\u3092\u30af\u30e9\u30a6\u30c9\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\uff0c GPU \u642d\u8f09\u578b\u306e EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\uff0e\n\u3055\u3089\u306b\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306b\u8d77\u52d5\u3057\u305f\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u3063\u3066 MNIST \u6587\u5b57\u8a8d\u8b58\u30bf\u30b9\u30af\u3092\u89e3\u304f\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u3092\u8a13\u7df4\u3057\u305f (Section 6)\uff0e\n\u307e\u305f\uff0c\u3088\u308a\u5927\u898f\u6a21\u306a\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u305f\u3081\u306e\u624b\u6bb5\u3068\u3057\u3066\uff0c Docker \u3068 ECS \u306b\u3088\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u521d\u6b69\u3092\u8aac\u660e\u3057\u305f (Section 7)\uff0e\n\u305d\u306e\u5fdc\u7528\u3068\u3057\u3066\uff0c\u82f1\u8a9e\u3067\u4e0e\u3048\u3089\u308c\u305f\u6587\u7ae0\u554f\u984c\u3078\u306e\u56de\u7b54\u3092\u81ea\u52d5\u3067\u751f\u6210\u3059\u308b\u30dc\u30c3\u30c8\u3092\u30af\u30e9\u30a6\u30c9\u306b\u5c55\u958b\u3057\u305f (Section 8)\uff0e\n\u30bf\u30b9\u30af\u306e\u6295\u5165\u306b\u5fdc\u3058\u3066\u52d5\u7684\u306b\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u304c\u4f5c\u6210\u30fb\u524a\u9664\u3055\u308c\u308b\u69d8\u5b50\u3092\u5b9f\u969b\u306b\u4f53\u9a13\u3067\u304d\u305f\u3060\u308d\u3046\uff0e\n\u3055\u3089\u306b\uff0c Section 9 \u3067\u306f AWS Batch \u3092\u7528\u3044\u3066\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u306e\u5b66\u7fd2\u3092\u4e26\u5217\u306b\u5b9f\u884c\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u305f\uff0e\n\u3053\u3053\u3067\u7d39\u4ecb\u3057\u305f\u65b9\u6cd5\u306f\uff0c\u30df\u30cb\u30de\u30e0\u3067\u3042\u308b\u304c\uff0c\u8a08\u7b97\u6a5f\u30b7\u30b9\u30c6\u30e0\u3092\u5927\u898f\u6a21\u5316\u3057\u3066\u3044\u304f\u305f\u3081\u306e\u30a8\u30c3\u30bb\u30f3\u30b9\u304c\u7db2\u7f85\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3089\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u4f53\u9a13\u304b\u3089\uff0c\u30af\u30e9\u30a6\u30c9\u6280\u8853\u3092\u5fdc\u7528\u3057\u3066\u3069\u306e\u3088\u3046\u306b\u73fe\u5b9f\u4e16\u754c\u306e\u554f\u984c\u3092\u89e3\u3044\u3066\u3044\u304f\u306e\u304b\uff0c\u306a\u3093\u3068\u306a\u304f\u30a4\u30e1\u30fc\u30b8\u304c\u4f1d\u308f\u3063\u305f\u3060\u308d\u3046\u304b\uff1f\n\u672c\u66f8\u306e\u7b2c\u4e09\u90e8\u3067\u306f\uff0c\u3055\u3089\u306b\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u3057\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u3044\u3046\u6700\u65b0\u306e\u30af\u30e9\u30a6\u30c9\u306e\u8a2d\u8a08\u624b\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3059\u308b\uff0e\n\u305d\u306e\u5fdc\u7528\u3068\u3057\u3066\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\u7c21\u5358\u306a SNS \u30b5\u30fc\u30d3\u30b9\u3092\u30bc\u30ed\u304b\u3089\u5b9f\u88c5\u3059\u308b\uff0e\n\u5f15\u304d\u7d9a\u304d\u30af\u30e9\u30a6\u30c9\u306e\u6700\u5148\u7aef\u306e\u4e16\u754c\u3092\u697d\u3057\u3093\u3067\u3044\u3053\u3046\uff01\n\n\n\n\n10. Web \u30b5\u30fc\u30d3\u30b9\u306e\u4f5c\u308a\u65b9\n\n\u3053\u3053\u304b\u3089\u304c\uff0c\u672c\u66f8\u7b2c\u4e09\u90e8\u306e\u5185\u5bb9\u306b\u306a\u308b\uff0e\n\u3053\u308c\u307e\u3067\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\uff0c\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3092\u30af\u30e9\u30a6\u30c9\u4e0a\u306b\u8d77\u52d5\u3057\uff0c\u305d\u3053\u3067\u8a08\u7b97\u3092\u8d70\u3089\u305b\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3092\u3057\u3066\u304d\u305f\uff0e\nEC2, ECS, Fargate, Batch \u306a\u3069\u3092\u5229\u7528\u3057\u3066\uff0c\u52d5\u7684\u306b\u30b9\u30b1\u30fc\u30eb\u3059\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u69cb\u6210\u3057\uff0c\u4e26\u5217\u306b\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u88c5\u3057\u3066\u304d\u305f\uff0e\n\u632f\u308a\u8fd4\u308b\u3068\uff0c\u3053\u308c\u307e\u3067\u7d39\u4ecb\u3057\u3066\u304d\u305f\u5185\u5bb9\u306f\uff0c\u81ea\u5206\u81ea\u8eab\u304c\u884c\u3044\u305f\u3044\u8a08\u7b97\u3092\u30af\u30e9\u30a6\u30c9\u3092\u99c6\u4f7f\u3059\u308b\u3053\u3068\u3067\u5b9f\u73fe\u3059\u308b\uff0c\u3068\u3044\u3046\u7528\u9014\u306b\u30d5\u30a9\u30fc\u30ab\u30b9\u3057\u3066\u3044\u305f\u3053\u3068\u306b\u6c17\u304c\u3064\u304f\u3060\u308d\u3046\uff0e\n\u4e00\u65b9\u3067\uff0c\u5e83\u304f\u4e00\u822c\u306e\u4eba\u3005\u306b\u4f7f\u3063\u3066\u3082\u3089\u3048\u308b\u3088\u3046\u306a\u8a08\u7b97\u30b5\u30fc\u30d3\u30b9\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u63d0\u4f9b\u3059\u308b\uff0c\u3068\u3044\u3046\u306e\u3082\u30af\u30e9\u30a6\u30c9\u306e\u91cd\u8981\u306a\u5f79\u5272\u3068\u3057\u3066\u6319\u3052\u3089\u308c\u308b\uff0e\n\u672c\u7ae0\u304b\u3089\u59cb\u307e\u308b\u7b2c\u4e09\u90e8\u3067\u306f\uff0c\u524d\u56de\u307e\u3067\u3068\u306f\u5c11\u3057\u65b9\u5411\u6027\u3092\u5909\u3048\uff0c\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30af\u30e9\u30a6\u30c9\u4e0a\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5c55\u958b\u3057\uff0c\u5e83\u304f\u4e00\u822c\u306e\u4eba\u306b\u4f7f\u3063\u3066\u3082\u3089\u3046\u304b\uff0c\u3068\u3044\u3046\u70b9\u3092\u8b1b\u7fa9\u3057\u305f\u3044\u3068\u601d\u3046\uff0e\n\u3053\u308c\u3092\u901a\u3058\u3066\uff0c\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u4e16\u306e\u4e2d\u306e\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u3067\u304d\u4e0a\u304c\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u77e5\u308a\uff0c\u3055\u3089\u306b\u3069\u3046\u3084\u3063\u3066\u81ea\u5206\u3067\u305d\u306e\u3088\u3046\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30bc\u30ed\u304b\u3089\u69cb\u7bc9\u3059\u308b\u306e\u304b\uff0c\u3068\u3044\u3046\u70b9\u3092\u5b66\u3093\u3067\u3082\u3089\u3046\uff0e\n\u305d\u306e\u904e\u7a0b\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u3044\u3046\u6700\u65b0\u306e\u30af\u30e9\u30a6\u30c9\u8a2d\u8a08\u624b\u6cd5\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u305d\u306e\u524d\u6e96\u5099\u3068\u3057\u3066\uff0c\u672c\u7ae0\u3067\u306f\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u51fa\u6765\u4e0a\u304c\u3063\u3066\u3044\u308b\u306e\u304b\uff0c\u305d\u306e\u80cc\u5f8c\u306b\u3042\u308b\u6280\u8853\u306e\u6982\u8981\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\u7528\u8a9e\u306e\u89e3\u8aac\u304c\u4e2d\u5fc3\u3068\u306a\u308b\u304c\uff0c\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u5fc5\u9808\u306e\u77e5\u8b58\u3067\u3042\u308b\u306e\u3067\uff0c\u7406\u89e3\u3057\u3066\u524d\u306b\u9032\u3080\u3088\u3046\u5fc3\u304c\u3051\u3088\u3046\uff0e\n\n10.1. \u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u4ed5\u7d44\u307f\u2009\u2014\u2009Twitter \u3092\u4f8b\u306b\n\u3042\u306a\u305f\u304c\u30d1\u30bd\u30b3\u30f3\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u304b\u3089 Twitter, Facebook, YouTube \u306a\u3069\u306e\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u3068\u304d\uff0c\u5b9f\u969b\u306b\u3069\u306e\u3088\u3046\u306a\u3053\u3068\u304c\u884c\u308f\u308c\uff0c\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u63d0\u793a\u3055\u308c\u3066\u3044\u308b\u306e\u3060\u308d\u3046\u304b\uff1f\nHTTP \u3092\u901a\u3058\u305f\u30b5\u30fc\u30d0\u30fc\u3068\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30c7\u30fc\u30bf\u306e\u3084\u308a\u53d6\u308a\u306f\uff0c\u3059\u3067\u306b\u77e5\u3063\u3066\u3044\u308b\u8aad\u8005\u3082\u591a\u3044\u3060\u308d\u3046\u3057\uff0c\u9006\u306b\u3059\u3079\u3066\u89e3\u8aac\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u7d19\u9762\u304c\u8db3\u308a\u306a\u3044\u306e\u3067\uff0c\u3053\u3053\u3067\u306f\u30a8\u30c3\u30bb\u30f3\u30b9\u306e\u8aac\u660e\u306e\u307f\u306b\u3068\u3069\u3081\u308b\uff0e\n\u4ee5\u964d\u3067\u306f Twitter \u3092\u5177\u4f53\u4f8b\u3068\u3057\u3066\uff0c\u80cc\u5f8c\u306b\u3042\u308b\u30b5\u30fc\u30d0\u30fc\u3068\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u9593\u306e\u901a\u4fe1\u3092\u6982\u8aac\u3057\u3088\u3046\uff0e\n\u6982\u5ff5\u56f3\u3068\u3057\u3066\u306f Figure 75 \u306e\u3088\u3046\u306a\u901a\u4fe1\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u9593\u3067\u884c\u308f\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\n\n\n\nFigure 75. \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068 Web \u30b5\u30fc\u30d0\u30fc\u306e\u901a\u4fe1\u306e\u6982\u5ff5\u56f3\n\n\u524d\u63d0\u3068\u3057\u3066\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u901a\u4fe1\u306f HTTP (Hypertext Transfer Protocol) \u3092\u4f7f\u3063\u3066\u884c\u308f\u308c\u308b\uff0e\n\u307e\u305f\uff0c\u6700\u8fd1\u3067\u306f\uff0c\u6697\u53f7\u5316\u3055\u308c\u305f HTTP \u3067\u3042\u308b HTTPS (HTTPS (Hypertext Transfer Protocol Secure)) \u3092\u7528\u3044\u308b\u3053\u3068\u304c\u30b9\u30bf\u30f3\u30c0\u30fc\u30c9\u306b\u306a\u3063\u3066\u304d\u3066\u3044\u308b\uff0e\n\u7b2c\u4e00\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f HTTP(S) \u901a\u4fe1\u306b\u3088\u3063\u3066\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u9759\u7684\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d6\u5f97\u3059\u308b\uff0e\n\u9759\u7684\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u306f\uff0c HTML (Hyptertext Markup Language) \u3067\u8a18\u8ff0\u3055\u308c\u305f\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306e\u6587\u66f8\u672c\u4f53\uff0c CSS (Cascading Style Sheets) \u3067\u8a18\u8ff0\u3055\u308c\u305f\u30da\u30fc\u30b8\u306e\u30c7\u30b6\u30a4\u30f3\u3084\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb\uff0c\u305d\u3057\u3066 JavaScript (JS) \u3067\u8a18\u8ff0\u3055\u308c\u305f\u30da\u30fc\u30b8\u306e\u52d5\u7684\u306a\u6319\u52d5\u3092\u5b9a\u7fa9\u3057\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\uff0c\u304c\u542b\u307e\u308c\u308b\uff0e\nTwitter \u3092\u542b\u3080\u73fe\u4ee3\u7684\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u8a08\u3067\u306f\uff0c\u3053\u306e\u9759\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u7fa4\u306f\u30da\u30fc\u30b8\u306e\u201d\u67a0\u201d\u3092\u5b9a\u7fa9\u3059\u308b\u3060\u3051\u3067\uff0c\u4e2d\u8eab\u3068\u306a\u308b\u30b3\u30f3\u30c6\u30f3\u30c4 (\u4f8b: \u30c4\u30a4\u30fc\u30c8\u306e\u4e00\u89a7) \u306f\u5225\u9014 API (Application Programming Interface) \u306b\u3088\u3063\u3066\u53d6\u5f97\u3055\u308c\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u305d\u3053\u3067\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u5148\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u53d6\u5f97\u3055\u308c\u305f JavaScript \u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u5f93\u3063\u3066\uff0c\u30b5\u30fc\u30d0\u30fc\u306b API \u3092\u9001\u4fe1\u3057\uff0c\u30c4\u30a4\u30fc\u30c8\u3084\u753b\u50cf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\uff0e\n\u3053\u306e\u969b\uff0c\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u3084\u308a\u53d6\u308a\u306b\u306f JSON (JavaScript Object Notation) \u3068\u3044\u3046\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u7528\u3044\u3089\u308c\u308b\u3053\u3068\u304c\u591a\u3044\uff0e\n\u753b\u50cf\u3084\u52d5\u753b\u306a\u3069\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3082\u540c\u69d8\u306bAPI\u306b\u3088\u308a\u53d6\u5f97\u3055\u308c\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\u3057\u3066\u53d6\u5f97\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3084\u753b\u50cf\u304c\uff0cHTML\u306e\u6587\u66f8\u306b\u57cb\u3081\u8fbc\u307e\u308c\u308b\u3053\u3068\u3067\uff0c\u6700\u7d42\u7684\u306b\u30e6\u30fc\u30b6\u30fc\u306b\u63d0\u793a\u3055\u308c\u308b\u30da\u30fc\u30b8\u304c\u5b8c\u6210\u3059\u308b\u306e\u3067\u3042\u308b\uff0e\n\u307e\u305f\uff0c\u65b0\u3057\u3044\u30c4\u30a4\u30fc\u30c8\u3092\u6295\u7a3f\u3059\u308b\u3068\u304d\u306b\u3082\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089 API \u3092\u901a\u3058\u3066\u30b5\u30fc\u30d0\u30fc\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30c7\u30fc\u30bf\u304c\u66f8\u304d\u8fbc\u307e\u308c\u308b\uff0e\n\n\n10.2. REST API\nAPI (Application Programming Interface) \u3068\u306f\u3053\u308c\u307e\u3067\u4f55\u5ea6\u3082\u51fa\u3066\u304d\u305f\u8a00\u8449\u3067\u3042\u308b\u304c\uff0c\u3053\u3053\u3067\u306f\u3088\u308a\u30d5\u30a9\u30fc\u30de\u30eb\u306a\u5b9a\u7fa9\u4ed8\u3051\u3092\u884c\u3046\uff0e\nAPI \u3068\u306f\u3042\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\uff0c\u5916\u90e8\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306b\u5bfe\u3057\u3066\u30b3\u30de\u30f3\u30c9\u3084\u30c7\u30fc\u30bf\u3092\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u5a92\u4ecb\u306e\u4e00\u822c\u7684\u7dcf\u79f0\u3067\u3042\u308b\uff0e\n\u3068\u304f\u306b\uff0c\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u6587\u8108\u3067\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u304c\u5916\u754c\u306b\u5bfe\u3057\u3066\u63d0\u793a\u3057\u3066\u3044\u308b\u30b3\u30de\u30f3\u30c9\u306e\u4e00\u89a7\u306e\u3053\u3068\u3092\u610f\u5473\u3059\u308b\uff0e\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\uff0c\u63d0\u793a\u3055\u308c\u3066\u3044\u308b API \u304b\u3089\u9069\u5207\u306a\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\u3053\u3068\u306b\u3088\u3063\u3066\uff0c\u6240\u671b\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u305f\u308a\uff0c\u3042\u308b\u3044\u306f\u30b5\u30fc\u30d0\u30fc\u306b\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3057\u305f\u308a\u3059\u308b\uff0e\n\u3068\u304f\u306b\uff0c\u30a6\u30a7\u30d6\u306e\u6587\u8108\u3067\u306f REST (Representational State Transfer) \u3068\u3088\u3070\u308c\u308b\u8a2d\u8a08\u601d\u60f3\u306b\u57fa\u3065\u3044\u305f API \u304c\u73fe\u5728\u3067\u306f\u6700\u3082\u4e00\u822c\u7684\u306b\u4f7f\u308f\u308c\u3066\u3044\u308b\uff0e\nREST \u306e\u8a2d\u8a08\u6307\u91dd\u306b\u5f93\u3063\u305f API \u306e\u3053\u3068\u3092 REST API \u3042\u308b\u3044\u306f RESTful API \u3068\u3088\u3093\u3060\u308a\u3059\u308b\uff0e\nREST API \u306f\uff0c Figure 76 \u306b\u793a\u3057\u305f\u3088\u3046\u306a Method \u3068 URI (Universal Resource Identifier) \u306e\u7d44\u304b\u3089\u306a\u308b\uff0e\n\n\n\nFigure 76. REST API\n\nMethod (\u30e1\u30bd\u30c3\u30c9) \u3068\u306f\uff0c\u3069\u306e\u3088\u3046\u306a\u64cd\u4f5c\u3092\u884c\u3044\u305f\u3044\u304b\u3092\u62bd\u8c61\u7684\u306b\u8868\u3059\uff0c\"\u52d5\u8a5e\" \u3068\u3057\u3066\u6349\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30e1\u30bd\u30c3\u30c9\u306b\u306f HTTP \u898f\u683c\u3067\u5b9a\u7fa9\u3055\u308c\u305f9\u500b\u306e\u52d5\u8a5e (verb) \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3053\u306e\u4e2d\u3067\u3082\uff0c GET, POST, PUT, PATCH, DELETE \u306e5\u500b\u304c\u6700\u3082\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b (Table 6)\uff0e\n\u3053\u306e5\u3064\u306e\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308b\u64cd\u4f5c\u3092\u7dcf\u79f0\u3057\u3066 CRUD (create, read, update, and delete) \u3068\u3088\u3076\uff0e\n\nTable 6. REST API Methods\n\n\n\n\n\n\n\u30e1\u30bd\u30c3\u30c9\n\u610f\u56f3\u3055\u308c\u308b\u52d5\u4f5c\n\n\n\n\nGET\n\u8981\u7d20\u3092\u53d6\u5f97\u3059\u308b\n\n\nPOST\n\u65b0\u3057\u3044\u8981\u7d20\u3092\u4f5c\u6210\u3059\u308b\n\n\nPUT\n\u65e2\u5b58\u306e\u8981\u7d20\u3092\u65b0\u3057\u3044\u8981\u7d20\u3068\u7f6e\u304d\u63db\u3048\u308b\n\n\nPATCH\n\u65e2\u5b58\u306e\u8981\u7d20\u306e\u4e00\u90e8\u3092\u66f4\u65b0\u3059\u308b\n\n\nDELETE\n\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\n\n\n\n\u4e00\u65b9\uff0c URI \u306f\u64cd\u4f5c\u304c\u884c\u308f\u308c\u308b\u5bfe\u8c61\uff0c\u3059\u306a\u308f\u3061 \"\u76ee\u7684\u8a9e\" \u3092\u8868\u3059\uff0e\n\u30a6\u30a7\u30d6\u306e\u6587\u8108\u3067\u306f\u64cd\u4f5c\u304c\u884c\u308f\u308c\u308b\u5bfe\u8c61\u306e\u3053\u3068\u3092\u3057\u3070\u3057\u3070 \u30ea\u30bd\u30fc\u30b9 \u3068\u3088\u3076\uff0e\nURI \u306f\u591a\u304f\u306e\u5834\u5408 http \u307e\u305f\u306f https \u304b\u3089\u59cb\u307e\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u306e\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u59cb\u307e\u308a\uff0c / (\u30b9\u30e9\u30c3\u30b7\u30e5) \u4ee5\u964d\u306b\u6240\u671b\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u304c\u6307\u5b9a\u3055\u308c\u308b\uff0e\nFigure 76 \u306e\u4f8b\u3067\u8a00\u3048\u3070\uff0c https://api.twitter.com \u3068\u3044\u3046\u30a2\u30c9\u30ec\u30b9\u306e /1.1/status/home_timeline \u3068\u3044\u3046\u30ea\u30bd\u30fc\u30b9\u3092\u53d6\u5f97 (GET) \u305b\u3088\uff0c\u3068\u3044\u3046\u610f\u5473\u306b\u306a\u308b\n(\u306a\u304a\uff0c\u3053\u3053\u3067 1.1 \u3068\u3044\u3046\u6570\u5b57\u306f API \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u793a\u3057\u3066\u3044\u308b)\uff0e\n\u3053\u306e API \u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3088\u3063\u3066\uff0c\u30e6\u30fc\u30b6\u30fc\u306e\u30db\u30fc\u30e0\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306e\u30c4\u30a4\u30fc\u30c8\u306e\u4e00\u89a7\u304c\u53d6\u5f97\u3055\u308c\u308b\uff0e\n\n\n\n\n\n\n\nREST API \u306e\u30e1\u30bd\u30c3\u30c9\u306b\u306f\uff0c Table 6 \u3067\u6319\u3052\u305f\u3082\u306e\u4ee5\u5916\u306b\uff0c HTTP \u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u307b\u304b\u306e\u30e1\u30bd\u30c3\u30c9 (OPTIONS, TRACE \u306a\u3069) \u3092\u7528\u3044\u308b\u3053\u3068\u3082\u3067\u304d\u308b\u304c\uff0c\u3042\u307e\u308a\u4e00\u822c\u7684\u3067\u306f\u306a\u3044\uff0e\n\u307e\u305f\uff0c\u3053\u308c\u3089\u306e\u30e1\u30bd\u30c3\u30c9\u3060\u3051\u3067\u306f\u52d5\u8a5e\u3068\u3057\u3066\u8868\u73fe\u3057\u304d\u308c\u306a\u3044\u3053\u3068\u3082\u3042\u308b\u304c\uff0c URI \u306e\u540d\u524d\u3067\u3088\u308a\u610f\u5473\u3092\u660e\u78ba\u306b\u3059\u308b\u3053\u3068\u3082\u3042\u308b\uff0e\n\u30e1\u30bd\u30c3\u30c9\u306e\u4f7f\u3044\u65b9\u3082\uff0c\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\u969b\u306f\u5fc5\u305a DELETE \u3092\u4f7f\u308f\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0c\u3068\u3044\u3046\u6c7a\u307e\u308a\u3082\u306a\u304f\uff0c\u305f\u3068\u3048\u3070\uff0c Twitter API \u3067\u30c4\u30a4\u30fc\u30c8\u3092\u6d88\u3059 API \u306f POST statuses/destroy/:id \u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\uff0e\n\u6700\u7d42\u7684\u306b\u306f\uff0c\u5404\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u516c\u958b\u3057\u3066\u3044\u308b API \u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u8aad\u3093\u3067\uff0c\u305d\u308c\u305e\u308c\u306e API \u304c\u3069\u3093\u306a\u64cd\u4f5c\u3092\u3059\u308b\u306e\u304b\u3092\u8abf\u3079\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\nREST \u306e\u6982\u5ff5\u306f2000\u5e74\u4ee3\u521d\u982d\u306b\u78ba\u7acb\u3055\u308c\uff0c\u4eca\u65e5\u306e API \u8a2d\u8a08\u306e\u30b9\u30bf\u30f3\u30c0\u30fc\u30c9\u3068\u306a\u3063\u305f\uff0e\n\u4e00\u65b9\u3067\uff0c\u30a6\u30a7\u30d6\u306e\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u304c\u9032\u6b69\u3059\u308b\u306b\u3064\u308c\u3066\uff0c\u65b0\u305f\u306a API \u306e\u8a2d\u8a08\u30a2\u30d7\u30ed\u30fc\u30c1\u306e\u9700\u8981\u3082\u9ad8\u307e\u3063\u3066\u3044\u308b\uff0e\n\u8fd1\u5e74\u3068\u304f\u306b\u4eba\u6c17\u3092\u96c6\u3081\u3066\u3044\u308b\u306e\u304c\uff0c\nGraphQL\n\u3068\u547c\u3070\u308c\u308b API \u306e\u8a2d\u8a08\u65b9\u6cd5\u3067\u3042\u308b\uff0e\nGraphQL \u306f Facebook \u793e\u306b\u3088\u3063\u3066\u6700\u521d\u306b\u4f5c\u3089\u308c\uff0c\u73fe\u5728\u306f GraghQL Foundation \u306b\u3088\u3063\u3066\u7dad\u6301\u3068\u66f4\u65b0\u304c\u3055\u308c\u3066\u3044\u308b\uff0e\nGraphQL \u3092\u4f7f\u7528\u3059\u308b\u3068\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f REST \u3068\u6bd4\u8f03\u3057\u3066\u3088\u308a\u67d4\u8edf\u6027\u306e\u9ad8\u3044\u30c7\u30fc\u30bf\u306e\u30af\u30a8\u30ea\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u306a\u3069\uff0c\u3044\u304f\u3064\u304b\u306e\u5229\u70b9\u304c\u3042\u308b\uff0e\n\u30ad\u30fc\u30ef\u30fc\u30c9\u3060\u3051\u3067\u3082\u77e5\u3063\u3066\u304a\u304f\u3068\uff0c\u4eca\u5f8c\u5f79\u306b\u7acb\u3064\u3060\u308d\u3046\uff0e\n\n\n\n\n\n\n10.3. Twitter API\n\u3082\u3046\u5c11\u3057\u5177\u4f53\u7684\u306b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306eAPI\u3092\u4f53\u9a13\u3059\u308b\u76ee\u7684\u3067\uff0c\u3053\u3053\u3067\u306f Twitter \u306eAPI\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\nTwitter \u304c\u63d0\u4f9b\u3057\u3066\u3044\u308b API \u306e\u4e00\u89a7\u306f\nTwitter \u306e Developer Documentation\n\u3067\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3044\u304f\u3064\u304b\u306e\u4ee3\u8868\u7684\u306a API \u3092 Table 7 \u306b\u307e\u3068\u3081\u305f\uff0e\n\nTable 7. Twitter API\n\n\n\n\n\n\n\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\n\u52d5\u4f5c\n\n\n\n\nGET statuses/home_timeline\n\u30db\u30fc\u30e0\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306e\u30c4\u30a4\u30fc\u30c8\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\uff0e\n\n\nGET statuses/show/:id\n:id \u3067\u6307\u5b9a\u3055\u308c\u305f\u30c4\u30a4\u30fc\u30c8\u306e\u8a73\u7d30\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\uff0e\n\n\nGET search\n\u30c4\u30a4\u30fc\u30c8\u306e\u691c\u7d22\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n\nPOST statuses/update\n\u65b0\u3057\u3044\u30c4\u30a4\u30fc\u30c8\u3092\u6295\u7a3f\u3059\u308b\uff0e\n\n\nPOST media/upload\n\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\n\n\nPOST statuses/destroy/:id\n:id \u3067\u6307\u5b9a\u3055\u308c\u305f\u30c4\u30a4\u30fc\u30c8\u3092\u524a\u9664\u3059\u308b\uff0e\n\n\nPOST statuses/retweet/:id\n:id \u3067\u6307\u5b9a\u3055\u308c\u305f\u30c4\u30a4\u30fc\u30c8\u3092\u30ea\u30c4\u30a4\u30fc\u30c8\u3059\u308b\uff0e\n\n\nPOST statuses/unretweet/:id\n:id \u3067\u6307\u5b9a\u3055\u308c\u305f\u30c4\u30a4\u30fc\u30c8\u306e\u30ea\u30c4\u30a4\u30fc\u30c8\u3092\u53d6\u308a\u6d88\u3059\uff0e\n\n\nPOST favorites/create\n\u9078\u629e\u3057\u305f\u30c4\u30a4\u30fc\u30c8\u3092\"\u3044\u3044\u306d\"\u3059\u308b\uff0e\n\n\nPOST favorites/destroy\n\u9078\u629e\u3057\u305f\u30c4\u30a4\u30fc\u30c8\u3092\"\u3044\u3044\u306d\"\u3092\u53d6\u308a\u6d88\u3059\uff0e\n\n\n\n\u3053\u306e API \u30ea\u30b9\u30c8\u3092\u3082\u3068\u306b\uff0c Twitter \u306e\u30a2\u30d7\u30ea\u307e\u305f\u306f\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u958b\u3044\u305f\u3068\u304d\u306b\u8d77\u3053\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u901a\u4fe1\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30e6\u30fc\u30b6\u30fc\u304c Twitter \u3092\u958b\u304f\u3068\uff0c\u307e\u305a\u6700\u521d\u306b  GET statuses/home_timeline \u306e API \u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3088\u3063\u3066\uff0c\u30e6\u30fc\u30b6\u30fc\u306e\u30db\u30fc\u30e0\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306e\u30c4\u30a4\u30fc\u30c8\u306e\u30ea\u30b9\u30c8\u304c\u53d6\u5f97\u3055\u308c\u308b\uff0e\n\u500b\u3005\u306e\u30c4\u30a4\u30fc\u30c8\u306f JSON \u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u306b\u306a\u3063\u3066\u304a\u308a\uff0c id, text, user, coordinates, entities \u306a\u3069\u306e\u5c5e\u6027\u3092\u542b\u3080\uff0e\nid \u306f\u30c4\u30a4\u30fc\u30c8\u306b\u56fa\u6709\u306a ID \u3092\u8868\u3057\uff0c text \u306f\u30c4\u30a4\u30fc\u30c8\u306e\u672c\u6587\u3092\u542b\u3093\u3067\u3044\u308b\uff0e\nuser \u306f\u30c4\u30a4\u30fc\u30c8\u3092\u6295\u7a3f\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u306e\u540d\u524d\u3084\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf\u306e URL \u306a\u3069\u3092\u542b\u3093\u3060 JSON \u30c7\u30fc\u30bf\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\ncoordinates \u306b\u306f\u30c4\u30a4\u30fc\u30c8\u304c\u767a\u4fe1\u3055\u308c\u305f\u5730\u7406\u7684\u306a\u5ea7\u6a19\u304c\u8a18\u9332\u3055\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c entities \u306b\u306f\u30c4\u30a4\u30fc\u30c8\u306b\u95a2\u9023\u3059\u308b\u30e1\u30c7\u30a3\u30a2\u30d5\u30a1\u30a4\u30eb (\u753b\u50cf\u306a\u3069) \u306e\u30ea\u30f3\u30af\u306a\u3069\u306e\u60c5\u5831\u304c\u57cb\u3081\u8fbc\u307e\u308c\u3066\u3044\u308b\uff0e\nGET statuses/home_timeline \u304b\u3089\u306f\u76f4\u8fd1\u306e\u30c4\u30a4\u30fc\u30c8\u306e\u30ea\u30b9\u30c8 (\u30ea\u30b9\u30c8\u304c\u9577\u3059\u304e\u308b\u5834\u5408\u306f\u9014\u4e2d\u3067\u5207\u3089\u308c\u305f\u3082\u306e) \u304c\u53d6\u5f97\u3055\u308c\u308b\uff0e\n\u3082\u3057\u30c4\u30a4\u30fc\u30c8\u306e ID \u3092\u77e5\u3063\u3066\u3044\u308b\u5834\u5408\u306f GET statuses/show/:id \u3092\u547c\u3076\u3053\u3068\u306b\u3088\u3063\u3066\uff0c :id \u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u6307\u5b9a\u3055\u308c\u305f\u7279\u5b9a\u306e\u30c4\u30a4\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30c4\u30a4\u30fc\u30c8\u306e\u691c\u7d22\u3092\u884c\u3046\u305f\u3081\u306b\u306f GET search API \u3092\u4f7f\u7528\u3059\u308b\uff0e\n\u3053\u306e API \u306b\u306f\uff0c\u30c4\u30a4\u30fc\u30c8\u306b\u542b\u307e\u308c\u308b\u5358\u8a9e\u3084\uff0c\u30cf\u30c3\u30b7\u30e5\u30bf\u30b0\uff0c\u30c4\u30a4\u30fc\u30c8\u306e\u767a\u4fe1\u3055\u308c\u305f\u65e5\u6642\u3084\u5834\u6240\u306a\u3069\uff0c\u69d8\u3005\u306a\u30af\u30a8\u30ea\u306e\u6761\u4ef6\u3092\u6e21\u3059\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nAPI \u304b\u3089\u306f\uff0c GET statuses/home_timeline \u306a\u3069\u3068\u540c\u69d8\uff0c JSON \u5f62\u5f0f\u306e\u30c4\u30a4\u30fc\u30c8\u306e\u30c7\u30fc\u30bf\u304c\u8fd4\u3055\u308c\u308b\uff0e\n\u30e6\u30fc\u30b6\u30fc\u304c\u65b0\u3057\u3044\u30c4\u30a4\u30fc\u30c8\u3092\u6295\u7a3f\u3059\u308b\u306b\u306f POST statuses/update \u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u5229\u7528\u3059\u308b\uff0e\nPOST statuses/update \u306b\u306f\uff0c\u30c4\u30a4\u30fc\u30c8\u306e\u6587\u7ae0\u3084\uff0c\u30ea\u30d7\u30e9\u30a4\u306e\u5834\u5408\u306f\u30ea\u30d7\u30e9\u30a4\u5148\u306e\u30c4\u30a4\u30fc\u30c8\u306e ID \u306a\u3069\u306e\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3059\u308b\uff0e\n\u307e\u305f\uff0c\u30c4\u30a4\u30fc\u30c8\u306b\u753b\u50cf\u30c7\u30fc\u30bf\u3092\u6dfb\u4ed8\u3057\u305f\u3044\u5834\u5408\u306f\uff0c POST media/upload \u3092\u4f75\u305b\u3066\u4f7f\u7528\u3059\u308b\uff0e\n\u30c4\u30a4\u30fc\u30c8\u306e\u524a\u9664\u3092\u884c\u3046\u306b\u306f\uff0c POST statuses/destroy/:id \u3092\u7528\u3044\u308b\uff0e\n\u305d\u306e\u307b\u304b\uff0c\u983b\u7e41\u306b\u884c\u308f\u308c\u308b\u64cd\u4f5c\u3068\u3057\u3066\u306f\uff0c POST statuses/retweet/:id \u3068 POST statuses/unretweet/:id \u304c\u3042\u308b\uff0e\n\u3053\u308c\u3089\u306f\uff0c :id \u3067\u6307\u5b9a\u3055\u308c\u308b\u30c4\u30a4\u30fc\u30c8\u306b\u5bfe\u3057\u3066\uff0c\u305d\u308c\u305e\u308c\u30ea\u30c4\u30a4\u30fc\u30c8\u3092\u5b9f\u884c\u3042\u308b\u3044\u306f\u53d6\u308a\u6d88\u3059\u305f\u3081\u306e API \u3067\u3042\u308b\uff0e\n\u307e\u305f\uff0c POST favorites/create\uff0cPOST favorites/destroy \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\uff0c\u9078\u629e\u3055\u308c\u305f\u30c4\u30a4\u30fc\u30c8\u306b\"\u3044\u3044\u306d\"\u3092\u8ffd\u52a0\u3057\u305f\u308a\uff0c\u53d6\u308a\u6d88\u3057\u305f\u308a\u3059\u308b\u64cd\u4f5c\u3092\u884c\u3046\uff0e\n\u3053\u306e\u3088\u3046\u306a\u4e00\u9023\u306e\u64cd\u4f5c\u304c\uff0c Twitter \u306e\u30a2\u30d7\u30ea\u306e\u80cc\u5f8c\u3067\u306f\u884c\u308f\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u81ea\u5206\u81ea\u8eab\u3067\u30dc\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u305f\u3044\u5834\u5408\u306f\uff0c\u3053\u308c\u3089\u306e API \u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\uff0c\u30ab\u30b9\u30bf\u30e0\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u304f\u3053\u3068\u3067\u5b9f\u73fe\u3055\u308c\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c API \u306f\u3042\u3089\u3086\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u308b\u3046\u3048\u3067\u4e00\u756a\u57fa\u790e\u3068\u306a\u308b\u8981\u7d20\u3067\u3042\u308b\uff0e\n\u6b21\u304b\u3089\u306e\u7ae0\u3067\u306f\u672c\u7ae0\u3067\u7d39\u4ecb\u3057\u305f\u7528\u8a9e\u304c\u4f55\u5ea6\u3082\u51fa\u3066\u304f\u308b\u306e\u3067\uff0c\u982d\u306e\u7247\u9685\u306b\u7f6e\u3044\u305f\u3046\u3048\u3067\u8aad\u307f\u9032\u3081\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\n\n\n\n11. Serverless architecture\n\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3 (Serverless architecture) \u3042\u308b\u3044\u306f \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 (Serverless computing) \u3068\u306f\uff0c\u5f93\u6765\u3068\u306f\u5168\u304f\u7570\u306a\u308b\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u57fa\u3065\u304f\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u65b9\u6cd5\u3067\u3042\u308b\uff0e\n\u6b74\u53f2\u7684\u306b\u306f\uff0c AWS \u304c2014\u5e74\u306b\u767a\u8868\u3057\u305f Lamba \u304c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u5148\u99c6\u3051\u3068\u3055\u308c\u3066\u3044\u308b\uff0e\n\u305d\u306e\u5f8c\uff0c Google \u3084 Microsoft \u306a\u3069\u306e\u30af\u30e9\u30a6\u30c9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3082\u540c\u69d8\u306e\u6a5f\u80fd\u306e\u63d0\u4f9b\u3092\u958b\u59cb\u3057\u3066\u3044\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u5229\u70b9\u306f\uff0c\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u5b89\u4fa1\u304b\u3064\u7c21\u6613\u306b\u4f5c\u6210\u3067\u304d\u308b\u70b9\u3067\u3042\u308a\uff0c\u8fd1\u5e74\u3044\u305f\u308b\u3068\u3053\u308d\u3067\u5c0e\u5165\u304c\u9032\u3093\u3067\u3044\u308b\uff0e\nServerless \u3068\u306f\uff0c\u6587\u5b57\u3069\u304a\u308a\u306e\u610f\u5473\u3068\u3057\u3066\u306f\u30b5\u30fc\u30d0\u30fc\u306a\u3057\u3067\u8a08\u7b97\u3092\u3059\u308b\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308b\u304c\uff0c\u305d\u308c\u306f\u4e00\u4f53\u3069\u3046\u3044\u3046\u610f\u5473\u3060\u308d\u3046\u304b\uff1f\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3059\u308b\u305f\u3081\u306b\u306f\uff0c\u307e\u305a\u306f\u5f93\u6765\u7684\u306a\uff0c \"serverful\" \u3068\u3088\u3070\u308c\u308b\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\n11.1. Serverful \u30af\u30e9\u30a6\u30c9 (\u5f93\u6765\u578b)\n\u5f93\u6765\u7684\u306a\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u30b9\u30b1\u30c3\u30c1\u3092 Figure 77 \u306b\u793a\u3059\uff0e\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u9001\u4fe1\u3055\u308c\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u306f\uff0c\u6700\u521d\u306b API \u30b5\u30fc\u30d0\u30fc\u306b\u9001\u3089\u308c\u308b\uff0e\nAPI \u30b5\u30fc\u30d0\u30fc\u3067\u306f\uff0c\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5185\u5bb9\u306b\u5fdc\u3058\u3066\u30bf\u30b9\u30af\u304c\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u30bf\u30b9\u30af\u306b\u306f\uff0cAPI\u30b5\u30fc\u30d0\u30fc\u3060\u3051\u3067\u5b8c\u7d50\u3067\u304d\u308b\u3082\u306e\u3082\u3042\u308b\u304c\uff0c\u591a\u304f\u306e\u5834\u5408\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u66f8\u304d\u304c\u5fc5\u8981\u3067\u3042\u308b\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5c02\u7528\u306e\u72ec\u7acb\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u30de\u30b7\u30f3\u304c\u7528\u3044\u3089\u308c\u308b\u3053\u3068\u304c\u4e00\u822c\u7684\u3067\u3042\u308b\uff0e\n\u307e\u305f\uff0c\u753b\u50cf\u3084\u52d5\u753b\u306a\u3069\u306e\u5bb9\u91cf\u306e\u5927\u304d\u3044\u30c7\u30fc\u30bf\u306f\uff0c\u307e\u305f\u5225\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u306b\u4fdd\u5b58\u3055\u308c\u308b\u3053\u3068\u304c\u591a\u3044\uff0e\n\u3053\u308c\u3089\u306e API\u30b5\u30fc\u30d0\u30fc\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\uff0c\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u306f\u305d\u308c\u305e\u308c\u72ec\u7acb\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u30de\u30b7\u30f3\u3067\u3042\u308a\uff0c AWS \u306e\u8a00\u8449\u3067\u306f EC2 \u306b\u3088\u308b\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u60f3\u5b9a\u3057\u3066\u3082\u3089\u3063\u305f\u3089\u3088\u3044\uff0e\n\u591a\u304f\u306e\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3067\u306f\uff0c\u591a\u6570\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3059\u308b\u305f\u3081\uff0c\u8907\u6570\u306e\u30b5\u30fc\u30d0\u30fc\u30de\u30b7\u30f3\u304c\u30af\u30e9\u30a6\u30c9\u5185\u3067\u8d77\u52d5\u3057\uff0c\u8ca0\u8377\u3092\u5206\u6563\u3059\u308b\u3088\u3046\u306a\u8a2d\u8a08\u304c\u306a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u6765\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u8a08\u7b97\u5bb9\u91cf\u306b\u4f59\u88d5\u306e\u3042\u308b\u30b5\u30fc\u30d0\u30fc\u306b\u632f\u308a\u5206\u3051\u308b\u3088\u3046\u306a\u64cd\u4f5c\u3092 Load balancing \u3068\u3088\u3073\uff0c\u305d\u306e\u3088\u3046\u306a\u64cd\u4f5c\u3092\u62c5\u5f53\u3059\u308b\u30de\u30b7\u30f3\u306e\u3053\u3068\u3092 Load balancer \u3068\u3044\u3046\uff0e\n\u8a08\u7b97\u8ca0\u8377\u3092\u5206\u6563\u3059\u308b\u76ee\u7684\u3067\u591a\u6570\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3059\u308b\u306e\u306f\u3088\u3044\u306e\u3060\u304c\uff0c\u8a08\u7b97\u8ca0\u8377\u304c\u5c0f\u3055\u3059\u304e\u3066\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u72b6\u614b\u306b\u3042\u308b\u3088\u3046\u3067\u306f\u30b3\u30b9\u30c8\u3068\u96fb\u529b\u306e\u7121\u99c4\u9063\u3044\u3067\u3042\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d0\u30fc\u304c\u5e38\u306b\u76ee\u6a19\u3068\u3059\u308b\u8a08\u7b97\u8ca0\u8377\u3092\u7dad\u6301\u3059\u308b\u3088\u3046\uff0c\u8a08\u7b97\u306e\u8ca0\u8377\u306b\u5fdc\u3058\u3066\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306e\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306e\u6570\u3092\u52d5\u7684\u306b\u5897\u6e1b\u3055\u305b\u308b\u3088\u3046\u306a\u4ed5\u7d44\u307f\u304c\u5fc5\u8981\u3067\u3042\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u4ed5\u7d44\u307f\u3092\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3068\u3088\u3073\uff0c\u8ca0\u8377\u306e\u5897\u5927\u306b\u5fdc\u7b54\u3057\u3066\u65b0\u3057\u3044\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u8ffd\u52a0\u3059\u308b\u64cd\u4f5c\u3092 scale-out\uff0c\u8ca0\u8377\u306e\u6e1b\u5c11\u306b\u5fdc\u7b54\u3057\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3059\u308b\u64cd\u4f5c\u3092 scale-in \u3068\u3088\u3076\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\uff0c API \u30b5\u30fc\u30d0\u30fc\u3067\u306f\u3082\u3061\u308d\u3093\u306e\u3053\u3068\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u30fb\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u3067\u3082\u5fc5\u8981\u306b\u306a\u308b\uff0e\n\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u3067\u306f\uff0c\u4f8b\u3048\u3070\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u9818\u57df\u306b\u4fdd\u5b58\u3057\u305f\u308a\uff0c\u30c7\u30fc\u30bf\u306e\u30b3\u30d4\u30fc\u3092\u8907\u6570\u4f5c\u308b\u306a\u3069\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u304c\u884c\u308f\u308c\u308b\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3082\u540c\u69d8\u306b\uff0c\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306e\u30a2\u30af\u30bb\u30b9\u304c\u30d1\u30f3\u30af\u3057\u3066\u3057\u307e\u308f\u306a\u3044\u3088\u3046\uff0c\u5206\u6563\u7684\u306a\u51e6\u7406\u304c\u5fc5\u8981\u3068\u306a\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u5185\u3059\u3079\u3066\u306e\u7b87\u6240\u3067\uff0c\u8ca0\u8377\u304c\u5747\u4e00\u306b\u306a\u308b\u3088\u3046\u306a\u8abf\u6574\u304c\u5fc5\u8981\u3067\u3042\u308a\uff0c\u958b\u767a\u8005\u306f\u591a\u304f\u306e\u6642\u9593\u3092\u305d\u306e\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306b\u8cbb\u3084\u3055\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u307e\u305f\uff0c\u30b5\u30fc\u30d3\u30b9\u306e\u5229\u7528\u8005\u306e\u6570\u306a\u3069\u306b\u5fdc\u3058\u3066\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a\u306f\u5e38\u306b\u898b\u76f4\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\uff0c\u7d99\u7d9a\u7684\u306a\u958b\u767a\u304c\u8981\u6c42\u3055\u308c\u308b\uff0e\n\u3055\u3089\u306b\u554f\u984c\u3092\u8907\u96d1\u306b\u3059\u308b\u306e\u306f\uff0cAPI\u30b5\u30fc\u30d0\u30fc\u3067\u51e6\u7406\u3055\u308c\u308b\u3079\u304d\u30bf\u30b9\u30af\u304c\uff0c\u975e\u4e00\u69d8\u306a\u70b9\u3067\u3042\u308b\uff0e\n\u975e\u4e00\u69d8\u3067\u3042\u308b\u3068\u306f\uff0c\u305f\u3068\u3048\u3070\u30bf\u30b9\u30afA\u306f3000\u30df\u30ea\u79d2\u306e\u5b9f\u884c\u6642\u9593\u3068 512MB \u306e\u30e1\u30e2\u30ea\u30fc\u3092\u6d88\u8cbb\u3057\uff0c\u5225\u306e\u30bf\u30b9\u30afB\u306f1000\u30df\u30ea\u79d2\u306e\u5b9f\u884c\u6642\u9593\u3068 128MB \u306e\u30e1\u30e2\u30ea\u30fc\u3092\u6d88\u8cbb\u3059\u308b\uff0c\u3068\u3044\u3046\u3088\u3046\u306a\u72b6\u6cc1\u3092\u6307\u3057\u3066\u3044\u308b\uff0e\n\u4e00\u3064\u306e\u30b5\u30fc\u30d0\u30fc\u30de\u30b7\u30f3\u304c\u8a08\u7b97\u8ca0\u8377\u304c\u7570\u306a\u308b\u8907\u6570\u306e\u30bf\u30b9\u30af\u3092\u51e6\u7406\u3059\u308b\u5834\u5408\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\u3088\u308a\u8907\u96d1\u306b\u306a\u308b\uff0e\n\u3053\u306e\u72b6\u6cc1\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u3059\u308b\u305f\u3081\u306b\uff0c\uff11\u30b5\u30fc\u30d0\u30fc\u3067\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af\u306f\uff11\u7a2e\u985e\u306b\u9650\u308b\uff0c\u3068\u3044\u3046\u8a2d\u8a08\u3082\u53ef\u80fd\u3067\u3042\u308b\u304c\uff0c\u305d\u3046\u3059\u308b\u3068\u3067\u751f\u307e\u308c\u308b\u5f0a\u5bb3\u3082\u591a\u3044\n(\u307b\u3068\u3093\u3069\u4f7f\u308f\u308c\u306a\u3044\u30bf\u30b9\u30af\u306b\u5bfe\u3057\u3066\u3082\u30b5\u30fc\u30d0\u30fc\u4e00\u53f0\u3092\u307e\u308b\u307e\u308b\u5272\u308a\u5f53\u3066\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044 = \u307b\u3068\u3093\u3069\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u72b6\u614b\u306b\u306a\u3063\u3066\u3057\u307e\u3046\uff0c\u306a\u3069)\uff0e\n\n\n\nFigure 77. Serverful \u306a\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\n\n\n\n11.2. Serverless \u30af\u30e9\u30a6\u30c9\u3078\nSection 11.1 \u3067\u8b70\u8ad6\u3057\u305f\u3088\u3046\u306b\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u7d4c\u6e08\u7684\u52b9\u7387\u3068\u30b7\u30b9\u30c6\u30e0\u306e\u5b89\u5b9a\u6027\u3092\u6700\u5927\u5316\u3059\u308b\u305f\u3081\u306b\u5fc5\u9808\u306e\u4f5c\u696d\u3067\u3042\u308b\uff0e\n\u305d\u308c\u3092\u53cd\u6620\u3057\u3066\uff0c\u591a\u304f\u306e\u958b\u767a\u8005\u306e\u6642\u9593\u304c\u6295\u8cc7\u3055\u308c\u3066\u304d\u305f\uff0e\n\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\u3059\u3079\u3066\u306e\u958b\u767a\u8005\u304c\u4f55\u5ea6\u3082\u7e70\u308a\u8fd4\u3057\u884c\u3063\u3066\u304d\u305f\u4f5c\u696d\u3067\u3042\u308a\uff0c\u3044\u304f\u3064\u304b\u306e\u5074\u9762\u3092\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5316\u3057\uff0c\u5171\u901a\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305f\u306a\u3089\u3070\u958b\u767a\u306e\u30b3\u30b9\u30c8\u3092\u5927\u5e45\u306b\u524a\u6e1b\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\u305d\u308c\u3092\u5b9f\u73fe\u3059\u308b\u306b\u306f\uff0c\u6839\u672c\u7684\u306a\u30ec\u30d9\u30eb\u304b\u3089\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u3092\u8003\u3048\u76f4\u3059\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u524d\u63d0\u3068\u3057\u3066\u8003\u3048\u308b\u3053\u3068\u3067\uff0c\u3082\u3063\u3068\u30b7\u30f3\u30d7\u30eb\u3067\u898b\u901a\u3057\u304c\u3088\u3044\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u306e\u4ed5\u7d44\u307f\u306f\u306a\u3044\u3060\u308d\u3046\u304b\uff1f\n\u305d\u306e\u3088\u3046\u306a\u52d5\u6a5f\u304c\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u8a95\u751f\u3059\u308b\u80cc\u5f8c\u306b\u3042\u3063\u305f\uff0e\n\u5f93\u6765\u306e serverful \u306a\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u6700\u5927\u306e\u554f\u984c\u70b9\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u3092\u307e\u308b\u307e\u308b\u5360\u6709\u3057\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u70b9\u306b\u3042\u308b\uff0e\n\u3059\u306a\u308f\u3061\uff0c EC2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\uff0c\u305d\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u8d77\u52d5\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u3060\u3051\u304c\u4f7f\u3048\u308b\u3082\u306e\u3067\u3042\u308a\uff0c\u8a08\u7b97\u306e\u30ea\u30bd\u30fc\u30b9 (CPU\u3084RAM) \u304c\u72ec\u5360\u7684\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u72b6\u614b\u306b\u306a\u308b\uff0e\n\u56fa\u5b9a\u3057\u305f\u8a08\u7b97\u8cc7\u6e90\u306e\u5272\u308a\u5f53\u3066\u304c\u3055\u308c\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u306e\u3067\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8a08\u7b97\u8ca0\u8377\u304c0%\u3067\u3042\u308d\u3046\u304c100%\u3067\u3042\u308d\u3046\u304c\uff0c\u5747\u4e00\u306e\u4f7f\u7528\u6599\u91d1\u304c\u8d77\u52d5\u6642\u9593\u306b\u6bd4\u4f8b\u3057\u3066\u767a\u751f\u3059\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306f\uff0c\u3053\u306e\u3088\u3046\u306a \u72ec\u5360\u7684\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u3068\u3044\u3046\u3082\u306e\u3092\u5b8c\u5168\u306b\u5ec3\u6b62\u3059\u308b\u3053\u3068\u3092\u51fa\u767a\u70b9\u3068\u3059\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306f\uff0c\u8a08\u7b97\u306e\u30ea\u30bd\u30fc\u30b9\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u3059\u3079\u3066\u7ba1\u7406\u3059\u308b\uff0e\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\uff0c\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4e00\u53f0\u307e\u308b\u3054\u3068\u501f\u308a\u308b\u306e\u3067\u306f\u306a\u304f\uff0c\u8a08\u7b97\u306e\u30bf\u30b9\u30af\u306e\u9700\u8981\u304c\u751f\u307e\u308c\u308b\u6bce\u306b\uff0c\u5b9f\u884c\u3057\u305f\u3044\u30d7\u30ed\u30b0\u30e9\u30e0\u30fb\u30b3\u30de\u30f3\u30c9\u3092\u30af\u30e9\u30a6\u30c9\u306b\u63d0\u51fa\u3059\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306f\uff0c\u81ea\u8eab\u306e\u3082\u3064\u5de8\u5927\u306a\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u304b\u3089\u7a7a\u304d\u3092\u63a2\u3057\uff0c\u63d0\u51fa\u3055\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3057\uff0c\u5b9f\u884c\u7d50\u679c\u3092\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u8fd4\u3059\uff0e\n\u8a00\u3044\u63db\u3048\u308b\u3068\uff0c\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3084\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u306a\u3069\u306f\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u4e00\u624b\u306b\u5f15\u304d\u53d7\u3051\uff0c\u30e6\u30fc\u30b6\u30fc\u306f\u30b8\u30e7\u30d6\u3092\u30b5\u30d6\u30df\u30c3\u30c8\u3059\u308b\u3053\u3068\u306b\u6ce8\u529b\u3059\u308b\uff0c\u3068\u3044\u3046\u67a0\u7d44\u307f\u3067\u3042\u308b\uff0e\n\u3053\u308c\u3092\u56f3\u793a\u3059\u308b\u3068\uff0c Figure 78 \u306e\u3088\u3046\u306b\u306a\u308b\uff0e\n\n\n\nFigure 78. \u5f93\u6765\u306e\u30af\u30e9\u30a6\u30c9\u3068 Serverless \u30af\u30e9\u30a6\u30c9\u306e\u6bd4\u8f03\n\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3067\u306f\uff0c\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\u3059\u3079\u3066\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u5f15\u304d\u53d7\u3051\u308b\u306e\u3067\uff0c\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u30fc\u304c\u4fdd\u8a3c\u3055\u308c\u3066\u3044\u308b\uff0e\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u540c\u6642\u306b\u5927\u91cf\u306e\u30bf\u30b9\u30af\u3092\u9001\u4fe1\u3057\u305f\u5834\u5408\u3067\u3082\uff0c\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u5074\u306e\u72ec\u81ea\u306e\u4ed5\u7d44\u307f\u306b\u3088\u3063\u3066\u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u304c\u9045\u5ef6\u306a\u304f\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u307e\u305f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u30b3\u30b9\u30c8\u306f\u5b9f\u969b\u306b\u4f7f\u7528\u3057\u305f\u8a08\u7b97\u306e\u7dcf\u91cf (\u7a3c\u50cd\u6642\u9593) \u3067\u6c7a\u5b9a\u3055\u308c\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\n\u3053\u308c\u306f\uff0c\u8a08\u7b97\u306e\u5b9f\u884c\u7dcf\u91cf\u306b\u95a2\u308f\u3089\u305a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u6642\u9593\u3067\u6599\u91d1\u304c\u6c7a\u5b9a\u3055\u308c\u3066\u3044\u305f\u5f93\u6765\u306e\u30b7\u30b9\u30c6\u30e0\u3068\u6bd4\u3079\u3066\u5927\u304d\u306a\u9055\u3044\u3067\u3042\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306f\uff0c\u5f93\u6765\u306e\u30af\u30e9\u30a6\u30c9\u3068\u306f\u6839\u672c\u304b\u3089\u7570\u306a\u3063\u305f\u30a2\u30d7\u30ed\u30fc\u30c1\u306a\u306e\u3067\uff0c\u30b3\u30fc\u30c9\u306e\u66f8\u304d\u65b9\u3084\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u304c\u5927\u304d\u304f\u7570\u306a\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3092\u958b\u767a\u30fb\u904b\u7528\u3059\u308b\u306b\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u56fa\u6709\u306e\u6982\u5ff5\u3084\u7528\u8a9e\u306b\u7cbe\u901a\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u4ee5\u964d\u3067\u306f\uff0c\u5b9f\u969b\u306b\u30af\u30e9\u30a6\u30c9\u3092\u52d5\u304b\u3057\u306a\u304c\u3089\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u3092\u3088\u308a\u5177\u4f53\u7684\u306b\u4f53\u9a13\u3057\u3066\u3044\u3053\u3046\uff0e\n\n\n\n\n\n\n\n\u5f93\u6765\u578b\u306e(\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u305f\u304f\u3055\u3093\u8d77\u52d5\u3059\u308b\u3088\u3046\u306a)\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306f\uff0c\u8cc3\u8cb8\u3068\u4f3c\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\n\u90e8\u5c4b\u3092\u501f\u308a\u308b\u3068\u3044\u3046\u306e\u306f\uff0c\u305d\u306e\u90e8\u5c4b\u3067\u3069\u308c\u3060\u3051\u306e\u6642\u9593\u3092\u904e\u3054\u305d\u3046\u304c\uff0c\u6708\u3005\u306e\u5bb6\u8cc3\u306f\u4e00\u5b9a\u3067\u3042\u308b\uff0e\n\u540c\u69d8\u306b\uff0c\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u3082\uff0c\u305d\u308c\u304c\u3069\u308c\u307b\u3069\u306e\u8a08\u7b97\u3092\u884c\u3063\u3066\u3044\u308b\u304b\u306b\u95a2\u308f\u3089\u305a\uff0c\u4e00\u5b9a\u306e\u6599\u91d1\u304c\u6642\u9593\u3054\u3068\u306b\u767a\u751f\u3059\u308b\uff0e\n\u4e00\u65b9\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306f\uff0c\u96fb\u6c17\u30fb\u6c34\u9053\u30fb\u30ac\u30b9\u6599\u91d1 \u3068\u4f3c\u3066\u3044\u308b\uff0e\n\u3053\u3061\u3089\u306f\uff0c\u5b9f\u969b\u306b\u4f7f\u7528\u3057\u305f\u91cf\u306b\u6bd4\u4f8b\u3057\u3066\u6599\u91d1\u304c\u6c7a\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3082\uff0c\u5b9f\u969b\u306b\u8a08\u7b97\u3092\u884c\u3063\u305f\u7dcf\u6642\u9593\u3067\u6599\u91d1\u304c\u6c7a\u307e\u308b\u4ed5\u7d44\u307f\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n11.3. \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3092\u69cb\u6210\u3059\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u6982\u8981\u304c\u308f\u304b\u3063\u3066\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u3053\u3053\u3067\u306f AWS \u306b\u304a\u3044\u3066\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3092\u69cb\u6210\u3059\u308b\u69d8\u3005\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u7d39\u4ecb\u3057\u3066\u3044\u3053\u3046\uff0e\n\u7279\u306b\uff0c Lambda, S3, DynamoDB \u3092\u53d6\u308a\u4e0a\u3052\uff0c\u89e3\u8aac\u3059\u308b (Figure 79)\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306f\uff0c\u3053\u308c\u3089\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u7d71\u5408\u3059\u308b\u3053\u3068\u3067\u4e00\u3064\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u51fa\u6765\u4e0a\u304c\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c Lambda\uff0cS3\uff0cDynamoDB \u3092\u5229\u7528\u3059\u308b\u969b\u306b\u62bc\u3055\u3048\u3066\u304a\u304b\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u77e5\u8b58\u3092\u4e00\u901a\u308a\u8aac\u660e\u3057\u304d\u308b\u90fd\u5408\u4e0a\uff0c\u5177\u4f53\u7684\u306a\u30a4\u30e1\u30fc\u30b8\u304c\u308f\u304d\u306b\u304f\u3044\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\n\u304c\uff0c\u7d9a\u304f Section 12 \u3067\u305d\u308c\u305e\u308c\u306b\u3064\u3044\u3066\u30cf\u30f3\u30ba\u30aa\u30f3\u5f62\u5f0f\u3067\u6f14\u7fd2\u3092\u884c\u3046\u306e\u3067\uff0c\u305d\u3053\u3067\u3055\u3089\u306b\u7406\u89e3\u3092\u6df1\u3081\u308c\u3070\u5927\u4e08\u592b\u3067\u3042\u308b\uff0e\n\n\n\nFigure 79. Lambda, S3, DynamoDB \u306e\u30a2\u30a4\u30b3\u30f3\n\n\n11.3.1. Lambda\nAWS \u3067\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u4e2d\u5fc3\u3092\u62c5\u3046\u306e\u304c\uff0c Lambda \u3067\u3042\u308b\uff0e\nLambda \u306e\u4f7f\u3044\u65b9\u3092 Figure 80 \u306b\u56f3\u793a\u3057\u3066\u3044\u308b\uff0e\nLambda \u306e\u4ed5\u7d44\u307f\u306f\u30b7\u30f3\u30d7\u30eb\u3067\uff0c\u307e\u305a\u30e6\u30fc\u30b6\u30fc\u306f\u5b9f\u884c\u3057\u305f\u3044\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30b3\u30fc\u30c9\u3092\u4e8b\u524d\u306b\u767b\u9332\u3057\u3066\u304a\u304f\uff0e\n\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\uff0c Python, Node.js, Ruby \u306a\u3069\u306e\u4e3b\u8981\u306a\u8a00\u8a9e\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\uff0e\nLambda \u306b\u767b\u9332\u3055\u308c\u305f\u3072\u3068\u3064\u3072\u3068\u3064\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u95a2\u6570 (Function) \u3068\u3088\u3076\uff0e\n\u305d\u3057\u3066\uff0c\u95a2\u6570\u3092\u5b9f\u884c\u3057\u305f\u3044\u3068\u304d\u306b\uff0cinvoke \u30b3\u30de\u30f3\u30c9\u3092 Lambda \u306b\u9001\u4fe1\u3059\u308b\uff0e\nLambda \u3067\u306f\uff0c invoke \u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u53d6\u308b\u3068\u305f\u3060\u3061\u306b (\u6570\u30df\u30ea\u30bb\u30ab\u30f3\u30c9\u304b\u3089\u6570\u767e\u30df\u30ea\u30bb\u30ab\u30f3\u30c9\u7a0b\u5ea6\u306e\u6642\u9593\u3067) \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u3092\u958b\u59cb\u3059\u308b\uff0e\n\u305d\u3057\u3066\uff0c\u5b9f\u884c\u7d50\u679c\u3092\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3084\u305d\u306e\u4ed6\u306e\u8a08\u7b97\u6a5f\u306b\u8fd4\u3059\uff0e\n\n\n\nFigure 80. AWS Lambda\n\n\u3053\u306e\u3088\u3046\u306b\uff0cLambda \u3067\u306f\u5360\u6709\u3055\u308c\u305f\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u5b58\u5728\u305b\u305a\uff0c\u5b9f\u884c\u3092\u5f85\u3063\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3060\u3051\u304c\u3042\u308b\u72b6\u614b\u3067\u3042\u308b\uff0e\ninvoke \u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5fdc\u3058\u3066\uff0c\u30d7\u30ed\u30b0\u30e9\u30e0\u304c AWS \u306e\u5de8\u5927\u306a\u8a08\u7b97\u6a5f\u30d7\u30fc\u30eb\u306e\u3069\u3053\u304b\u306b\u914d\u7f6e\u3055\u308c\uff0c\u5b9f\u884c\u3055\u308c\u308b\uff0e\n\u540c\u6642\u306b\u8907\u6570\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u6765\u305f\u5834\u5408\u3067\u3082\uff0c AWS \u306f\u305d\u308c\u3089\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u3092\u5272\u308a\u5f53\u3066\uff0c\u4e26\u5217\u7684\u306b\u51e6\u7406\u3092\u884c\u3063\u3066\u304f\u308c\u308b\uff0e\n\u539f\u7406\u4e0a\u306f\uff0c\u6570\u5343\u304b\u3089\u6570\u4e07\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u540c\u6642\u306b\u6765\u305f\u3068\u3057\u3066\u3082\uff0c Lambda \u306f\u305d\u308c\u3089\u3092\u540c\u6642\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306a\uff0c\u5360\u6709\u3055\u308c\u305f\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u306e\u5b58\u5728\u306a\u3057\u306b\uff0c\u52d5\u7684\u306b\u95a2\u6570\u3092\u5b9f\u884c\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u3053\u3068\u3092\u7dcf\u79f0\u3057\u3066 FaaS (Function as a Service) \u3068\u3088\u3076\uff0e\nLambda \u3067\u306f\u305d\u308c\u305e\u308c\u306e\u95a2\u6570\u306b\u3064\u304d\uff0c 128MB \u304b\u3089 10240MB \u306e\u30e1\u30e2\u30ea\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b (\u57f7\u7b46\u6642\u70b9\u306e\u4ed5\u69d8)\uff0e\n\u307e\u305f\uff0c\u5b9f\u52b9\u7684\u306a CPU \u306e\u30d1\u30ef\u30fc\u306f\u30e1\u30e2\u30ea\u30fc\u306e\u91cf\u306b\u6bd4\u4f8b\u3059\u308b\u5f62\u3067\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\n\u3059\u306a\u308f\u3061\uff0c\u30bf\u30b9\u30af\u306b\u5272\u308a\u5f53\u3066\u305f\u30e1\u30e2\u30ea\u30fc\u306e\u91cf\u304c\u591a\u3051\u308c\u3070\u591a\u3044\u307b\u3069\uff0c\u3088\u308a\u591a\u304f\u306e CPU \u30ea\u30bd\u30fc\u30b9\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u3053\u3068\u306b\u306a\u308b\n(\u3057\u304b\u3057\uff0c RAM \u3068 CPU \u30d1\u30ef\u30fc\u306e\u5177\u4f53\u7684\u306a\u63db\u7b97\u8868\u306f AWS \u304b\u3089\u306f\u516c\u958b\u3055\u308c\u3066\u3044\u306a\u3044)\uff0e\n\u5b9f\u884c\u6642\u9593\u306f100\u30df\u30ea\u79d2\u306e\u5358\u4f4d\u3067\u8a18\u9332\u3055\u308c\uff0c\u5b9f\u884c\u6642\u9593\u306b\u6bd4\u4f8b\u3057\u3066\u6599\u91d1\u304c\u6c7a\u5b9a\u3055\u308c\u308b\uff0e\nTable 8 \u306f Lambda \u306e\u5229\u7528\u6599\u91d1\u8868\u3067\u3042\u308b (\u57f7\u7b46\u6642\u70b9\u3067 ap-north-east1 \u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u9078\u629e\u3057\u305f\u5834\u5408)\uff0e\n\nTable 8. Lambda \u306e\u6599\u91d1\u8868\n\n\n\n\n\n\nMemory (MB)\nPrice per 100ms\n\n\n\n\n128\n$0.0000002083\n\n\n512\n$0.0000008333\n\n\n1024\n$0.0000016667\n\n\n3008\n$0.0000048958\n\n\n\n\u5b9f\u884c\u6642\u9593\u306b\u6bd4\u4f8b\u3059\u308b\u6599\u91d1\u306b\u8ffd\u52a0\u3057\u3066\uff0c\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b\u3054\u3068\u306b\u767a\u751f\u3059\u308b\u6599\u91d1\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u308c\u306f\uff0c\u767e\u4e07\u56de\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3064\u304d $0.2 \u3067\u3042\u308b\uff0e\n\u305f\u3068\u3048\u3070\uff0c 128MB \u306e\u30e1\u30e2\u30ea\u30fc\u3092\u4f7f\u7528\u3059\u308b\u95a2\u6570\u3092\uff0c\u305d\u308c\u305e\u308c200\u30df\u30ea\u79d2\uff0c\u5408\u8a08\u3067100\u4e07\u56de\u5b9f\u884c\u3057\u305f\u5834\u5408\uff0c\n0.0000002083 * 2 * 10^6 + 0.2 = $0.6 \u306e\u6599\u91d1\u3068\u306a\u308b\uff0e\n\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u66f4\u65b0\u306a\u3069\u7c21\u5358\u306a\u8a08\u7b97\u3067\u3042\u308c\u3070\uff0c200\u30df\u30ea\u79d2\u7a0b\u5ea6\u3067\u5b9f\u884c\u3067\u304d\u308b\u95a2\u6570\u3082\u591a\u3044\u3053\u3068\u304b\u3089\uff0c100\u4e07\u56de\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u66f4\u65b0\u3092\u884c\u3063\u305f\u3068\u3057\u3066\u3082\uff0c\u305f\u3063\u305f $0.6 \u3057\u304b\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3057\u306a\u3044\u3053\u3068\u306b\u306a\u308b\uff0e\n\u307e\u305f\uff0c\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u3055\u308c\u305a\u5f85\u6a5f\u72b6\u614b\u306b\u306a\u3063\u3066\u3044\u308b\u5834\u5408\u306f\uff0c\u767a\u751f\u3059\u308b\u6599\u91d1\u306f0\u3067\u3042\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u5b9f\u969b\u306b\u610f\u5473\u306e\u3042\u308b\u51e6\u7406\u304c\u884c\u308f\u308c\u305f\u6642\u9593\u306b\u306e\u307f\uff0c\u6599\u91d1\u304c\u767a\u751f\u3059\u308b\u4ed5\u7d44\u307f\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\nLambda \u306f\u6bd4\u8f03\u7684\u77ed\u6642\u9593\u3067\u5b8c\u4e86\u3059\u308b\uff0c\u53cd\u5fa9\u6027\u306e\u9ad8\u3044\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u306b\u5411\u3044\u3066\u3044\u308b\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u66f8\u304d\u306f\u305d\u306e\u5178\u578b\u7684\u306a\u4f8b\u3067\u3042\u308b\u304c\uff0c\u305d\u306e\u307b\u304b\u306b\u3082\uff0c\u753b\u50cf\u306e\u30b5\u30a4\u30ba\u3092\u30c8\u30ea\u30df\u30f3\u30b0\u3057\u305f\u308a\uff0c\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u3067\u5b9a\u671f\u7684\u306b\u5b9f\u884c\u3055\u308c\u308b\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u51e6\u7406\u306a\u3069\u306e\u5229\u7528\u304c\u8003\u3048\u3089\u308c\u308b\uff0e\n\u307e\u305f\uff0c\u8907\u6570\u306e Lambda \u3092\u30ea\u30ec\u30fc\u5f0f\u306b\u7e4b\u3052\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\uff0c\u30b7\u30f3\u30d7\u30eb\u306a\u51e6\u7406\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u8907\u96d1\u306a\u30ed\u30b8\u30c3\u30af\u3092\u8868\u73fe\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\u4e0a\u8ff0\u306e Lambda \u306e\u6599\u91d1\u8a08\u7b97\u306f\uff0c\u8aac\u660e\u306e\u305f\u3081\u30b3\u30b9\u30c8\u306b\u5bc4\u4e0e\u3059\u308b\u8981\u7d20\u3092\u3044\u304f\u3064\u304b\u7701\u3044\u3066\u3044\u308b\u70b9\u306f\u627f\u77e5\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u4f8b\u3048\u3070\uff0c DynamoDB \u306e\u8aad\u307f\u66f8\u304d\u306b\u95a2\u3059\u308b\u6599\u91d1\u3084\uff0c\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u901a\u4fe1\u306b\u304b\u304b\u308f\u308b\u30b3\u30b9\u30c8\u304c\u8003\u616e\u3055\u308c\u3066\u3044\u306a\u3044\uff0e\n\n\n\n\n\n\n11.3.2. \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30b9\u30c8\u30ec\u30fc\u30b8: S3\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u6982\u5ff5\u306f\uff0c\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u3082\u62e1\u5f35\u3055\u308c\u3066\u3044\u308b\uff0e\n\u5f93\u6765\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8 (\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0) \u3067\u306f\uff0c\u5fc5\u305a\u30db\u30b9\u30c8\u3068\u306a\u308b\u30de\u30b7\u30f3\u3068 OS \u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u305d\u308c\u307b\u3069\u30d1\u30ef\u30fc\u306f\u5fc5\u8981\u306a\u3044\u307e\u3067\u3082\uff0c\u3042\u308b\u7a0b\u5ea6\u306e CPU \u30ea\u30bd\u30fc\u30b9\u3092\u5272\u304b\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u307e\u305f\uff0c\u5f93\u6765\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3067\u306f\uff0c\u30c7\u30fc\u30bf\u9818\u57df\u306e\u30b5\u30a4\u30ba\u306f\u6700\u521d\u306b\u30c7\u30a3\u30b9\u30af\u3092\u521d\u671f\u5316\u3059\u308b\u3068\u304d\u306b\u6c7a\u3081\u306a\u3051\u308c\u3070\u306a\u3089\u305a\uff0c\u5f8c\u304b\u3089\u5bb9\u91cf\u3092\u5897\u52a0\u3055\u305b\u308b\u3053\u3068\u306f\u3057\u3070\u3057\u3070\u56f0\u96e3\u3067\u3042\u308b\n(ZFS \u306a\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u3048\u3070\u3042\u308b\u7a0b\u5ea6\u306f\u81ea\u7531\u306b\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u30b5\u30a4\u30ba\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3067\u3042\u308b)\uff0e\n\u3088\u3063\u3066\uff0c\u5f93\u6765\u7684\u306a\u30af\u30e9\u30a6\u30c9\u3067\u306f\uff0c\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u501f\u308a\u308b\u969b\u306b\u306f\u3042\u3089\u304b\u3058\u3081\u30c7\u30a3\u30b9\u30af\u306e\u30b5\u30a4\u30ba\u3092\u6307\u5b9a\u305b\u306d\u3070\u306a\u3089\u305a\uff0c\u30c7\u30a3\u30b9\u30af\u306e\u4e2d\u8eab\u304c\u7a7a\u3067\u3042\u308d\u3046\u3068\u6e80\u676f\u3067\u3042\u308d\u3046\u3068\uff0c\u540c\u3058\u5229\u7528\u6599\u91d1\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u306b\u306a\u308b (Figure 81)\uff0e\nSimple Storage Service (S3) \u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3059\u308b (Figure 81)\uff0e\nS3 \u306f\u5f93\u6765\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30b7\u30b9\u30c6\u30e0\u3068\u7570\u306a\u308a\uff0c OS \u306b\"\u30de\u30a6\u30f3\u30c8\u3059\u308b\u201d\u3068\u3044\u3046\u6982\u5ff5\u306f\u306a\u3044\uff0e\n\u57fa\u672c\u7684\u306b API \u3092\u901a\u3058\u3066\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\u306e\u64cd\u4f5c\u304c\u884c\u308f\u308c\u308b\uff0e\n\u307e\u305f\uff0c\u30c7\u30fc\u30bf\u306e\u5197\u9577\u5316\u3084\u6697\u53f7\u5316\uff0c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4f5c\u6210\u306a\u3069\uff0c\u901a\u5e38\u306a\u3089\u3070 OS \u3068 CPU \u304c\u4ecb\u5728\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u64cd\u4f5c\u3082\uff0c API \u3092\u901a\u3058\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nS3 \u3067\u306f\u4e8b\u524d\u306b\u6c7a\u3081\u3089\u308c\u305f\u30c7\u30a3\u30b9\u30af\u9818\u57df\u306e\u30b5\u30a4\u30ba\u306f\u306a\u304f\uff0c\u30c7\u30fc\u30bf\u3092\u5165\u308c\u308c\u3070\u5165\u308c\u305f\u5206\u3060\u3051\uff0c\u4fdd\u5b58\u9818\u57df\u306f\u62e1\u5927\u3057\u3066\u3044\u304f\n(\u4ed5\u69d8\u4e0a\u306f\u30da\u30bf\u30d0\u30a4\u30c8\u30b9\u30b1\u30fc\u30eb\u306e\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b)\uff0e\n\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u304b\u304b\u308b\u6599\u91d1\u306f\uff0c\u4fdd\u5b58\u3057\u3066\u3042\u308b\u30c7\u30fc\u30bf\u306e\u7dcf\u5bb9\u91cf\u3067\u6c7a\u5b9a\u3055\u308c\u308b\uff0e\n\n\n\nFigure 81. S3 \u3068\u5f93\u6765\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u6bd4\u8f03\n\n\n\nTable 9. S3 \u306e\u5229\u7528\u6599\u91d1\n\n\n\n\n\n\n\u9805\u76ee\n\u6599\u91d1\n\n\n\n\nData storage (First 50TB)\n$0.023 per GB per month\n\n\nPUT, COPY, POST, LIST requests (per 1,000 requests)\n$0.005\n\n\nGET, SELECT, and all other requests (per 1,000 requests)\n$0.0004\n\n\nData Transfer IN To Amazon S3 From Internet\n$0\n\n\nData Transfer OUT From Amazon S3 To Internet\n$0.09 per GB\n\n\n\n\u7b2c\u4e00\u306b\uff0c\u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\u306b\u306f $0.025 per GB \u306e\u30b3\u30b9\u30c8\u304c\u6708\u3054\u3068\u306b\u767a\u751f\u3059\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c1000GB \u306e\u30c7\u30fc\u30bf\u3092 S3 \u306b\u4e00\u30f5\u6708\u4fdd\u5b58\u3057\u305f\u5834\u5408\uff0c $25 \u306e\u6599\u91d1\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\n\u307e\u305f\uff0cPUT, COPY, POST \u306a\u3069\u306e\u30ea\u30af\u30a8\u30b9\u30c8 (=\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3080\u64cd\u4f5c) \u306b\u5bfe\u3057\u3066\u306f\uff0c\u30c7\u30fc\u30bf\u5bb9\u91cf\u306b\u95a2\u4fc2\u306a\u304f\uff0c1000\u56de\u3054\u3068\u306b $0.005 \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\nGET, SELECT \u306a\u3069\u306e\u30ea\u30af\u30a8\u30b9\u30c8 (=\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080\u64cd\u4f5c) \u306b\u5bfe\u3057\u3066\u306f\uff0c1000\u56de\u3054\u3068\u306b $0.0004 \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\u307e\u305f\uff0c S3 \u306f\u30c7\u30fc\u30bf\u3092\u5916\u306b\u53d6\u308a\u51fa\u3059\u969b\u306e\u901a\u4fe1\u306b\u3082\u30b3\u30b9\u30c8\u304c\u751f\u3058\u308b\uff0e\n\u57f7\u7b46\u6642\u70b9\u3067\u306f\uff0cS3 \u304b\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3092\u901a\u3058\u3066\u5916\u90e8\u306b\u30c7\u30fc\u30bf\u3092\u8ee2\u9001 (data-out) \u3059\u308b\u3068 $0.09 per GB \u306e\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\u30c7\u30fc\u30bf\u3092\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3092\u901a\u3058\u3066 S3 \u306b\u5165\u308c\u308b (data-in) \u901a\u4fe1\u306f\u7121\u6599\u3067\u884c\u3048\u308b\uff0e\n\u307e\u305f\uff0c AWS \u306e \u540c\u3058 Region \u5185\u306e\u30b5\u30fc\u30d3\u30b9 (Lambda \u3084 EC2 \u306a\u3069) \u306b\u30c7\u30fc\u30bf\u3092\u8ee2\u9001\u3059\u308b\u306e\u306f\u7121\u6599\u3067\u3042\u308b\uff0e\nAWS \u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u307e\u305f\u3044\u3060\u30c7\u30fc\u30bf\u306e\u8ee2\u9001\u306b\u306f\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\u3044\u305a\u308c\u306b\u305b\u3088\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u6982\u5ff5\u306b\u5247\u308a\uff0c\u3059\u3079\u3066\u306e\u6599\u91d1\u304c\u5f93\u91cf\u8ab2\u91d1\u5236\u3067\u6c7a\u5b9a\u3055\u308c\u308b\u8a2d\u5b9a\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\n\n11.3.3. \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9: DynamoDB\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u6982\u5ff5\u306f\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u3082\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3053\u3053\u3067\u3044\u3046\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306f\uff0c Web \u30b5\u30fc\u30d3\u30b9\u306a\u3069\u306b\u304a\u3051\u308b\u30e6\u30fc\u30b6\u30fc\u3084\u5546\u54c1\u306e\u60c5\u5831\u3092\u8a18\u9332\u3057\u3066\u304a\u304f\u305f\u3081\u306e\u4fdd\u5b58\u9818\u57df\u306e\u3053\u3068\u3092\u6307\u3057\u3066\u3044\u308b\uff0e\n\u5f93\u6765\u7684\u306b\u6709\u540d\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u306f\nMySQL,\nPostgreSQL,\nMongoDB\n\u306a\u3069\u304c\u6319\u3052\u3089\u308c\u308b\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u666e\u901a\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u9055\u3044\u306f\uff0c\u30c7\u30fc\u30bf\u306e\u691c\u7d22\u6a5f\u80fd\u306b\u3042\u308b\uff0e\n\u666e\u901a\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u306f\u30c7\u30fc\u30bf\u306f\u5358\u7d14\u306b\u30c7\u30a3\u30b9\u30af\u306b\u66f8\u304d\u8fbc\u307e\u308c\u308b\u3060\u3051\u3060\u304c\uff0c\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u306f\u691c\u7d22\u304c\u3088\u308a\u52b9\u7387\u7684\u306b\u306a\u308b\u3088\u3046\u306a\u30c7\u30fc\u30bf\u306e\u914d\u7f6e\u304c\u3055\u308c\u305f\u308a\uff0c\n\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306f\u30e1\u30e2\u30ea\u30fc\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u308b\u306a\u3069\u306e\u6a5f\u80fd\u304c\u5099\u308f\u3063\u3066\u3044\u308b\uff0e\n\u3053\u308c\u306b\u3088\u308a\uff0c\u5de8\u5927\u306a\u30c7\u30fc\u30bf\u306e\u4e2d\u304b\u3089\uff0c\u8208\u5473\u306e\u3042\u308b\u8981\u7d20\u3092\u9ad8\u901f\u306b\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306a\u691c\u7d22\u6a5f\u80fd\u3092\u5b9f\u73fe\u3059\u308b\u306b\u306f\uff0c\u5f53\u7136 CPU \u306e\u5b58\u5728\u304c\u5fc5\u9808\u3067\u3042\u308b\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u5f93\u6765\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u69cb\u7bc9\u3059\u308b\u969b\u306f\uff0c\u30b9\u30c8\u30ec\u30fc\u30b8\u9818\u57df\u306b\u52a0\u3048\u3066\uff0c\u305f\u304f\u3055\u3093\u306e CPU \u30b3\u30a2\u3092\u642d\u8f09\u3057\u305f\u30de\u30b7\u30f3\u304c\u7528\u3044\u3089\u308c\u308b\u3053\u3068\u304c\u591a\u3044\uff0e\n\u307e\u305f\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5de8\u5927\u306a\u5834\u5408\u306f\u8907\u6570\u30de\u30b7\u30f3\u306b\u307e\u305f\u304c\u3063\u305f\u5206\u6563\u578b\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u8a08\u3055\u308c\u308b\uff0e\n\u5206\u6563\u578b\u30b7\u30b9\u30c6\u30e0\u306e\u5834\u5408\u306f\uff0c Section 11.1 \u3067\u8b70\u8ad6\u3057\u305f\u3088\u3046\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u8ca0\u8377\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u304c\u306a\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\nDynamoDB \u306f\uff0c AWS \u304c\u63d0\u4f9b\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306a\u5206\u6563\u578b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u3067\u3042\u308b\u306e\u3067\uff0c\u5360\u6709\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7528\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u5b58\u5728\u305b\u305a\uff0c API \u3092\u901a\u3058\u3066\u30c7\u30fc\u30bf\u306e\u66f8\u304d\u8fbc\u307f\u30fb\u8aad\u307f\u51fa\u3057\u30fb\u691c\u7d22\u306a\u3069\u306e\u64cd\u4f5c\u3092\u884c\u3046\uff0e\nS3 \u3068\u540c\u69d8\u306b\uff0c\u30c7\u30fc\u30bf\u4fdd\u5b58\u9818\u57df\u306e\u4e0a\u9650\u306f\u5b9a\u3081\u3089\u308c\u3066\u304a\u3089\u305a\uff0c\u30c7\u30fc\u30bf\u3092\u5165\u308c\u308c\u3070\u5165\u308c\u305f\u5206\u3060\u3051\uff0c\u4fdd\u5b58\u9818\u57df\u306f\u62e1\u5927\u3057\u3066\u3044\u304f\uff0e\n\u307e\u305f\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u8ca0\u8377\u304c\u5897\u6e1b\u3057\u305f\u3068\u304d\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306f\uff0c DynamoDB \u304c\u81ea\u52d5\u3067\u884c\u3046\u306e\u3067\uff0c\u30e6\u30fc\u30b6\u30fc\u306f\u5fc3\u914d\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\uff0e\n\n\nTable 10. DynamoDB \u306e\u5229\u7528\u6599\u91d1\n\n\n\n\n\n\n\u9805\u76ee\n\u6599\u91d1\n\n\n\n\nWrite request units\n$1.25 per million write request units\n\n\nRead request units\n$0.25 per million read request units\n\n\nData storage\n$0.25 per GB-month\n\n\n\nDynamoDB \u3067\u306f\u30c7\u30fc\u30bf\u306e\u66f8\u304d\u8fbc\u307f\u64cd\u4f5c\u306e\u5358\u4f4d\u3092 write request unit \u3068\u3088\u3073\uff0c\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u64cd\u4f5c\u306e\u5358\u4f4d\u3092 read request unit \u3068\u3088\u3076\uff0e\n\u57fa\u672c\u7684\u306b\uff0c 1kB \u4ee5\u4e0b\u306e\u30c7\u30fc\u30bf\u3092\u4e00\u5ea6\u66f8\u304d\u8fbc\u3080\u3068 1 write request unit \u3092\u6d88\u8cbb\u3057\uff0c4kB \u4ee5\u4e0b\u306e\u30c7\u30fc\u30bf\u3092\u4e00\u5ea6\u8aad\u307f\u8fbc\u3080\u3068 1 read request unit \u3092\u6d88\u8cbb\u3059\u308b\n(\u8a73\u3057\u304f\u306f\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Read/Write Capacity Mode\"\n\u3092\u53c2\u7167\u306e\u3053\u3068)\uff0e\nwrite request units \u306f100\u4e07\u56de\u3054\u3068\u306b $1.25, read request units \u306f100\u4e07\u56de\u3054\u3068\u306b $0.25 \u306e\u30b3\u30b9\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u4fdd\u5b58\u3055\u308c\u305f\u30c7\u30fc\u30bf\u5bb9\u91cf\u306b\u5bfe\u3057\u3066 $0.25 per GB \u306e\u30b3\u30b9\u30c8\u304c\u6708\u3054\u3068\u306b\u767a\u751f\u3059\u308b\uff0e\nDynamoDB \u306f\u9ad8\u901f\u306a\u691c\u7d22\u6a5f\u80fd\u306a\u3069\u3092\u5099\u3048\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u306e\u3067\uff0c GB \u3042\u305f\u308a\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u30b3\u30b9\u30c8\u306f S3 \u306b\u6bd4\u307910\u500d\u7a0b\u5ea6\u9ad8\u3044\uff0e\nDynamoDB \u306e\u30c7\u30fc\u30bf\u306e\u8ee2\u9001\u306b\u95a2\u308f\u308b\u30b3\u30b9\u30c8\u306f\uff0c\u540c\u3058\u30ea\u30fc\u30b8\u30e7\u30f3\u5185\u306a\u3089\u3070 data-in\uff0cdata-out \u3068\u3082\u306b $0 \u3067\u3042\u308b\uff0e\n\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u307e\u305f\u3044\u3060\u901a\u4fe1\u306b\u306f\u5225\u9014\u30b3\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\uff0e\n\n\n11.3.4. \u305d\u306e\u4ed6\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u69cb\u6210\u8981\u7d20\n\u4ee5\u4e0a\u3067\u7d39\u4ecb\u3057\u305f Lambda, S3, DynamoDB \u304c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u4e2d\u3067\u6700\u3082\u4f7f\u7528\u3059\u308b\u983b\u5ea6\u304c\u9ad8\u3044\u30b5\u30fc\u30d3\u30b9\u306b\u306a\u308b\uff0e\n\u305d\u306e\u4ed6\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u69cb\u6210\u8981\u7d20\u3092\u4ee5\u4e0b\u306b\u5217\u6319\u3059\u308b\uff0e\n\u3044\u304f\u3064\u304b\u306b\u3064\u3044\u3066\u306f\uff0c\u4eca\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u884c\u3046\u4e2d\u3067\u6539\u3081\u3066\u89e3\u8aac\u3092\u884c\u3046\uff0e\n\n\n\nAPI Gateway: API \u3092\u69cb\u7bc9\u3059\u308b\u969b\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u62c5\u3046\uff0e\nSection 13 \u3067\u53d6\u308a\u4e0a\u3052\u308b\uff0e\n\n\nFargate: Section 8 \u3067\u89e6\u308c\u305f Fargate \u3082\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u8981\u7d20\u306e\u4e00\u90e8\u3067\u3042\u308b\uff0e\nLambda \u3068\u306e\u9055\u3044\u306f\uff0cLambda \u3088\u308a\u3082\u5927\u5bb9\u91cf\u306e\u30e1\u30e2\u30ea\u30fc\u3084 CPU \u3092\u8981\u3059\u308b\u3088\u3046\u306a\u8a08\u7b97\u306a\u3069\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u70b9\u304c\u6319\u3052\u3089\u308c\u308b\uff0e\n\n\nSimple Notification Service (SNS): \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u30a4\u30d9\u30f3\u30c8\u3092\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u30b5\u30fc\u30d3\u30b9\uff0e\n\n\nStep Functions: \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u30b5\u30fc\u30d3\u30b9\u9593\u306e\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u62c5\u3046\uff0e\n\n\n\n\n\n\n\n\n\n\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306f\u4e07\u80fd\u304b\uff1f\n\u3053\u306e\u554f\u3044\u3078\u306e\u7b54\u3048\u306f\uff0c\u7b46\u8005\u306f NO \u3067\u3042\u308b\u3068\u8003\u3048\u308b\uff0e\n\u3053\u3053\u307e\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u5229\u70b9\u3092\u5f37\u8abf\u3057\u3066\u8aac\u660e\u3092\u3057\u3066\u304d\u305f\u304c\uff0c\u307e\u3060\u307e\u3060\u65b0\u3057\u3044\u6280\u8853\u306a\u3060\u3051\u306b\uff0c\u6b20\u70b9\uff0c\u3042\u308b\u3044\u306f\u30b5\u30fc\u30d0\u30fc\u30d5\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u306b\u52a3\u308b\u70b9\u306f\u6570\u591a\u304f\u3042\u308b\uff0e\n\u5927\u304d\u306a\u6b20\u70b9\u3092\u4e00\u3064\u3042\u3052\u308b\u3068\u3059\u308c\u3070\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u306f\u5404\u30af\u30e9\u30a6\u30c9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u56fa\u6709\u306a\u3082\u306e\u306a\u306e\u3067\uff0c\u7279\u5b9a\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3057\u304b\u904b\u7528\u3067\u304d\u306a\u3044\u30b7\u30b9\u30c6\u30e0\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u70b9\u3067\u3042\u308d\u3046\uff0e\nAWS \u3067\u4f5c\u6210\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u3092\uff0c Google \u306e\u30af\u30e9\u30a6\u30c9\u306b\u79fb\u690d\u3059\u308b\u306b\u306f\uff0c\u304b\u306a\u308a\u5927\u639b\u304b\u308a\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u66f8\u304d\u63db\u3048\u304c\u5fc5\u8981\u306b\u306a\u308b\uff0e\n\u4e00\u65b9\uff0c serverful \u306a\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308c\u3070\uff0c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u9593\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306f\u6bd4\u8f03\u7684\u7c21\u5358\u306b\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u3057\u3066\u306f\uff0c\u81ea\u793e\u306e\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u4f9d\u5b58\u5ea6\u3092\u5f37\u3081\u308b\u3053\u3068\u3067\uff0c\u9867\u5ba2\u3092\u96e2\u3055\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u3068\u3044\u3046\u72d9\u3044\u304c\u3042\u308b\u306e\u3060\u308d\u3046\u2026\u200b\n\u305d\u306e\u4ed6\uff0c\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u6b20\u70b9\u3084\u4eca\u5f8c\u306e\u8ab2\u984c\u306a\u3069\u306f\uff0c\u6b21\u306e\u8ad6\u6587\u3067\u8a73\u3057\u304f\u8b70\u8ad6\u3055\u308c\u3066\u3044\u308b\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u305c\u3072\u8aad\u3093\u3067\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\n\n\nHellerstein et al., \"Serverless Computing: One Step Forward, Two Steps Back\" arXiv (2018)\n\n\n\n\n\n\n\n\n\n\n\n\n12. Hands-on #5: \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u5165\u9580\n\n\u524d\u7ae0\u3067\u306f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u6982\u8981\u306e\u8aac\u660e\u3092\u884c\u3063\u305f\uff0e\n\u672c\u7ae0\u3067\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u5f62\u5f0f\u3067\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u3092\u5b9f\u969b\u306b\u52d5\u304b\u3057\u306a\u304c\u3089\uff0c\u5177\u4f53\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3092\u5b66\u3093\u3067\u3044\u3053\u3046\uff0e\n\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f Lambda, S3, DynamoDB \u306e\u4e09\u3064\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u69cb\u6210\u8981\u7d20\u306b\u89e6\u308c\u3066\u3044\u304f\uff0e\n\u305d\u308c\u305e\u308c\u306b\u3064\u3044\u3066\uff0c\u77ed\u3044\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u7528\u610f\u3057\u3066\u3042\u308b\uff0e\n\n12.1. Lambda \u30cf\u30f3\u30ba\u30aa\u30f3\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b9\u30b1\u30c3\u30c1\u3092 Figure 82 \u306b\u793a\u3059\uff0e\nSTEP 1 \u3067\u306f\uff0cAWS CDK \u3092\u4f7f\u7528\u3057\u3066 Python \u3067\u66f8\u304b\u308c\u305f\u30b3\u30fc\u30c9\u3092 Lambda \u306b\u767b\u9332\u3059\u308b\uff0e\n\u7d9a\u3044\u3066 STEP 2 \u3067\u306f\uff0c Invoke API \u3092\u4f7f\u7528\u3057\u3066\uff0c\u540c\u6642\u306b\u3044\u304f\u3064\u3082\u306e Lambda \u3092\u8d77\u52d5\u3057\uff0c\u4e26\u5217\u306a\u8a08\u7b97\u3092\u884c\u3046\uff0e\nLambda \u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u4f53\u9a13\u3059\u308b\u76ee\u7684\u3067\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u3067\u3042\u308b\uff0e\n\n\n\nFigure 82. Lambda \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6982\u8981\n\n\napp.py \u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u66f8\u304b\u308c\u3066\u3044\u308b\uff0e\n\u4e2d\u8eab\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n(1)\nFUNC = \"\"\"\nimport time\nfrom random import choice, randint\ndef handler(event, context):\n    time.sleep(randint(2,5))\n    sushi = [\"salmon\", \"tuna\", \"squid\"]\n    message = \"Welcome to Cloud Sushi. Your order is \" + choice(sushi)\n    print(message)\n    return message\n\"\"\"\n\nclass SimpleLambda(core.Stack):\n\n    def __init__(self, scope: core.App, name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        (2)\n        handler = _lambda.Function(\n            self, 'LambdaHandler',\n            runtime=_lambda.Runtime.PYTHON_3_7,\n            code=_lambda.Code.from_inline(FUNC),\n            handler=\"index.handler\",\n            memory_size=128,\n            timeout=core.Duration.seconds(10),\n            dead_letter_queue_enabled=True,\n        )\n\n\n\n\n\n1\n\u3053\u3053\u3067\uff0c Lambda \u3067\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d\u95a2\u6570\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u3053\u308c\u306f\u975e\u5e38\u306b\u5358\u7d14\u306a\u95a2\u6570\u3067\uff0c2-5\u79d2\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u6642\u9593\u30b9\u30ea\u30fc\u30d7\u3057\u305f\u5f8c\uff0c[\"salmon\", \"tuna\", \"squid\"] \u306e\u3044\u305a\u308c\u304b\u306e\u6587\u5b57\u5217\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u9078\u629e\u3057\uff0c \"Welcome to Cloud Sushi. Your order is XXXX\" (XXXX \u306f\u9078\u3070\u308c\u305f\u5bff\u53f8\u306e\u30cd\u30bf) \u3068\u3044\u3046\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u30ea\u30bf\u30fc\u30f3\u3059\u308b\uff0e\n\n\n2\n\u6b21\u306b\uff0c Lambda \u306b <1> \u3067\u66f8\u3044\u305f\u95a2\u6570\u3092\u914d\u7f6e\u3057\u3066\u3044\u308b\uff0e\n\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u610f\u5473\u306f\uff0c\u6587\u5b57\u3069\u304a\u308a\u306e\u610f\u5473\u306a\u306e\u3067\u96e3\u3057\u304f\u306f\u306a\u3044\u304c\uff0c\u4ee5\u4e0b\u306b\u89e3\u8aac\u3059\u308b\uff0e\n\n\n\nruntime=_lambda.Runtime.PYTHON_3_7:\n\u3053\u3053\u3067\u306f\uff0c Python3.7 \u3092\u4f7f\u3063\u3066\u4e0a\u8a18\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u95a2\u6570\u3092\u5b9f\u884c\u305b\u3088\uff0c\u3068\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\nPython3.7 \u306e\u307b\u304b\u306b\uff0c Node.js, Java, Ruby, Go \u306a\u3069\u306e\u8a00\u8a9e\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\ncode=_lambda.Code.from_inline(FUNC):\n\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d\u95a2\u6570\u304c\u66f8\u304b\u308c\u305f\u30b3\u30fc\u30c9\u3092\u6307\u5b9a\u3059\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c FUNC=\u2026\u200b \u3067\u5b9a\u7fa9\u3057\u305f\u6587\u5b57\u5217\u3092\u6e21\u3057\u3066\u3044\u308b\u304c\uff0c\u6587\u5b57\u5217\u4ee5\u5916\u306b\u3082\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6e21\u3059\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\nhandler=\"index.handler\":\n\u3053\u308c\u306f\uff0c\u30b3\u30fc\u30c9\u306e\u4e2d\u306b\u3044\u304f\u3064\u304b\u306e\u30b5\u30d6\u95a2\u6570\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3068\u304d\u306b\uff0c\u30e1\u30a4\u30f3\u3068\u30b5\u30d6\u3092\u533a\u5225\u3059\u308b\u305f\u3081\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u3042\u308b\uff0e\nhandler \u3068\u3044\u3046\u540d\u524d\u306e\u95a2\u6570\u3092\u30e1\u30a4\u30f3\u95a2\u6570\u3068\u3057\u3066\u5b9f\u884c\u305b\u3088\uff0c\u3068\u3044\u3046\u610f\u5473\u3067\u3042\u308b\uff0e\n\n\nmemory_size=128:\n\u30e1\u30e2\u30ea\u30fc\u306f 128MB \u3092\u6700\u5927\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\n\ntimeout=core.Duration.seconds(10)\n\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u6642\u9593\u309210\u79d2\u306b\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e\n10\u79d2\u4ee5\u5185\u306b\u95a2\u6570\u306e\u5b9f\u884c\u304c\u7d42\u4e86\u3057\u306a\u304b\u3063\u305f\u5834\u5408\uff0c\u30a8\u30e9\u30fc\u304c\u8fd4\u3055\u308c\u308b\uff0e\n\n\ndead_letter_queue_enabled=True:\n\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u306a\u8a2d\u5b9a\u306a\u306e\u3067\u8aac\u660e\u306f\u7701\u7565\u3059\u308b\uff0e\n\n\n\n\n\n\n\u4e0a\u8a18\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c Lambda \u95a2\u6570\u304c\u30af\u30e9\u30a6\u30c9\u4e0a\u306b\u4f5c\u6210\u3055\u308c\u308b\uff0e\n\u65e9\u901f\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u307f\u3088\u3046\uff0e\n\n12.1.1. \u30c7\u30d7\u30ed\u30a4\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u305d\u308c\u305e\u308c\u306e\u610f\u5473\u3092\u5fd8\u308c\u3066\u3057\u307e\u3063\u305f\u5834\u5408\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f31, 2\u306b\u623b\u3063\u3066\u5fa9\u7fd2\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd handson/serverless/lambda\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy\n\n\u30c7\u30d7\u30ed\u30a4\u306e\u30b3\u30de\u30f3\u30c9\u304c\u7121\u4e8b\u306b\u5b9f\u884c\u3055\u308c\u308c\u3070\uff0c Figure 83 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b SimpleLambda.FunctionName = XXXX \u306e XXXX \u306e\u6587\u5b57\u5217\u306f\u5f8c\u3067\u4f7f\u3046\u306e\u3067\u30e1\u30e2\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\nFigure 83. CDK\u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\uff0c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30b9\u30bf\u30c3\u30af\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\uff0cLambda \u306e\u30da\u30fc\u30b8\u306b\u884c\u304f\u3068 Figure 84 \u306e\u3088\u3046\u306a\u753b\u9762\u304b\u3089 Lambda \u306e\u95a2\u6570\u306e\u4e00\u89a7\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\n\n\nFigure 84. Lambda \u30b3\u30f3\u30bd\u30fc\u30eb - \u95a2\u6570\u306e\u4e00\u89a7\n\n\u4eca\u56de\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f5c\u6210\u3057\u305f\u306e\u304c SimpleLambda \u3067\u59cb\u307e\u308b\u30e9\u30f3\u30c0\u30e0\u306a\u540d\u524d\u306e\u3064\u3044\u305f\u95a2\u6570\u3060\uff0e\n\u95a2\u6570\u306e\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\uff0c\u8a73\u7d30\u3092\u898b\u3066\u307f\u308b\uff0e\n\u3059\u308b\u3068 Figure 85 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3060\uff0e\n\u5148\u307b\u3069\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4e2d\u3067\u5b9a\u7fa9\u3057\u305fPython\u306e\u95a2\u6570\u304c\u30a8\u30c7\u30a3\u30bf\u30fc\u304b\u3089\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\u3055\u3089\u306b\u4e0b\u306e\u65b9\u306b\u30b9\u30af\u30ed\u30fc\u30eb\u3059\u308b\u3068\uff0c\u95a2\u6570\u306e\u5404\u7a2e\u8a2d\u5b9a\u3082\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\n\n\nFigure 85. Lambda \u30b3\u30f3\u30bd\u30fc\u30eb - \u95a2\u6570\u306e\u8a73\u7d30\n\n\n\n\n\n\n\n\nLambda \u3067\u5b9f\u884c\u3055\u308c\u308b\u30b3\u30fc\u30c9\u306f\uff0c Lambda \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762 (Figure 85) \u306e\u30a8\u30c7\u30a3\u30bf\u30fc\u3067\u7de8\u96c6\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\uff0e\n\u30c7\u30d0\u30c3\u30b0\u3092\u3059\u308b\u3068\u304d\u306a\u3069\u306f\uff0c\u3053\u3061\u3089\u3092\u76f4\u63a5\u3044\u3058\u308b\u65b9\u304c\u65e9\u3044\u5834\u5408\u3082\u3042\u308b\uff0e\n\u305d\u306e\u5834\u5408\u306f\uff0c CDK \u306e\u30b3\u30fc\u30c9\u306b\u884c\u3063\u305f\u7de8\u96c6\u3092\u53cd\u6620\u3055\u305b\u306a\u304a\u3059\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff0e\n\n\n\n\n\n\n12.1.2. Lambda \u95a2\u6570\u306e\u5b9f\u884c\n\u305d\u308c\u3067\u306f\uff0c\u4f5c\u6210\u3057\u305f Lambda \u95a2\u6570\u3092\u5b9f\u884c (invoke) \u3057\u3066\u307f\u3088\u3046\uff0e\nAWS \u306e API \u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c\u95a2\u6570\u306e\u5b9f\u884c\u3092\u30b9\u30bf\u30fc\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u4eca\u56de\u306f\uff0c\nhandson/serverless/lambda/invoke_one.py\n\u306b\u95a2\u6570\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u7c21\u5358\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u30b3\u30fc\u30c9\u3092\u8aad\u3093\u3067\u3082\u3089\u3044\u305f\u3044\uff0e\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\uff0cLambda \u306e\u95a2\u6570\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\u30b3\u30de\u30f3\u30c9\u306e XXXX \u306e\u90e8\u5206\u306f\uff0c\u5148\u307b\u3069\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3068\u304d\u306b SimpleLambda.FunctionName = XXXX \u3067\u5f97\u3089\u308c\u305f XXXX \u306e\u6587\u5b57\u5217\u3067\u7f6e\u63db\u3059\u308b\uff0e\n\n$ python invoke_one.py XXXX\n\n\u3059\u308b\u3068\uff0c \"Welcome to Cloud Sushi. Your order is salmon\" \u3068\u3044\u3046\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3060\uff0e\n\u3068\u3066\u3082\u30b7\u30f3\u30d7\u30eb\u3067\u306f\u3042\u308b\u304c\uff0c\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u5148\u307b\u3069\u306e\u95a2\u6570\u304c\u8d70\u308a\uff0c\u4e71\u6570\u304c\u751f\u6210\u3055\u308c\u305f\u3046\u3048\u3067\uff0c\u30e9\u30f3\u30c0\u30e0\u306a\u5bff\u53f8\u30cd\u30bf\u304c\u9078\u629e\u3055\u308c\u3066\u51fa\u529b\u304c\u8fd4\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f55\u5ea6\u304b\u6253\u3063\u3066\u307f\u3066\uff0c\u5b9f\u884c\u3054\u3068\u306b\u7570\u306a\u308b\u5bff\u53f8\u30cd\u30bf\u304c\u8fd4\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3088\u3046\uff0e\nXXXX \u306e\u90e8\u5206\u306f\u524d\u8ff0\u3068\u540c\u69d8\u306b\u7f6e\u304d\u63db\u3048\u308b\uff0e\n\u7b2c\u4e8c\u5f15\u6570\u306e 100 \u306f 100\u500b\u306e\u30bf\u30b9\u30af\u3092\u6295\u5165\u305b\u3088\uff0c\u3068\u3044\u3046\u610f\u5473\u3067\u3042\u308b\uff0e\n\n$ python invoke_many.py XXXX 100\n\n\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3060\uff0e\n\n....................................................................................................\nSubmitted 100 tasks to Lambda!\n\n\u5b9f\u969b\u306b\uff0c100 \u500b\u306e\u30bf\u30b9\u30af\u304c\u540c\u6642\u306b\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\nFigure 85 \u306e\u753b\u9762\u306b\u623b\u308a\uff0c \"Monitoring\" \u3068\u3044\u3046\u30bf\u30d6\u304c\u3042\u308b\u306e\u3067\uff0c\u305d\u308c\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\uff0e\n\u3059\u308b\u3068\uff0c Figure 86 \u306e\u3088\u3046\u306a\u30b0\u30e9\u30d5\u304c\u8868\u793a\u3055\u308c\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 86. Lambda \u30b3\u30f3\u30bd\u30fc\u30eb - \u95a2\u6570\u306e\u5b9f\u884c\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\n\n\n\n\n\n\n\n\nFigure 86 \u306e\u30b0\u30e9\u30d5\u306e\u66f4\u65b0\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308b\u306e\u3067\uff0c\u306a\u306b\u3082\u8868\u793a\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u5c11\u3057\u5f85\u3064\uff0e\n\n\n\n\nFigure 86 \u3067 \"Invocations\" \u304c\u95a2\u6570\u304c\u4f55\u5ea6\u5b9f\u884c\u3055\u308c\u305f\u304b\u3092\u610f\u5473\u3057\u3066\u3044\u308b\uff0e\n\u305f\u3057\u304b\u306b100\u56de\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u3055\u3089\u306b\uff0c \"Concurrent executions\" \u306f\u4f55\u500b\u306e\u30bf\u30b9\u30af\u304c\u540c\u6642\u306b\u884c\u308f\u308c\u305f\u304b\u3092\u793a\u3057\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\u306f 96 \u3068\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u304b\u3089\uff0c96\u500b\u306e\u30bf\u30b9\u30af\u304c\u4e26\u5217\u7684\u306b\u5b9f\u884c\u3055\u308c\u305f\u3053\u3068\u3092\u610f\u5473\u3057\u3066\u3044\u308b\n(\u3053\u308c\u304c 100 \u3068\u306a\u3089\u306a\u3044\u306e\u306f\uff0c\u30bf\u30b9\u30af\u306e\u958b\u59cb\u306e\u30b3\u30de\u30f3\u30c9\u304c\u9001\u3089\u308c\u305f\u306e\u304c\u5b8c\u5168\u306b\u306f\u540c\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u306f\u306a\u3044\u3053\u3068\u306b\u8d77\u56e0\u3059\u308b)\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u306f\u3042\u308b\u304c\uff0c Lambda \u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c\u540c\u6642\u4e26\u5217\u7684\u306b\u51e6\u7406\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306e\u3067\u304d\u308b\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u7c21\u5358\u306b\u4f5c\u308b\u3053\u3068\u304c\u3067\u304d\u305f\uff0e\n\u3082\u3057\u3053\u306e\u3088\u3046\u306a\u3053\u3068\u3092\u5f93\u6765\u7684\u306a serverful \u306a\u30af\u30e9\u30a6\u30c9\u3067\u884c\u304a\u3046\u3068\u3057\u305f\u5834\u5408\uff0c\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306a\u3069\u591a\u304f\u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u306b\u52a0\u3048\u3066\uff0c\u3044\u308d\u3044\u308d\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8abf\u7bc0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\n\n\n\u8208\u5473\u304c\u3042\u308b\u4eba\u306f\uff0c\u4e00\u6c17\u306b1000\u500b\u306a\u3069\u306e\u30b8\u30e7\u30d6\u3092\u6295\u5165\u3057\u3066\u307f\u308b\u3068\u3088\u3044\uff0e\nLambda \u306f\u305d\u306e\u3088\u3046\u306a\u5927\u91cf\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\u304c\uff0c\u3042\u307e\u308a\u3084\u308a\u3059\u304e\u308b\u3068 Lambda \u306e\u7121\u6599\u5229\u7528\u67a0\u3092\u8d85\u3048\u3066\u6599\u91d1\u304c\u767a\u751f\u3057\u3066\u3057\u307e\u3046\u306e\u3067\u6ce8\u610f\uff0e\n\n\n\n\n\n\n12.1.3. \u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\n\u6700\u5f8c\u306b\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\n\n\n\n\n12.2. DynamoDB \u30cf\u30f3\u30ba\u30aa\u30f3\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b9\u30b1\u30c3\u30c1\u3092 Figure 87 \u306b\u793a\u3059\uff0e\nSTEP 1 \u3067\u306f\uff0cAWS CDK \u3092\u4f7f\u7528\u3057\u3066 DynamoDB \u306e\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\uff0c\u30c7\u30d7\u30ed\u30a4\u3059\u308b\uff0e\n\u7d9a\u3044\u3066 STEP 2 \u3067\u306f\uff0c API \u3092\u4f7f\u7528\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u306e\u66f8\u304d\u8fbc\u307f\u30fb\u8aad\u307f\u51fa\u3057\u30fb\u524a\u9664\u306a\u3069\u306e\u64cd\u4f5c\u3092\u7df4\u7fd2\u3059\u308b\uff0e\n\n\n\nFigure 87. DynamoDB \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6982\u8981\n\n\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\nclass SimpleDynamoDb(core.Stack):\n    def __init__(self, scope: core.App, name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        table = ddb.Table(\n            self, \"SimpleTable\",\n            (1)\n            partition_key=ddb.Attribute(\n                name=\"item_id\",\n                type=ddb.AttributeType.STRING\n            ),\n            (2)\n            billing_mode=ddb.BillingMode.PAY_PER_REQUEST,\n            (3)\n            removal_policy=core.RemovalPolicy.DESTROY\n        )\n\n\n\u3053\u306e\u30b3\u30fc\u30c9\u3067\uff0c\u6700\u4f4e\u9650\u306e\u8a2d\u5b9a\u304c\u306a\u3055\u308c\u305f\u7a7a\u306e DynamoDB \u30c6\u30fc\u30d6\u30eb\u304c\u4f5c\u6210\u3055\u308c\u308b\uff0e\n\u305d\u308c\u305e\u308c\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u610f\u5473\u3092\u7c21\u5358\u306b\u89e3\u8aac\u3057\u3088\u3046\uff0e\n\n\n\n1\npartition_key:\n\u3059\u3079\u3066\u306e DynamoDB \u30c6\u30fc\u30d6\u30eb\u306b\u306f Partition key \u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\nPartition key \u3068\u306f\uff0c\u30c6\u30fc\u30d6\u30eb\u5185\u306e\u8981\u7d20 (\u30ec\u30b3\u30fc\u30c9) \u3054\u3068\u306b\u5b58\u5728\u3059\u308b\u56fa\u6709\u306eID\u306e\u3053\u3068\u3067\u3042\u308b\uff0e\n\u540c\u4e00\u306e Partition key \u3092\u3082\u3063\u305f\u8981\u7d20\u304c\u30c6\u30fc\u30d6\u30eb\u306e\u4e2d\u306b\u4e8c\u3064\u4ee5\u4e0a\u5b58\u5728\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\n(\u6ce8: Sort Key \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u9664\u304f\uff0e\u8a73\u3057\u304f\u306f \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Core Components of Amazon DynamoDB\" \u53c2\u7167)\uff0e\n\u307e\u305f\uff0c Partition key \u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u8981\u7d20\u306f\u30c6\u30fc\u30d6\u30eb\u306e\u4e2d\u306b\u5b58\u5728\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\uff0e\n\u3053\u3053\u3067\u306f\uff0c Partition key \u306b item_id \u3068\u3044\u3046\u540d\u524d\u3092\u3064\u3051\u3066\u3044\u308b\uff0e\n\n\n2\nbilling_mode:\nddb.BillingMode.PAY_PER_REQUEST \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\uff0c\nOn-demand Capacity Mode\n\u306e DynamoDB \u304c\u4f5c\u6210\u3055\u308c\u308b\uff0e\n\u307b\u304b\u306b PROVISIONED \u3068\u3044\u3046\u30e2\u30fc\u30c9\u304c\u3042\u308b\u304c\uff0c\u3053\u308c\u306f\u304b\u306a\u308a\u9ad8\u5ea6\u306a\u30b1\u30fc\u30b9\u3092\u9664\u3044\u3066\u4f7f\u7528\u3057\u306a\u3044\u3060\u308d\u3046\uff0e\n\n\n3\nremoval_policy: CloudFormation \u306e\u30b9\u30bf\u30c3\u30af\u304c\u6d88\u53bb\u3055\u308c\u305f\u3068\u304d\u306b\uff0c DynamoDB \u3082\u4e00\u7dd2\u306b\u6d88\u53bb\u3055\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b\uff0e\n\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f DESTROY \u3092\u9078\u3093\u3067\u3044\u308b\u306e\u3067\uff0c\u3059\u3079\u3066\u6d88\u53bb\u3055\u308c\u308b\uff0e\n\u307b\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\uff0c\u30b9\u30bf\u30c3\u30af\u3092\u6d88\u53bb\u3057\u3066\u3082 DynamoDB \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u6b8b\u3059\uff0c\u306a\u3069\u306e\u52d5\u4f5c\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n12.2.1. \u30c7\u30d7\u30ed\u30a4\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd handson/serverless/dynamodb\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy\n\n\u30c7\u30d7\u30ed\u30a4\u306e\u30b3\u30de\u30f3\u30c9\u304c\u7121\u4e8b\u306b\u5b9f\u884c\u3055\u308c\u308c\u3070\uff0c Figure 88 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b SimpleDynamoDb.TableName = XXXX \u306e XXXX \u306e\u6587\u5b57\u5217\u306f\u5f8c\u3067\u4f7f\u3046\u306e\u3067\u30e1\u30e2\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\nFigure 88. CDK\u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\uff0c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30b9\u30bf\u30c3\u30af\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\uff0c DynamoDB \u306e\u30da\u30fc\u30b8\u306b\u884c\u304d\uff0c\u5de6\u306e\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u304b\u3089 \"Tables\" \u3092\u9078\u629e\u3059\u308b\uff0e\n\u3059\u308b\u3068\uff0c Figure 89 \u306e\u3088\u3046\u306a\u753b\u9762\u304b\u3089\u30c6\u30fc\u30d6\u30eb\u306e\u4e00\u89a7\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\n\n\nFigure 89. DynamoDB \u306e\u30b3\u30f3\u30bd\u30fc\u30eb (\u30c6\u30fc\u30d6\u30eb\u306e\u4e00\u89a7)\n\n\u4eca\u56de\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f5c\u6210\u3057\u305f\u306e\u304c SimpleDynamoDb \u3067\u59cb\u307e\u308b\u30e9\u30f3\u30c0\u30e0\u306a\u540d\u524d\u306e\u3064\u3044\u305f\u30c6\u30fc\u30d6\u30eb\u3060\uff0e\n\u30c6\u30fc\u30d6\u30eb\u306e\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\uff0c\u8a73\u7d30\u3092\u898b\u3066\u307f\u308b\uff0e\n\u3059\u308b\u3068 Figure 90 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3060\uff0e\n\"Items\" \u306e\u30bf\u30d6\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\uff0c\u30c6\u30fc\u30d6\u30eb\u306e\u4e2d\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\u73fe\u6642\u70b9\u3067\u306f\u306a\u306b\u3082\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u306a\u3044\u306e\u3067\uff0c\u7a7a\u3067\u3042\u308b\uff0e\n\n\n\nFigure 90. DynamoDB \u306e\u30b3\u30f3\u30bd\u30fc\u30eb (\u30c6\u30fc\u30d6\u30eb\u306e\u8a73\u7d30\u753b\u9762)\n\n\n\n12.2.2. \u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\n\u305d\u308c\u3067\u306f\uff0c Section 12.2.1 \u3067\u4f5c\u3063\u305f\u30c6\u30fc\u30d6\u30eb\u3092\u4f7f\u3063\u3066\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046\uff0e\n\u3053\u3053\u3067\u306f Python \u3068 boto3 \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u7528\u3044\u305f\u65b9\u6cd5\u3092\u7d39\u4ecb\u3059\u308b\uff0e\n\u307e\u305a\u306f\uff0c\u30c6\u30fc\u30d6\u30eb\u306b\u65b0\u3057\u3044\u8981\u7d20\u3092\u8ffd\u52a0\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\nsimple_write.py\n\u3092\u958b\u3044\u3066\u307f\u3088\u3046\uff0e\n\u4e2d\u306b\u306f\u6b21\u306e\u3088\u3046\u306a\u95a2\u6570\u304c\u66f8\u304b\u308c\u3066\u3044\u308b\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\nimport boto3\nfrom uuid import uuid4\nddb = boto3.resource('dynamodb')\n\ndef write_item(table_name):\n    table = ddb.Table(table_name)\n    table.put_item(\n    Item={\n        'item_id': str(uuid4()),\n        'first_name': 'John',\n        'last_name': 'Doe',\n        'age': 25,\n        }\n    )\n\n\n\u30b3\u30fc\u30c9\u3092\u4e0a\u304b\u3089\u8aad\u3093\u3067\u3044\u304f\u3068\uff0c\u307e\u305a\u6700\u521d\u306b boto3 \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\uff0c dynamodb \u306e\u30ea\u30bd\u30fc\u30b9\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\uff0e\nwrite_item() \u95a2\u6570\u306f\uff0c DynamoDB \u306e\u30c6\u30fc\u30d6\u30eb\u306e\u540d\u524d (\u4e0a\u3067\u898b\u305fSimpleDynamoDb-XXXX) \u3092\u5f15\u6570\u3068\u3057\u3066\u53d7\u3051\u53d6\u308b\uff0e\n\u305d\u3057\u3066\uff0c put_item() \u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3076\u3053\u3068\u3067\uff0c\u65b0\u3057\u3044\u30a2\u30a4\u30c6\u30e0\u3092 DB \u306b\u66f8\u304d\u8fbc\u3093\u3067\u3044\u308b\uff0e\n\u30a2\u30a4\u30c6\u30e0\u306b\u306f item_id, first_name, last_name, age \u306e4\u3064\u306e\u5c5e\u6027\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u3053\u3067\uff0c item_id \u306f\u5148\u307b\u3069\u8aac\u660e\u3057\u305f Partition key \u306b\u76f8\u5f53\u3057\u3066\u304a\u308a\uff0c\nUUID4\n\u3092\u7528\u3044\u305f\u30e9\u30f3\u30c0\u30e0\u306a\u6587\u5b57\u5217\u3092\u5272\u308a\u5f53\u3066\u3066\u3044\u308b\uff0e\n\u3067\u306f\uff0c simple_write.py \u3092\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\n\"XXXX\" \u306e\u90e8\u5206\u3092\u81ea\u5206\u304c\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u30c6\u30fc\u30d6\u30eb\u306e\u540d\u524d (SimpleDynamoDb \u3067\u59cb\u307e\u308b\u6587\u5b57\u5217) \u306b\u7f6e\u304d\u63db\u3048\u305f\u3046\u3048\u3067\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ python simple_write.py XXXX\n\n\u65b0\u3057\u3044\u8981\u7d20\u304c\u6b63\u3057\u304f\u66f8\u304d\u8fbc\u3081\u305f\u304b\uff0c AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\nFigure 90 \u3068\u540c\u3058\u624b\u9806\u3067\uff0c\u30c6\u30fc\u30d6\u30eb\u306e\u4e2d\u8eab\u306e\u8981\u7d20\u306e\u4e00\u89a7\u3092\u8868\u793a\u3059\u308b\uff0e\n\u3059\u308b\u3068 Figure 91 \u306e\u3088\u3046\u306b\uff0c\u671f\u5f85\u901a\u308a\u65b0\u3057\u3044\u8981\u7d20\u304c\u898b\u3064\u304b\u308b\u3060\u308d\u3046\uff0e\n\n\n\nFigure 91. DynamoDB \u306b\u65b0\u3057\u3044\u8981\u7d20\u304c\u8ffd\u52a0\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\n\nboto3 \u3092\u4f7f\u3063\u3066\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u8981\u7d20\u3092\u8aad\u307f\u3060\u3059\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\nsimple_read.py\n\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\n7\nimport boto3\nddb = boto3.resource('dynamodb')\n\ndef scan_table(table_name):\n    table = ddb.Table(table_name)\n    items = table.scan().get(\"Items\")\n    print(items)\n\n\ntable.scan().get(\"Items\") \u306b\u3088\u3063\u3066\uff0c\u30c6\u30fc\u30d6\u30eb\u306e\u4e2d\u306b\u3042\u308b\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u8aad\u307f\u3060\u3057\u3066\u3044\u308b\uff0e\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\uff0c\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\n(\"XXXX\" \u306e\u90e8\u5206\u3092\u6b63\u3057\u304f\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff09\uff0e\n\n$ python simple_read.py XXXX\n\n\u5148\u307b\u3069\u66f8\u304d\u8fbc\u3093\u3060\u8981\u7d20\u304c\u51fa\u529b\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\n\n12.2.3. \u5927\u91cf\u306e\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\nDynamoDB \u306e\u5229\u70b9\u306f\uff0c\u6700\u521d\u306b\u8ff0\u3079\u305f\u3068\u304a\u308a\uff0c\u8ca0\u8377\u306b\u5fdc\u3058\u3066\u81ea\u5728\u306b\u305d\u306e\u51e6\u7406\u80fd\u529b\u3092\u62e1\u5927\u3067\u304d\u308b\u70b9\u3067\u3042\u308b\uff0e\n\u305d\u3053\u3067\uff0c\u3053\u3053\u3067\u306f\u4e00\u5ea6\u306b\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3080\u5834\u5408\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3066\u307f\u3088\u3046\uff0e\nbatch_rw.py\n\u306b\uff0c\u4e00\u5ea6\u306b\u5927\u91cf\u306e\u66f8\u304d\u8fbc\u307f\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u66f8\u3044\u3066\u3042\u308b\uff0e\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046 (XXXX \u306f\u81ea\u5206\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u540d\u524d\u306b\u7f6e\u304d\u63db\u3048\u308b)\uff0e\n\n$ python batch_rw.py XXXX write 1000\n\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c\u30e9\u30f3\u30c0\u30e0\u306a\u30c7\u30fc\u30bf\u304c1000\u500b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u8fbc\u307e\u308c\u308b\uff0e\n\u3055\u3089\u306b\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u691c\u7d22\u3092\u304b\u3051\u3066\u307f\u3088\u3046\uff0e\n\u4eca\u56de\u66f8\u304d\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u306b\u306f age \u3068\u3044\u3046\u5c5e\u6027\u306b1\u304b\u308950\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u6574\u6570\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u308b\uff0e\nage \u304c2\u4ee5\u4e0b\u3067\u3042\u308b\u3088\u3046\u306a\u8981\u7d20\u3060\u3051\u3092\u691c\u7d22\u3057\u62fe\u3063\u3066\u304f\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\n\n$ python batch_rw.py XXXX search_under_age 2\n\n\u4e0a\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f55\u56de\u304b\u7e70\u308a\u8fd4\u3057\u5b9f\u884c\u3057\u3066\u307f\u3066\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ca0\u8377\u3092\u304b\u3051\u3066\u307f\u3088\u3046\uff0e\n\u3068\u304f\u306b\u5927\u304d\u306a\u9045\u5ef6\u306a\u304f\u7d50\u679c\u304c\u8fd4\u3063\u3066\u304f\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046\uff0e\n\n\n12.2.4. \u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\nDynamoDB \u3067\u5341\u5206\u306b\u904a\u3076\u3053\u3068\u304c\u3067\u304d\u305f\u3089\uff0c\u5fd8\u308c\u305a\u306b\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u540c\u69d8\uff0c\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\n\n\n\n\n12.3. S3 \u30cf\u30f3\u30ba\u30aa\u30f3\n\nFigure 92 \u304c\u4eca\u56de\u63d0\u4f9b\u3059\u308b S3 \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6982\u8981\u3067\u3042\u308b\uff0e\nSTEP 1 \u3068\u3057\u3066\uff0c AWS CDK \u3092\u7528\u3044\u3066 S3 \u306b\u65b0\u3057\u3044\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8 (Bucket) \u3092\u4f5c\u6210\u3059\u308b\uff0e\n\u7d9a\u3044\u3066 STEP 2 \u3067\u306f\uff0c\u30c7\u30fc\u30bf\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30fb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u65b9\u6cd5\u3092\u89e3\u8aac\u3059\u308b\uff0e\n\n\n\nFigure 92. S3 \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6982\u8981\n\n\n\n\n\n\n\n\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\uff0c\u57fa\u672c\u7684\u306b S3 \u306e\u7121\u6599\u67a0 \u306e\u7bc4\u56f2\u5185\u3067\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\napp.py\n\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u66f8\u304b\u308c\u3066\u3044\u308b\uff0e\n\u4e2d\u8eab\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\nclass SimpleS3(core.Stack):\n    def __init__(self, scope: core.App, name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        # S3 bucket to store data\n        bucket = s3.Bucket(\n            self, \"bucket\",\n            removal_policy=core.RemovalPolicy.DESTROY,\n            auto_delete_objects=True,\n        )\n\n\ns3.Bucket() \u3092\u547c\u3076\u3053\u3068\u306b\u3088\u3063\u3066\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8\u304c\u65b0\u898f\u306b\u4f5c\u6210\u3055\u308c\u308b\uff0e\n\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3060\u3068\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\uff0e\n\u3082\u3057\uff0c\u81ea\u5206\u306e\u6307\u5b9a\u3057\u305f\u540d\u524d\u3092\u4e0e\u3048\u305f\u3044\u5834\u5408\u306f\uff0c bucket_name \u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6307\u5b9a\u3059\u308c\u3070\u3088\u3044\uff0e\n\u305d\u306e\u969b\uff0c \u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u306f\u30e6\u30cb\u30fc\u30af\u3067\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044 (i.e. AWS \u306e\u30c7\u30d7\u30ed\u30a4\u304c\u884c\u308f\u308c\u308b\u30ea\u30fc\u30b8\u30e7\u30f3\u5185\u3067\u540d\u524d\u306e\u91cd\u8907\u304c\u306a\u3044) \u70b9\u306b\u6ce8\u610f\u3057\u3088\u3046\uff0e\n\u3082\u3057\uff0c\u540c\u3058\u540d\u524d\u306e\u30d0\u30b1\u30c3\u30c8\u304c\u65e2\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u30a8\u30e9\u30fc\u304c\u8fd4\u3063\u3066\u304f\u308b\uff0e\n\n\n\n\n\n\n\n\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\uff0c CloudFormation \u30b9\u30bf\u30c3\u30af\u304c\u524a\u9664\u3055\u308c\u305f\u3068\u304d\uff0c S3 \u30d0\u30b1\u30c3\u30c8\u3068\u305d\u306e\u4e2d\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u524a\u9664\u3055\u308c\u306a\u3044\uff0e\n\u3053\u308c\u306f\uff0c\u5927\u5207\u306a\u30c7\u30fc\u30bf\u3092\u8aa4\u3063\u3066\u6d88\u3057\u3066\u3057\u307e\u3046\u3053\u3068\u3092\u9632\u6b62\u3059\u308b\u305f\u3081\u306e\u5b89\u5168\u7b56\u3067\u3042\u308b\uff0e\ncdk destroy \u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\u306b\u30d0\u30b1\u30c3\u30c8\u3082\u542b\u3081\u3066\u3059\u3079\u3066\u524a\u9664\u3055\u308c\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\uff0c removal_policy=core.RemovalPolicy.DESTROY, auto_delete_objects=True \u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8a2d\u5b9a\u3059\u308b\uff0e\n\u7d50\u679c\u3082\u3088\u304f\u7406\u89e3\u3057\u305f\u3046\u3048\u3067\uff0c\u81ea\u5206\u306e\u7528\u9014\u306b\u3042\u3063\u305f\u9069\u5207\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8a2d\u5b9a\u3057\u3088\u3046\uff0e\n\n\n\n\n\n12.3.1. \u30c7\u30d7\u30ed\u30a4\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd handson/serverless/s3\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy\n\n\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c Figure 93 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b SimpleS3.BucketName = XXXX \u304c\uff0c\u65b0\u3057\u304f\u4f5c\u3089\u308c\u305f\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u3067\u3042\u308b\n(\u4eca\u56de\u63d0\u4f9b\u3057\u3066\u3044\u308b\u30b3\u30fc\u30c9\u3092\u4f7f\u3046\u3068\u30e9\u30f3\u30c0\u30e0\u306a\u540d\u524d\u304c\u30d0\u30b1\u30c3\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff09\uff0e\n\u3053\u308c\u306f\u3042\u3068\u3067\u4f7f\u3046\u306e\u3067\u30e1\u30e2\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\nFigure 93. \u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\n\n\n12.3.2. \u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\n\u30b9\u30bf\u30c3\u30af\u306e\u30c7\u30d7\u30ed\u30a4\u304c\u5b8c\u4e86\u3057\u305f\u3089\uff0c\u65e9\u901f\u30d0\u30b1\u30c3\u30c8\u306b\u30c7\u30fc\u30bf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3066\u307f\u3088\u3046\uff0e\n\u307e\u305a\u306f\uff0c\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\uff0c tmp.txt \u3068\u3044\u3046\u4eee\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b\uff0e\n\n$ echo \"Hello world!\" >> tmp.txt\n\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\nsimple_s3.py\n\u306b\nboto3\n\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3057\u305f S3 \u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30fb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u66f8\u3044\u3066\u3042\u308b\uff0e\nsimple_s3.py \u3092\u4f7f\u3063\u3066\uff0c\u4e0a\u3067\u4f5c\u6210\u3057\u305f tmp.txt \u3092\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\uff0e\nXXXX \u306e\u3068\u3053\u308d\u306f\uff0c\u81ea\u5206\u81ea\u8eab\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u3067\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\uff0e\n\n$ python simple_s3.py XXXX upload tmp.txt\n\nsimple_s3.py \u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u62c5\u5f53\u3057\u3066\u3044\u308b\u90e8\u5206\u3092\u4ee5\u4e0b\u306b\u629c\u7c8b\u3059\u308b\uff0e\n\n1\n2\n3\n4\n5\n6\n7\ndef upload_file(bucket_name, filename, key=None):\n    bucket = s3.Bucket(bucket_name)\n\n    if key is None:\n        key = os.path.basename(filename)\n\n    bucket.upload_file(filename, key)\n\n\nbucket = s3.Bucket(bucket_name) \u306e\u884c\u3067 Bucket() \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\uff0e\n\u305d\u3057\u3066\uff0c upload_file() \u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3076\u3053\u3068\u3067\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\uff0e\nS3 \u306b\u304a\u3044\u3066\u30d5\u30a1\u30a4\u30eb\u306e\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u308f\u308c\u308b\u306e\u304c Key \u3067\u3042\u308b\uff0e\n\u3053\u308c\u306f\uff0c\u5f93\u6765\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u30d1\u30b9 (Path) \u3068\u76f8\u540c\u306a\u6982\u5ff5\u3067\uff0c\u305d\u308c\u305e\u308c\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u56fa\u6709\u306a Key \u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\nKey \u3068\u3044\u3046\u547c\u3073\u65b9\u306f\uff0c S3 \u304c Object storage \u3068\u547c\u3070\u308c\u308b\u30b7\u30b9\u30c6\u30e0\u306b\u7acb\u811a\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u7531\u6765\u3059\u308b\uff0e\n--key \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3057\u3066 simple_s3.py \u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c Key \u3092\u6307\u5b9a\u3057\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n$ python simple_s3.py XXXX upload tmp.txt --key a/b/tmp.txt\n\n\u3053\u3053\u3067\u306f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306b a/b/tmp.txt \u3068\u3044\u3046 Key \u3092\u5272\u308a\u5f53\u3066\u3066\u3044\u308b\uff0e\n\u3053\u3053\u307e\u3067\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u7d42\u3048\u305f\u3068\u3053\u308d\u3067\uff0c\u4e00\u5ea6 AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u304d S3 \u306e\u4e2d\u8eab\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\nS3 \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u304f\u3068\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e00\u89a7\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u305d\u306e\u4e2d\u304b\u3089\uff0c simples3-bucket \u304b\u3089\u59cb\u307e\u308b\u30e9\u30f3\u30c0\u30e0\u306a\u540d\u524d\u306e\u3064\u3044\u305f\u30d0\u30b1\u30c3\u30c8\u3092\u63a2\u3057\uff0c\u30af\u30ea\u30c3\u30af\u3059\u308b\uff0e\n\u3059\u308b\u3068\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u306b\u542b\u307e\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u89a7\u304c\u8868\u793a\u3055\u308c\u308b (Figure 94)\uff0e\n\n\n\nFigure 94. S3 \u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u306e\u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\n\n\u3053\u3053\u3067\u5b9f\u884c\u3057\u305f2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u3063\u3066\uff0c tmp.txt \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3068\uff0c a/b/tmp.txt \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308b\u3053\u3068\u306b\u6ce8\u76ee\u3057\u3088\u3046\uff0e\n\u5f93\u6765\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3068\u4f3c\u305f\u4f53\u9a13\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\uff0c S3 \u3067\u306f Key \u304c \"/\" (\u30b9\u30e9\u30c3\u30b7\u30e5) \u306b\u3088\u3063\u3066\u533a\u5207\u3089\u308c\u3066\u3044\u305f\u5834\u5408\uff0c\u30c4\u30ea\u30fc\u72b6\u306e\u968e\u5c64\u69cb\u9020\u306b\u3088\u3063\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u306f\u672c\u6765\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u3044\u3046\u6982\u5ff5\u306f\u306a\u3044\uff0e\n\u4e0a\u3067\u7d39\u4ecb\u3057\u305f \"/\" \u306b\u3088\u308b\u968e\u5c64\u3065\u3051\u306f\u3042\u304f\u307e\u3067\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u5411\u4e0a\u306e\u76ee\u7684\u306e\u304a\u5316\u7ca7\u7684\u306a\u6a5f\u80fd\u3067\u3042\u308b\uff0e\n\n\n\n\n\u6b21\u306b\uff0c\u30d0\u30b1\u30c3\u30c8\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\nsimple_s3.py \u3092\u4f7f\u3063\u3066\uff0c\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\nXXXX \u306e\u3068\u3053\u308d\u306f\uff0c\u81ea\u5206\u81ea\u8eab\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u3067\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\uff0e\n\n$ python simple_s3.py XXXX download tmp.txt\n\nsimple_s3.py \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u62c5\u5f53\u3057\u3066\u3044\u308b\u90e8\u5206\u3092\u4ee5\u4e0b\u306b\u629c\u7c8b\u3059\u308b\uff0e\n\n1\n2\n3\n4\n5\n6\n7\ndef download_file(bucket_name, key, filename=None):\n    bucket = s3.Bucket(bucket_name)\n\n    if filename is None:\n        filename = os.path.basename(key)\n\n    bucket.download_file(key, filename)\n\n\nS3 \u304b\u3089\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306f\u30b7\u30f3\u30d7\u30eb\u3067\uff0c download_file() \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u3066\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044\u5bfe\u8c61\u306e Key \u3092\u6307\u5b9a\u3059\u308c\u3070\u3088\u3044\uff0e\n\u30ed\u30fc\u30ab\u30eb\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3067\u306e\u4fdd\u5b58\u5148\u306e\u30d1\u30b9\u30922\u500b\u76ee\u306e\u5f15\u6570\u3068\u3057\u3066\u6e21\u3057\u3066\u3044\u308b\uff0e\n\n\n12.3.3. \u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\n\u4ee5\u4e0a\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\uff0c S3 \u306e\u4e00\u756a\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u7d39\u4ecb\u3057\u305f\uff0e\n\u3053\u3053\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u304c\u7406\u89e3\u3067\u304d\u305f\u3089\uff0c\u5fd8\u308c\u305a\u306b\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u540c\u69d8\uff0c\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\n\n\n\n\n\n\n13. Hands-on #6: Bashoutter\n\n\u3055\u3066\uff0c\u6700\u5f8c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u306a\u308b\u7b2c\u516d\u56de\u3067\u306f\uff0c\u3053\u308c\u307e\u3067\u5b66\u3093\u3067\u304d\u305f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30af\u30e9\u30a6\u30c9\u306e\u6280\u8853\u3092\u4f7f\u3063\u3066\uff0c\u7c21\u5358\u306a\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046\uff0e\n\u5177\u4f53\u7684\u306b\u306f\uff0c\u4eba\u3005\u304c\u81ea\u5206\u306e\u4f5c\u3063\u305f\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308bSNS\u30b5\u30fc\u30d3\u30b9 (Bashoutter \u3068\u540d\u4ed8\u3051\u308b) \u3092\u4f5c\u6210\u3057\u3066\u307f\u3088\u3046\uff0e\nLambda, DynamoDB, S3 \u306a\u3069\u306e\u6280\u8853\u3092\u3059\u3079\u3066\u76db\u308a\u8fbc\u307f\uff0c\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u3082\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u5229\u70b9\u3092\u751f\u304b\u3057\u305f\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a SNS \u30a2\u30d7\u30ea\u304c\u8a95\u751f\u3059\u308b\uff0e\n\u6700\u7d42\u7684\u306b\u306f\uff0c Figure 95 \u306e\u3088\u3046\u306a\uff0c\u30df\u30cb\u30de\u30eb\u3067\u306f\u3042\u308b\u304c\u3068\u3066\u3082\u73fe\u4ee3\u98a8\u306a SNS \u30b5\u30a4\u30c8\u304c\u5b8c\u6210\u3059\u308b\uff01\n\n\n\nFigure 95. \u30cf\u30f3\u30ba\u30aa\u30f3#6\u3067\u4f5c\u88fd\u3059\u308b SNS \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \"Bashoutter\"\n\n\n13.1. \u6e96\u5099\n\n\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u5b9f\u884c\u306b\u306f\uff0c\u7b2c\u4e00\u56de\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u8aac\u660e\u3057\u305f\u6e96\u5099 (Section 4.1) \u304c\u6574\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3059\u308b\uff0e\n\u305d\u308c\u4ee5\u5916\u306b\u5fc5\u8981\u306a\u6e96\u5099\u306f\u306a\u3044\uff0e\n\n\n\n13.2. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e\n\n13.2.1. API\n\u4eca\u56de\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\uff0c\u4eba\u3005\u304b\u3089\u306e\u4ff3\u53e5\u306e\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u305f\u308a\uff0c\u6295\u7a3f\u3055\u308c\u305f\u4ff3\u53e5\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\uff0c\u3068\u3044\u3063\u305f\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u305f\u3044\uff0e\n\u3053\u306e\u6a5f\u80fd\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u6700\u5c0f\u9650\u306e\u8a2d\u8a08\u3068\u3057\u3066\uff0c Table 11 \u306b\u793a\u3059\u3088\u3046\u306a\u56db\u3064\u306e REST API \u3092\u4eca\u56de\u306f\u5b9f\u88c5\u3059\u308b\uff0e\n\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308b\uff0c\u95b2\u89a7\u3059\u308b\uff0c\u524a\u9664\u3059\u308b\u3068\u3044\u3046\u57fa\u672c\u7684\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u3092\u884c\u3046\u305f\u3081\u306e API \u304c\u5b8c\u5099\u3055\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c PATCH /haiku/{item_id} \u306f\uff0c {item_id} \u3067\u6307\u5b9a\u3055\u308c\u305f\u4ff3\u53e5\u306b\u201d\u3044\u3044\u306d\u201d\u3092\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\uff0e\n\nTable 11. Bashoutter API\n\n\n\n\n\n\nGET /haiku\n\u4ff3\u53e5\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\n\n\nPOST /haiku\n\u65b0\u3057\u3044\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308b\n\n\nPATCH /haiku/{item_id}\n{item_id} \u3067\u6307\u5b9a\u3055\u308c\u305f\u4ff3\u53e5\u306b\u304a\u6c17\u306b\u5165\u308a\u7968\u3092\u4e00\u3064\u5165\u308c\u308b\n\n\nDELETE /haiku/{item_id}\n{item_id} \u3067\u6307\u5b9a\u3055\u308c\u305f\u4ff3\u53e5\u3092\u524a\u9664\u3059\u308b\n\n\n\n\u305d\u308c\u305e\u308c\u306eAPI\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304a\u3088\u3073\u8fd4\u308a\u5024\u306e\u8a73\u7d30\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u4e2d\u306e\nswagger.yml\n\u306b\u5b9a\u7fa9\u3057\u3066\u3042\u308b\uff0e\n\n\n\n\n\n\n\nOpen API Specification (OAS; \u5c11\u3057\u524d\u306f Swagger Specification \u3068\u3088\u3070\u308c\u3066\u3044\u305f) \u306f\uff0c REST API \u306e\u305f\u3081\u306e\u8a18\u8ff0\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3042\u308b\uff0e\nOAS \u306b\u5f93\u3063\u3066 API \u306e\u4ed5\u69d8\u304c\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u3068\uff0c\u7c21\u5358\u306b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u751f\u6210\u3057\u305f\u308a\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u4eca\u56de\u7528\u610f\u3057\u305fAPI\u4ed5\u69d8\n\u3082\uff0c OAS \u306b\u5f93\u3063\u3066\u66f8\u3044\u3066\u3042\u308b\uff0e\n\u8a73\u3057\u304f\u306f\nSwagger \u306e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\n\u306a\u3069\u3092\u53c2\u7167\uff0e\n\n\n\n\n\n\n13.2.2. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u6210\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092 Figure 96 \u306b\u793a\u3059\uff0e\n\n\n\nFigure 96. \u30cf\u30f3\u30ba\u30aa\u30f3#5\u3067\u4f5c\u88fd\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n\n\u7c21\u5358\u306b\u307e\u3068\u3081\u308b\u3068\uff0c\u6b21\u306e\u3088\u3046\u306a\u8a2d\u8a08\u3067\u3042\u308b\uff0e\n\n\n\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u306e API \u30ea\u30af\u30a8\u30b9\u30c8\u306f\uff0c API Gateway (\u5f8c\u8ff0)\u306b\u307e\u305a\u9001\u4fe1\u3055\u308c\uff0c API \u306e URI \u3067\u6307\u5b9a\u3055\u308c\u305f Lambda \u95a2\u6570\u3078\u8ee2\u9001\u3055\u308c\u308b\uff0e\n\n\n\u305d\u308c\u305e\u308c\u306e API \u306e\u30d1\u30b9 (\u30ea\u30bd\u30fc\u30b9) \u3054\u3068\u306b\u72ec\u7acb\u3057\u305f Lambda \u3092\u7528\u610f\u3059\u308b\uff0e\n\n\n\u4ff3\u53e5\u306e\u60c5\u5831 (\u4f5c\u8005\uff0c\u672c\u6587\uff0c\u6295\u7a3f\u65e5\u6642\u306a\u3069) \u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 (DynamoDB) \u3092\u7528\u610f\u3059\u308b\uff0e\n\n\n\u5404 Lambda \u95a2\u6570\u306b\u306f\uff0c DynamoDB \u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u4ed8\u4e0e\u3059\u308b\uff0e\n\n\n\u6700\u5f8c\u306b\uff0c\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3067\u304d\u308b\u3088\u3046\uff0c \u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306e\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u914d\u4fe1\u3059\u308b\u305f\u3081\u306e S3 \u30d0\u30b1\u30c3\u30c8\u3092\u7528\u610f\u3059\u308b\uff0e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3053\u306e S3 \u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u3067 HTML/CSS/JS \u306a\u3069\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d6\u5f97\u3059\u308b\uff0e\n\n\n\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\nclass Bashoutter(core.Stack):\n\n    def __init__(self, scope: core.App, name: str, **kwargs) -> None:\n        super().__init__(scope, name, **kwargs)\n\n        (1)\n        # dynamoDB table to store haiku\n        table = ddb.Table(\n            self, \"Bashoutter-Table\",\n            partition_key=ddb.Attribute(\n                name=\"item_id\",\n                type=ddb.AttributeType.STRING\n            ),\n            billing_mode=ddb.BillingMode.PAY_PER_REQUEST,\n            removal_policy=core.RemovalPolicy.DESTROY\n        )\n\n        (2)\n        bucket = s3.Bucket(\n            self, \"Bashoutter-Bucket\",\n            website_index_document=\"index.html\",\n            public_read_access=True,\n            removal_policy=core.RemovalPolicy.DESTROY\n        )\n\n        common_params = {\n            \"runtime\": _lambda.Runtime.PYTHON_3_7,\n            \"environment\": {\n                \"TABLE_NAME\": table.table_name\n            }\n        }\n\n        (3)\n        # define Lambda functions\n        get_haiku_lambda = _lambda.Function(\n            self, \"GetHaiku\",\n            code=_lambda.Code.from_asset(\"api\"),\n            handler=\"api.get_haiku\",\n            memory_size=512,\n            **common_params,\n        )\n        post_haiku_lambda = _lambda.Function(\n            self, \"PostHaiku\",\n            code=_lambda.Code.from_asset(\"api\"),\n            handler=\"api.post_haiku\",\n            **common_params,\n        )\n        patch_haiku_lambda = _lambda.Function(\n            self, \"PatchHaiku\",\n            code=_lambda.Code.from_asset(\"api\"),\n            handler=\"api.patch_haiku\",\n            **common_params,\n        )\n        delete_haiku_lambda = _lambda.Function(\n            self, \"DeleteHaiku\",\n            code=_lambda.Code.from_asset(\"api\"),\n            handler=\"api.delete_haiku\",\n            **common_params,\n        )\n\n        (4)\n        # grant permissions\n        table.grant_read_data(get_haiku_lambda)\n        table.grant_read_write_data(post_haiku_lambda)\n        table.grant_read_write_data(patch_haiku_lambda)\n        table.grant_read_write_data(delete_haiku_lambda)\n\n        (5)\n        # define API Gateway\n        api = apigw.RestApi(\n            self, \"BashoutterApi\",\n            default_cors_preflight_options=apigw.CorsOptions(\n                allow_origins=apigw.Cors.ALL_ORIGINS,\n                allow_methods=apigw.Cors.ALL_METHODS,\n            )\n        )\n\n        haiku = api.root.add_resource(\"haiku\")\n        haiku.add_method(\n            \"GET\",\n            apigw.LambdaIntegration(get_haiku_lambda)\n        )\n        haiku.add_method(\n            \"POST\",\n            apigw.LambdaIntegration(post_haiku_lambda)\n        )\n\n        haiku_item_id = haiku.add_resource(\"{item_id}\")\n        haiku_item_id.add_method(\n            \"PATCH\",\n            apigw.LambdaIntegration(patch_haiku_lambda)\n        )\n        haiku_item_id.add_method(\n            \"DELETE\",\n            apigw.LambdaIntegration(delete_haiku_lambda)\n        )\n\n\n\n\n\n1\n\u3053\u3053\u3067\uff0c\u4ff3\u53e5\u306e\u60c5\u5831\u3092\u8a18\u9332\u3057\u3066\u304a\u304f\u305f\u3081\u306e DynamoDB \u30c6\u30fc\u30d6\u30eb\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n2\n\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u914d\u4fe1\u3059\u308b\u305f\u3081\u306e S3 \u30d0\u30b1\u30c3\u30c8\u3092\u7528\u610f\u3057\u3066\u3044\u308b\uff0e\n\n\n3\n\u305d\u308c\u305e\u308c\u306e API \u3067\u5b9f\u884c\u3055\u308c\u308b Lambda \u95a2\u6570\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\u95a2\u6570\u306f Python3.7 \u3067\u66f8\u304b\u308c\u3066\u304a\u308a\uff0c\u30b3\u30fc\u30c9\u306f\nhandson/bashoutter/api/api.py\n\u306b\u3042\u308b\uff0e\n\n\n4\n<3> \u3067\u5b9a\u7fa9\u3055\u308c\u305f Lambda \u95a2\u6570\u306b\u5bfe\u3057\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u8aad\u307f\u66f8\u304d\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3092\u4ed8\u4e0e\u3057\u3066\u3044\u308b\uff0e\n\n\n5\n\u3053\u3053\u3067\uff0cAPI Gateway \u306b\u3088\u308a\uff0c\u5404API\u30d1\u30b9\u3068\u305d\u3053\u3067\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d Lambda \u95a2\u6570\u3092\u7d10\u4ed8\u3051\u3066\u3044\u308b\uff0e\n\n\n\n\u305d\u308c\u305e\u308c\u306e\u9805\u76ee\u306b\u3064\u3044\u3066\uff0c\u3082\u3046\u5c11\u3057\u8a73\u3057\u304f\u8aac\u660e\u3057\u3088\u3046\uff0e\n\n\n13.2.3. Public access mode \u306e S3 \u30d0\u30b1\u30c3\u30c8\nS3 \u306e\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\u30b3\u30fc\u30c9\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\nbucket = s3.Bucket(\n    self, \"Bashoutter-Bucket\",\n    website_index_document=\"index.html\",\n    public_read_access=True,\n    removal_policy=core.RemovalPolicy.DESTROY\n)\n\n\n\u3053\u3053\u3067\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\u306e\u306f public_read_access=True \u306e\u90e8\u5206\u3060\uff0e\n\u524d\u7ae0\u3067\uff0c S3 \u306b\u3064\u3044\u3066\u8aac\u660e\u3092\u884c\u3063\u305f\u3068\u304d\u306b\u306f\u89e6\u308c\u306a\u304b\u3063\u305f\u304c\uff0c S3 \u306b\u306f Public access mode \u3068\u3044\u3046\u6a5f\u80fd\u304c\u3042\u308b\uff0e\nPublic access mode \u3092\u30aa\u30f3\u306b\u3057\u3066\u304a\u304f\u3068\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u8a8d\u8a3c\u306a\u3057\u3067 (i.e. \u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u4e0a\u306e\u8ab0\u3067\u3082) \u95b2\u89a7\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\uff0e\n\u3053\u306e\u8a2d\u5b9a\u306f\uff0c\u4e00\u822c\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u9759\u7684\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u7f6e\u3044\u3066\u304a\u304f\u306e\u306b\u6700\u9069\u3067\u3042\u308a\uff0c\u591a\u304f\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306b\u3088\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3067\u3053\u306e\u3088\u3046\u306a\u8a2d\u8a08\u304c\u884c\u308f\u308c\u308b\uff0e\npublic access mode \u3092\u8a2d\u5b9a\u3057\u3066\u304a\u304f\u3068\uff0c http://XXXX.s3-website-ap-northeast-1.amazonaws.com/ \u306e\u3088\u3046\u306a\u56fa\u6709\u306e URL \u304c\u30d0\u30b1\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u4ed8\u4e0e\u3055\u308c\u308b\uff0e\n\u305d\u3057\u3066\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u3053\u306e URL \u306b\u30a2\u30af\u30bb\u30b9\u3092\u3059\u308b\u3068\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u306b\u3042\u308b index.html \u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u8fd4\u3055\u308c\uff0c\u30da\u30fc\u30b8\u304c\u30ed\u30fc\u30c9\u3055\u308c\u308b\n(\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u8fd4\u3055\u308c\u308b\u304b\u306f\uff0c website_index_document=\"index.html\" \u306e\u90e8\u5206\u3067\u8a2d\u5b9a\u3057\u3066\u3044\u308b\uff0e)\n\u306a\u304a\uff0c\u3053\u306e\u6642\u70b9\u3067\u306f\u30d0\u30b1\u30c3\u30c8\u306f\u7a7a\u3067\u3042\u308b\uff0e\nHTML/CSS/JS \u306a\u3069\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u914d\u7f6e\u306f\uff0c\u30c7\u30d7\u30ed\u30a4\u3092\u884c\u3063\u305f\u5f8c\u307b\u3069\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u884c\u3046\uff0e\n\n\n\n\n\n\n\n\n\u4eca\u56de\u306e S3 \u30d0\u30b1\u30c3\u30c8\u306b\u306f\uff0c AWS \u306b\u3088\u3063\u3066\u4ed8\u4e0e\u3055\u308c\u305f\u30e9\u30f3\u30c0\u30e0\u306a URL \u304c\u3064\u3044\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3092\uff0e example.com \u306e\u3088\u3046\u306a\u81ea\u5206\u306e\u30c9\u30e1\u30a4\u30f3\u3067\u30db\u30b9\u30c8\u3057\u305f\u3051\u308c\u3070\uff0c AWS \u306b\u3088\u3063\u3066\u4ed8\u4e0e\u3055\u308c\u305f URL \u3092\u81ea\u5206\u306e\u30c9\u30e1\u30a4\u30f3\u306e DNS \u30ec\u30b3\u30fc\u30c9\u306b\u8ffd\u52a0\u3059\u308c\u3070\u3088\u3044\uff0e\n\n\n\n\n\n\n13.2.4. API \u306e\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\nAPI \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u6765\u305f\u3068\u304d\u306b\uff0c\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u51e6\u7406\u3092\u884c\u3046\u95a2\u6570\u306e\u3053\u3068\u3092\u30cf\u30f3\u30c9\u30e9 (handler) \u95a2\u6570\u3068\u3088\u3076\uff0e\nGET /haiku \u306e API \u306b\u5bfe\u3057\u3066\u306e\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u3092 Lambda \u3067\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u90e8\u5206\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n1\n2\n3\n4\n5\n6\n7\nget_haiku_lambda = _lambda.Function(\n    self, \"GetHaiku\",\n    code=_lambda.Code.from_asset(\"api\"),\n    handler=\"api.get_haiku\",\n    memory_size=512,\n    **common_params\n)\n\n\n\u7c21\u5358\u306a\u3068\u3053\u308d\u304b\u3089\u898b\u3066\u3044\u304f\u3068\uff0c memory_size=512 \u306e\u7b87\u6240\u3067\u30e1\u30e2\u30ea\u30fc\u306e\u4f7f\u7528\u91cf\u3092512MB\u306b\u6307\u5b9a\u3057\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c code=_lambda.Code.from_asset(\"api\") \u306b\u3088\u3063\u3066\u5916\u90e8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea (api/) \u3092\u53c2\u7167\u305b\u3088\u3068\u6307\u5b9a\u3057\u3066\u304a\u308a\uff0c\nhandler=\"api.get_haiku\" \u306e\u3068\u3053\u308d\u3067 api.py \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u306e get_haiku() \u3068\u3044\u3046\u95a2\u6570\u3092\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u3068\u3057\u3066\u5b9f\u884c\u305b\u3088\uff0c\u3068\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\nddb = boto3.resource(\"dynamodb\")\ntable = ddb.Table(os.environ[\"TABLE_NAME\"])\n\ndef get_haiku(event, context):\n    \"\"\"\n    handler for GET /haiku\n    \"\"\"\n    try:\n        response = table.scan()\n\n        status_code = 200\n        resp = response.get(\"Items\")\n    except Exception as e:\n        status_code = 500\n        resp = {\"description\": f\"Internal server error. {str(e)}\"}\n    return {\n        \"statusCode\": status_code,\n        \"headers\": HEADERS,\n        \"body\": json.dumps(resp, cls=DecimalEncoder)\n    }\n\n\nresponse = table.scan() \u3067\uff0c\u4ff3\u53e5\u306e\u683c\u7d0d\u3055\u308c\u305f DynamoDB \u30c6\u30fc\u30d6\u30eb\u304b\u3089\uff0c\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u53d6\u308a\u51fa\u3057\u3066\u3044\u308b\uff0e\n\u3082\u3057\u306a\u306b\u3082\u30a8\u30e9\u30fc\u304c\u8d77\u304d\u306a\u3051\u308c\u3070\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9200\u304c\u8fd4\u3055\u308c\uff0c\u3082\u3057\u306a\u306b\u304b\u30a8\u30e9\u30fc\u304c\u8d77\u3053\u308c\u3070\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9500\u304c\u8fd4\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\u4e0a\u8a18\u306e\u3088\u3046\u306a\u64cd\u4f5c\u3092\uff0c\u307b\u304b\u306e API \u306b\u3064\u3044\u3066\u3082\u7e70\u308a\u8fd4\u3059\u3053\u3068\u3067\uff0c\u3059\u3079\u3066\u306e API \u306e\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n\nGET /haiku \u306e\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u3067\uff0c response = table.scan() \u3068\u3044\u3046\u90e8\u5206\u304c\u3042\u308b\u304c\uff0c\u5b9f\u306f\u3053\u308c\u306f\u6700\u5584\u306e\u66f8\u304d\u65b9\u3067\u306f\u306a\u3044\uff0e\nDynamoDB \u306e scan() \u30e1\u30bd\u30c3\u30c9\u306f\uff0c\u6700\u5927\u3067 1MB \u307e\u3067\u306e\u30c7\u30fc\u30bf\u3057\u304b\u8fd4\u3055\u306a\u3044\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b5\u30a4\u30ba\u304c\u5927\u304d\u304f\uff0c 1MB \u4ee5\u4e0a\u306e\u30c7\u30fc\u30bf\u304c\u3042\u308b\u5834\u5408\u306b\u306f\uff0c\u518d\u5e30\u7684\u306b scan() \u30e1\u30bd\u30c3\u30c9\u3092\u3088\u3076\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u8a73\u3057\u304f\u306f boto3 \u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3092\u53c2\u7167\uff0e\n\n\n\n\n\n\n13.2.5. AWS \u306b\u304a\u3051\u308b\u6a29\u9650\u306e\u7ba1\u7406 (IAM)\n\u4ee5\u4e0b\u306e\u90e8\u5206\u306e\u30b3\u30fc\u30c9\u306b\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\uff0e\n\n1\n2\n3\n4\ntable.grant_read_data(get_haiku_lambda)\ntable.grant_read_write_data(post_haiku_lambda)\ntable.grant_read_write_data(patch_haiku_lambda)\ntable.grant_read_write_data(delete_haiku_lambda)\n\n\n\u3053\u308c\u307e\u3067\u306f\u8aac\u660e\u306e\u7c21\u7565\u5316\u306e\u305f\u3081\u306b\u3042\u3048\u3066\u89e6\u308c\u3066\u3053\u306a\u304b\u3063\u305f\u304c\uff0c AWS \u306b\u306f IAM (Identity and Access Management) \u3068\u3044\u3046\u91cd\u8981\u306a\u6982\u5ff5\u304c\u3042\u308b\uff0e\nIAM \u306f\u57fa\u672c\u7684\u306b\uff0c\u3042\u308b\u30ea\u30bd\u30fc\u30b9\u304c\u307b\u304b\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u5bfe\u3057\u3066\u3069\u306e\u3088\u3046\u306a\u6a29\u9650\u3092\u3082\u3063\u3066\u3044\u308b\u304b\uff0c\u3092\u898f\u5b9a\u3059\u308b\u3082\u306e\u3067\u3042\u308b\uff0e\nLambda\u306f\uff0c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u72b6\u614b\u3067\u306f\u307b\u304b\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u6a29\u9650\u3092\u306a\u306b\u3082\u6709\u3057\u3066\u3044\u306a\u3044\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c Lambda \u95a2\u6570\u304c DynamoDB \u306e\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u66f8\u304d\u3059\u308b\u305f\u3081\u306b\u306f\uff0c\u305d\u308c\u3092\u8a31\u53ef\u3059\u308b\u3088\u3046\u306a IAM \u304c Lambda \u95a2\u6570\u306b\u4ed8\u4e0e\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\nCDK \u306b\u3088\u308b dynamodb.Table \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u306f grant_read_write_data() \u3068\u3044\u3046\u4fbf\u5229\u306a\u30e1\u30bd\u30c3\u30c9\u304c\u5099\u308f\u3063\u3066\u304a\u308a\uff0c\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3057\u305f\u3044 Lambda \u95a2\u6570\u3092\u5f15\u6570\u3068\u3057\u3066\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3076\u3053\u3068\u3067\uff0c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u8aad\u307f\u66f8\u304d\u3092\u8a31\u53ef\u3059\u308b IAM \u3092\u4ed8\u4e0e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u540c\u69d8\u306b\uff0cCDK \u306e s3.Bucket \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u3082 grant_read_write() \u3068\u3044\u3046\u30e1\u30bd\u30c3\u30c9\u304c\u5099\u308f\u3063\u3066\u304a\u308a\uff0c\u3053\u308c\u306b\u3088\u3063\u3066\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u8aad\u307f\u66f8\u304d\u3092\u8a31\u53ef\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\uff0c\u5b9f\u306f Section 9 \u3067 AWS Batch \u306b\u3088\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u69cb\u6210\u3057\u305f\u969b\u306b\u4f7f\u7528\u3057\u305f\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u632f\u308a\u8fd4\u3063\u3066\u30b3\u30fc\u30c9\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\n\n\n\n\n\n\n\u5404\u30ea\u30bd\u30fc\u30b9\u306b\u4ed8\u4e0e\u3059\u308b IAM \u306f\uff0c\u5fc5\u8981\u6700\u4f4e\u9650\u306e\u6a29\u9650\u3092\u4e0e\u3048\u308b\u306b\u3068\u3069\u3081\u308b\u3068\u3044\u3046\u306e\u304c\u57fa\u672c\u65b9\u91dd\u3067\u3042\u308b\uff0e\n\u3053\u308c\u306b\u3088\u308a\uff0c\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u5411\u4e0a\u3055\u305b\u308b\u3060\u3051\u3067\u306a\u304f\uff0c\u610f\u56f3\u3057\u3066\u3044\u306a\u3044\u30d7\u30ed\u30b0\u30e9\u30e0\u304b\u3089\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u8aad\u307f\u66f8\u304d\u3092\u9632\u6b62\u3059\u308b\u3068\u3044\u3046\u70b9\u3067\uff0c\u30d0\u30b0\u3092\u672a\u7136\u306b\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u305d\u306e\u3088\u3046\u306a\u7406\u7531\u306b\u3088\u308a\uff0c\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f GET \u306e\u30cf\u30f3\u30c9\u30e9\u30fc\u95a2\u6570\u306b\u5bfe\u3057\u3066\u306f grant_read_data() \u306b\u3088\u3063\u3066\uff0c read \u6a29\u9650\u306e\u307f\u3092\u4ed8\u4e0e\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\n\n\n13.2.6. API Gateway\nAPI Gateway \u3068\u306f\uff0c API \u306e\"\u5165\u308a\u53e3\"\u3068\u3057\u3066\uff0cAPI\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30b9\u306b\u5f93\u3063\u3066 Lambda \u3084 EC2 \u306a\u3069\u306b\u63a5\u7d9a\u3092\u884c\u3046\u3068\u3044\u3046\u6a5f\u80fd\u3092\u62c5\u3046 (Figure 97)\uff0e\nLambda \u3084 EC2 \u306b\u3088\u3063\u3066\u884c\u308f\u308c\u305f\u51e6\u7406\u306e\u7d50\u679c\u306f\uff0c\u518d\u3073 API Gateway \u3092\u7d4c\u7531\u3057\u3066\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u8fd4\u3055\u308c\u308b\uff0e\n\u3053\u306e\u3088\u3046\u306b\uff0c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30b5\u30fc\u30d0\u30fc\u306e\u9593\u306b\u7acb\u3061\uff0c API \u306e\u30ea\u30bd\u30fc\u30b9\u30d1\u30b9\u306b\u5fdc\u3058\u3066\u63a5\u7d9a\u5148\u3092\u632f\u308a\u5206\u3051\u308b\u3088\u3046\u306a\u30b5\u30fc\u30d0\u30fc\u3092\u30eb\u30fc\u30bf\u30fc\uff0c\u3042\u308b\u3044\u306f\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3068\u3088\u3093\u3060\u308a\u3059\u308b\uff0e\n\u5f93\u6765\u7684\u306b\u306f\uff0c\u30eb\u30fc\u30bf\u30fc\u306b\u306f\u305d\u308c\u5c02\u7528\u306e\u4eee\u60f3\u30b5\u30fc\u30d0\u30fc\u304c\u7f6e\u304b\u308c\u308b\u3053\u3068\u304c\u4e00\u822c\u7684\u3067\u3042\u3063\u305f\uff0e\n\u3057\u304b\u3057\uff0c API Gateway \u306f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306a\u30eb\u30fc\u30bf\u30fc\u3068\u3057\u3066\uff0c\u56fa\u5b9a\u3055\u308c\u305f\u30b5\u30fc\u30d0\u30fc\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u306a\u304f\uff0c API \u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u6765\u305f\u3068\u304d\u306e\u307f\u8d77\u52d5\u3057\uff0cAPI \u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u3067\u3042\u308b\u3053\u3068\u306e\u5f53\u7136\u306e\u5e30\u7d50\u3068\u3057\u3066\uff0c\u30a2\u30af\u30bb\u30b9\u306e\u4ef6\u6570\u304c\u5897\u5927\u3057\u305f\u3068\u304d\u306b\u306f\u305d\u308c\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u51e6\u7406\u80fd\u529b\u3092\u81ea\u52d5\u3067\u5897\u3084\u3059\u6a5f\u80fd\u3082\u5099\u308f\u3063\u3066\u3044\u308b\uff0e\n\n\n\nFigure 97. API Gateway\n\nAPI Gateway \u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u3067\uff0c\u5927\u91cf (1\u79d2\u9593\u306b\u6570\u5343\u304b\u3089\u6570\u4e07\u4ef6) \u306e API \u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u306e\u3067\u304d\u308b\u30b7\u30b9\u30c6\u30e0\u3092\u5bb9\u6613\u306b\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nAPI Gateway \u306e\u6599\u91d1\u306f Table 12 \u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\uff0e\n\u307e\u305f\uff0c\u7121\u6599\u5229\u7528\u67a0\u306b\u3088\u308a\uff0c\u6708\u3054\u3068\u306b100\u4e07\u4ef6\u307e\u3067\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306f0\u5186\u3067\u5229\u7528\u3067\u304d\u308b\uff0e\n\nTable 12. API Gateway \u306e\u5229\u7528\u6599\u91d1\u8a2d\u5b9a (\u53c2\u7167)\n\n\n\n\n\n\nNumber of Requests (per month)\nPrice (per million)\n\n\n\n\nFirst 333 million\n$4.25\n\n\nNext 667 million\n$3.53\n\n\nNext 19 billion\n$3.00\n\n\nOver 20 billion\n$1.91\n\n\n\n\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u8a72\u5f53\u7b87\u6240\u3092\u898b\u3066\u307f\u3088\u3046\uff0e\n\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n(1)\napi = apigw.RestApi(\n    self, \"BashoutterApi\",\n    default_cors_preflight_options=apigw.CorsOptions(\n        allow_origins=apigw.Cors.ALL_ORIGINS,\n        allow_methods=apigw.Cors.ALL_METHODS,\n    )\n)\n\n(2)\nhaiku = api.root.add_resource(\"haiku\")\n(3)\nhaiku.add_method(\n    \"GET\",\n    apigw.LambdaIntegration(get_haiku_lambda)\n)\nhaiku.add_method(\n    \"POST\",\n    apigw.LambdaIntegration(post_haiku_lambda)\n)\n\n(4)\nhaiku_item_id = haiku.add_resource(\"{item_id}\")\n(5)\nhaiku_item_id.add_method(\n    \"PATCH\",\n    apigw.LambdaIntegration(patch_haiku_lambda)\n)\nhaiku_item_id.add_method(\n    \"DELETE\",\n    apigw.LambdaIntegration(delete_haiku_lambda)\n)\n\n\n\n\n\n1\n\u6700\u521d\u306b\uff0c api = apigw.RestApi() \u306b\u3088\u308a\uff0c\u7a7a\u306e API Gateway \u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\uff0e\n\n\n2\n\u6b21\u306b\uff0c api.root.add_resource() \u306e\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3076\u3053\u3068\u3067\uff0c /haiku \u3068\u3044\u3046 API \u30d1\u30b9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u308b\uff0e\n\n\n3\n\u7d9a\u3044\u3066\uff0c add_method() \u3092\u547c\u3076\u3053\u3068\u3067\uff0c GET, POST \u306e\u30e1\u30bd\u30c3\u30c9\u3092 /haiku \u306e\u30d1\u30b9\u306b\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n4\n\u3055\u3089\u306b\uff0c haiku.add_resource(\"{item_id}\") \u306b\u3088\u308a\uff0c /haiku/{item_id} \u3068\u3044\u3046 API \u30d1\u30b9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u308b\uff0e\n\n\n5\n\u6700\u5f8c\u306b\uff0c add_method() \u3092\u547c\u3076\u3053\u3068\u306b\u3088\u308a\uff0c PATCH, DELETE \u306e\u30e1\u30bd\u30c3\u30c9\u3092 /haiku/{item_id} \u306e\u30d1\u30b9\u306b\u5b9a\u7fa9\u3057\u3066\u3044\u308b\uff0e\n\n\n\n\u3053\u306e\u3088\u3046\u306b\uff0c API Gateway \u306e\u4f7f\u3044\u65b9\u306f\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\uff0c\u9010\u6b21\u7684\u306b API \u30d1\u30b9\u3068\u305d\u3053\u3067\u5b9f\u884c\u3055\u308c\u308b\u30e1\u30bd\u30c3\u30c9\u30fbLambda \u3092\u8a18\u8ff0\u3057\u3066\u3044\u304f\u3060\u3051\u3067\u3088\u3044\uff0e\n\n\n\n\n\n\n\n\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067 \u65b0\u898f API \u3092\u4f5c\u6210\u3059\u308b\u3068\uff0c \u30e9\u30f3\u30c0\u30e0\u306a URL \u304c\u305d\u306e API \u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3068\u3057\u3066\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\uff0e\n\u3053\u308c\u3092\uff0e api.example.com \u306e\u3088\u3046\u306a\u81ea\u5206\u306e\u30c9\u30e1\u30a4\u30f3\u3067\u30db\u30b9\u30c8\u3057\u305f\u3051\u308c\u3070\uff0c AWS \u306b\u3088\u3063\u3066\u4ed8\u4e0e\u3055\u308c\u305f URL \u3092\u81ea\u5206\u306e\u30c9\u30e1\u30a4\u30f3\u306e DNS \u30ec\u30b3\u30fc\u30c9\u306b\u8ffd\u52a0\u3059\u308c\u3070\u3088\u3044\uff0e\n\n\n\n\n\n\n\n\n13.3. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\n\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e2d\u8eab\u304c\u7406\u89e3\u3067\u304d\u305f\u3068\u3053\u308d\u3067\uff0c\u65e9\u901f\u30c7\u30d7\u30ed\u30a4\u3092\u884c\u3063\u3066\u307f\u3088\u3046\uff0e\n\u30c7\u30d7\u30ed\u30a4\u306e\u624b\u9806\u306f\uff0c\u3053\u308c\u307e\u3067\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3068\u307b\u3068\u3093\u3069\u5171\u901a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u306e\u307f\u5217\u6319\u3059\u308b (# \u3067\u59cb\u307e\u308b\u884c\u306f\u30b3\u30e1\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u8a2d\u5b9a\u3082\u5fd8\u308c\u305a\u306b (Section 15.3)\uff0e\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\n$ cd intro-aws/handson/bashoutter\n\n# venv \u3092\u4f5c\u6210\u3057\uff0c\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\n$ python3 -m venv .env\n$ source .env/bin/activate\n$ pip install -r requirements.txt\n\n# \u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\n$ cdk deploy\n\n\u30c7\u30d7\u30ed\u30a4\u306e\u30b3\u30de\u30f3\u30c9\u304c\u7121\u4e8b\u306b\u5b9f\u884c\u3055\u308c\u308c\u3070\uff0c Figure 98 \u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b Bashoutter.BashoutterApiEndpoint = XXXX, Bashoutter.BucketUrl = YYYY \u306e\u4e8c\u3064\u6587\u5b57\u5217\u306f\u3042\u3068\u3067\u4f7f\u3046\u306e\u3067\u30e1\u30e2\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\nFigure 98. CDK\u30c7\u30d7\u30ed\u30a4\u5b9f\u884c\u5f8c\u306e\u51fa\u529b\n\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\uff0c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30b9\u30bf\u30c3\u30af\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\u307e\u305a\u306f\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089 API Gateway \u306e\u30da\u30fc\u30b8\u306b\u884c\u304f\uff0e\n\u3059\u308b\u3068\uff0c Figure 99 \u306e\u3088\u3046\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\uff0c\u30c7\u30d7\u30ed\u30a4\u6e08\u307f\u306e API \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u4e00\u89a7\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\n\n\nFigure 99. API Gateway \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762 (1)\n\n\u4eca\u56de\u30c7\u30d7\u30ed\u30a4\u3057\u305f \"BashoutterApi\" \u3068\u3044\u3046\u540d\u524d\u306e API \u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067 Figure 100 \u306e\u3088\u3046\u306a\u753b\u9762\u306b\u9077\u79fb\u3057\uff0c\u8a73\u7d30\u60c5\u5831\u3092\u95b2\u89a7\u3067\u304d\u308b\uff0e\nGET /haiku, POST /haiku \u306a\u3069\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u308b\uff0e\n\u305d\u308c\u305e\u308c\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\uff0c\u305d\u306e\u30e1\u30bd\u30c3\u30c9\u306e\u8a73\u7d30\u60c5\u5831\u3092\u78ba\u8a8d\u3067\u304d\u308b\uff0e\nAPI Gateway \u306f\uff0c\u524d\u8ff0\u3057\u305f\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u6a5f\u80fd\u3060\u3051\u3067\u306a\u304f\uff0c\u8a8d\u8a3c\u6a5f\u80fd\u306a\u3069\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3053\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\u3068\u304f\u306b\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306f\u4f7f\u7528\u3057\u306a\u3044\u304c\uff0c \"Method Request\" \u3068\u66f8\u3044\u3066\u3042\u308b\u9805\u76ee\u306a\u3069\u304c\u305d\u308c\u306b\u76f8\u5f53\u3059\u308b\uff0e\n\u6b21\u306b\uff0c Figure 100 \u3067\u753b\u9762\u53f3\u7aef\u306e\u8d64\u8272\u3067\u56f2\u3063\u305f\u90e8\u5206\u306b\uff0c\u3053\u306e API \u3067\u547c\u3070\u308c\u308b Lambda \u95a2\u6570\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u76ee\u3057\u3088\u3046\uff0e\n\u95a2\u6570\u540d\u3092\u30af\u30ea\u30c3\u30af\u3068\uff0c\u8a72\u5f53\u3059\u308b Lambda \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u9077\u79fb\u3057\uff0c\u95a2\u6570\u306e\u4e2d\u8eab\u3092\u95b2\u89a7\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\n\nFigure 100. API Gateway \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762 (2)\n\n\u6b21\u306b\uff0c S3 \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u306b\u79fb\u3063\u3066\u307f\u3088\u3046\uff0e\nbashouter- \u3067\u59cb\u307e\u308b\u30e9\u30f3\u30c0\u30e0\u306a\u540d\u524d\u306e\u30d0\u30b1\u30c3\u30c8\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b (Figure 101)\uff0e\n\n\n\nFigure 101. S3 \u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\n\n\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u8eab\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\nindex.html \u306e\u307b\u304b\uff0c css/, js/ \u306a\u3069\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046 (Figure 102)\uff0e\n\u3053\u308c\u3089\u304c\uff0c\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306e\"\u67a0\"\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3067\u3042\u308b\uff0e\n\n\n\nFigure 102. S3 \u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u8eab\n\n\n\n13.4. API \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b\n\u305d\u308c\u3067\u306f\uff0c\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5bfe\u3057\uff0c\u5b9f\u969b\u306b API \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u3066\u307f\u3088\u3046\uff0e\n\u307e\u305a\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089 API \u3092\u9001\u4fe1\u3059\u308b\u6f14\u7fd2\u3092\u884c\u304a\u3046\uff0e\nS3 \u306b\u914d\u7f6e\u3057\u305f GUI \u306f\u4e00\u65e6\u304a\u3044\u3066\u304a\u304f\uff0e\n\u3053\u3053\u3067\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089 HTTP API \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b\u305f\u3081\u306e\u30b7\u30f3\u30d7\u30eb\u306aHTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u3042\u308b HTTPie \u3092\u4f7f\u3063\u3066\u307f\u3088\u3046\uff0e\nHTTPie \u306f\uff0c\u30b9\u30bf\u30c3\u30af\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3068\u304d\u306b Python \u4eee\u60f3\u74b0\u5883 (venv) \u3092\u4f5c\u6210\u3057\u305f\u3068\u304d\uff0c\u4e00\u7dd2\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\uff0e\n\u5ff5\u306e\u305f\u3081\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u3046\u307e\u304f\u3044\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3059\u308b\u306b\u306f\uff0c\u4eee\u60f3\u74b0\u5883\u3092\u7acb\u3061\u4e0a\u3052\u305f\u3042\u3068\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306b http \u3068\u6253\u3063\u3066\u307f\u308b\uff0e\n\u30d8\u30eb\u30d7\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u51fa\u529b\u3055\u308c\u305f\u3089\u6e96\u5099OK\u3067\u3042\u308b\uff0e\n\u307e\u305a\uff0c\u5148\u307b\u3069\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\u306b\u5f97\u3089\u308c\u305f API \u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e URL (Bashoutter.BashoutterApiEndpoint = XXXX \u3067\u5f97\u3089\u308c\u305f XXXX \u306e\u6587\u5b57\u5217) \u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u5909\u6570\u306b\u8a2d\u5b9a\u3057\u3066\u304a\u304f\uff0e\n\n$ export ENDPOINT_URL=XXXX\n\n\u6b21\u306b\uff0c\u4ff3\u53e5\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\uff0c GET /haiku \u306e API \u3092\u9001\u4fe1\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ http GET \"${ENDPOINT_URL}/haiku\"\n\n\u73fe\u6642\u70b9\u3067\u306f\uff0c\u307e\u3060\u3060\u308c\u3082\u4ff3\u53e5\u3092\u6295\u7a3f\u3057\u3066\u3044\u306a\u3044\u306e\u3067\uff0c\u7a7a\u306e\u914d\u5217 ([]) \u304c\u8fd4\u3063\u3066\u304f\u308b\uff0e\n\u305d\u308c\u3067\u306f\u6b21\u306b\uff0c POST /haiku \u3092\u4f7f\u3063\u3066\u4ff3\u53e5\u3092\u6295\u7a3f\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ http POST \"${ENDPOINT_URL}/haiku\" \\\nusername=\"\u677e\u5c3e\u82ad\u8549\" \\\nfirst=\"\u9591\u3055\u3084\" \\\nsecond=\"\u5ca9\u306b\u3057\u307f\u5165\u308b\" \\\nthird=\"\u8749\u306e\u58f0\"\n\n\u6b21\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u3060\u308d\u3046\uff0e\n\nHTTP/1.1 201 Created\nConnection: keep-alive\nContent-Length: 49\nContent-Type: application/json\n....\n{\n    \"description\": \"Successfully added a new haiku\"\n}\n\n\u65b0\u3057\u3044\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308b\u3053\u3068\u306b\u6210\u529f\u3057\u305f\u3088\u3046\u3067\u3042\u308b\uff0e\n\u672c\u5f53\u306b\u4ff3\u53e5\u304c\u8ffd\u52a0\u3055\u308c\u305f\u304b\uff0c\u518d\u3073 GET \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u547c\u3076\u3053\u3068\u3067\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\uff0e\n\n$ http GET \"${ENDPOINT_URL}/haiku\"\n\nHTTP/1.1 200 OK\nConnection: keep-alive\nContent-Length: 258\nContent-Type: application/json\n...\n[\n    {\n        \"created_at\": \"2020-07-06T02:46:04+00:00\",\n        \"first\": \"\u9591\u3055\u3084\",\n        \"item_id\": \"7e91c5e4d7ad47909e0ac14c8bbab05b\",\n        \"likes\": 0.0,\n        \"second\": \"\u5ca9\u306b\u3057\u307f\u5165\u308b\",\n        \"third\": \"\u8749\u306e\u58f0\",\n        \"username\": \"\u677e\u5c3e\u82ad\u8549\"\n    }\n]\n\n\u7d20\u6674\u3089\u3057\u3044\uff01\n\u6b21\u306b\uff0c PATCH /haiku/{item_id} \u3092\u547c\u3076\u3053\u3068\u3067\u3053\u306e\u4ff3\u53e5\u306b\u3044\u3044\u306d\u3092\u8ffd\u52a0\u3057\u3066\u307f\u3088\u3046\uff0e\n\u4e00\u3064\u524d\u306e\u30b3\u30de\u30f3\u30c9\u3067\u53d6\u5f97\u3057\u305f\u4ff3\u53e5\u306e item_id \u3092\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306e XXXX \u306b\u4ee3\u5165\u3057\u305f\u4e0a\u3067\u5b9f\u884c\u3057\u3088\u3046\uff0e\n\n$ http PATCH \"${ENDPOINT_URL}/haiku/XXXX\"\n\n{\"description\": \"OK\"} \u3068\u3044\u3046\u51fa\u529b\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u518d\u3073 GET \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\u3053\u3068\u3067\uff0c\u3044\u3044\u306d (likes) \u304c1\u5897\u3048\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\n$ http GET \"${ENDPOINT_URL}/haiku\"\n...\n[\n    {\n        ...\n        \"likes\": 1.0,\n        ...\n    }\n]\n\n\u6700\u5f8c\u306b\uff0c DELETE \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\u3053\u3068\u3067\u4ff3\u53e5\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u524a\u9664\u3057\u3088\u3046\uff0e\nXXXX \u306f item_id \u306e\u5024\u3067\u7f6e\u304d\u63db\u3048\u305f\u3046\u3048\u3067\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ http DELETE \"${ENDPOINT_URL}/haiku/XXXX\"\n\n\u518d\u3073 GET \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\u3053\u3068\u3067\uff0c\u8fd4\u308a\u5024\u304c\u7a7a ([]) \u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\u3053\u308c\u3067\uff0c\u4ff3\u53e5\u306e\u6295\u7a3f\u30fb\u53d6\u5f97\u30fb\u524a\u9664\u305d\u3057\u3066\u3044\u3044\u306d\u306e\u8ffd\u52a0\uff0c\u3068\u3044\u3063\u305f\u57fa\u672c\u7684\u306a API \u304c\u304d\u3061\u3093\u3068\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u305f\uff0e\n\n\n13.5. \u5927\u91cf\u306e API \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\n\u3055\u3066\uff0c\u524d\u7bc0\u3067\u306f\u30de\u30cb\u30e5\u30a2\u30eb\u3067\u4e00\u3064\u305a\u3064\u4ff3\u53e5\u3092\u6295\u7a3f\u3057\u305f\uff0e\n\u591a\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3044\u308b\u3088\u3046\u306a SNS \u3067\u306f\uff0c1\u79d2\u9593\u306b\u6570\u5343\u4ef6\u4ee5\u4e0a\u306e\u6295\u7a3f\u304c\u3055\u308c\u3066\u3044\u308b\uff0e\n\u4eca\u56de\u306f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u63a1\u7528\u3057\u305f\u3053\u3068\u3067\uff0c\u305d\u306e\u3088\u3046\u306a\u77ac\u9593\u7684\u306a\u5927\u91cf\u30a2\u30af\u30bb\u30b9\u306b\u3082\u5bb9\u6613\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u304c\u81ea\u52d5\u7684\u306b\u69cb\u7bc9\u3055\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u5b9f\u8a3c\u3059\u308b\u305f\u3081\uff0c\u3053\u3053\u3067\u306f\u5927\u91cf\u306e API \u304c\u9001\u4fe1\u3055\u308c\u305f\u72b6\u6cc1\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3066\u307f\u3088\u3046\uff0e\nhandson/bashoutter/client.py\n\u306b\uff0c\u5927\u91cf\u306eAPI\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u66f8\u304b\u308c\u3066\u3044\u308b\uff0e\n\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3068\uff0c POST /haiku \u306e API \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u6307\u5b9a\u3055\u308c\u305f\u56de\u6570\u3060\u3051\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u30c6\u30b9\u30c8\u3068\u3057\u3066\uff0c API \u3092300\u56de\u5b9f\u884c\u3057\u3066\u307f\u3088\u3046\uff0e\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\n$ python client.py $ENDPOINT_URL post_many 300\n\n\u6570\u79d2\u306e\u3046\u3061\u306b\u5b9f\u884c\u304c\u5b8c\u4e86\u3059\u308b\u3060\u308d\u3046\uff0e\n\u3053\u308c\u304c\u3082\u3057\uff0c\u5358\u4e00\u306e\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u306a\u308b API \u3060\u3063\u305f\u3068\u3057\u305f\u3089\uff0c\u3053\u306e\u3088\u3046\u306a\u5927\u91cf\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u51e6\u7406\u306b\u306f\u3082\u3063\u3068\u6642\u9593\u304c\u304b\u304b\u3063\u305f\u3060\u308d\u3046\uff0e\n\u6700\u60aa\u306e\u5834\u5408\u306b\u306f\uff0c\u30b5\u30fc\u30d0\u30fc\u30c0\u30a6\u30f3\u306b\u3082\u3064\u306a\u304c\u3063\u3066\u3044\u305f\u304b\u3082\u3057\u308c\u306a\u3044\uff0e\n\u3057\u305f\u304c\u3063\u3066\uff0c\u4eca\u56de\u4f5c\u6210\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\uff0c\u3068\u3066\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u30821\u79d2\u9593\u306b\u6570\u767e\u4ef6\u306e\u51e6\u7406\u3092\u884c\u3048\u308b\u3088\u3046\u306a\uff0c\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308b\u3053\u3068\u304c\u308f\u304b\u308b\uff0e\n\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u3067\u30af\u30e9\u30a6\u30c9\u3092\u8a2d\u8a08\u3059\u308b\u3053\u3068\u306e\u5229\u70b9\u3092\u57a3\u9593\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u305f\u3060\u308d\u3046\u304b\uff1f\n\n\n\n\n\n\n\n\u5148\u8ff0\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\u5927\u91cf\u306e\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308b\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u7121\u99c4\u306a\u30c7\u30fc\u30bf\u304c\u3069\u3093\u3069\u3093\u6e9c\u307e\u3063\u3066\u3057\u307e\u3046\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u5b8c\u5168\u306b\u7a7a\u306b\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3059\u308b\uff0e\n\n$ python client.py $ENDPOINT_URL clear_database\n\n\n\n\n\n\n\n13.6. Bashoutter GUI \u3092\u52d5\u304b\u3057\u3066\u307f\u308b\n\u524d\u7bc0\u3067\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089 API \u3092\u9001\u4fe1\u3059\u308b\u6f14\u7fd2\u3092\u884c\u3063\u305f\uff0e\n\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\uff0c\u3053\u308c\u3068\u540c\u3058\u3053\u3068\u304c\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u306e\u80cc\u5f8c\u3067\u884c\u308f\u308c\uff0c\u30da\u30fc\u30b8\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b (Figure 75 \u53c2\u7167)\uff0e\n\u6700\u5f8c\u306b\uff0c API \u304c GUI \u3068\u7d71\u5408\u3055\u308c\u308b\u3068\u3069\u3046\u306a\u308b\u306e\u304b\uff0c\u898b\u3066\u307f\u3088\u3046\uff0e\nCDK \u306e\u30b3\u30fc\u30c9\u3067\uff0c Public access mode \u306e S3 \u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u305f\u3053\u3068\u3092\u601d\u3044\u51fa\u3057\u3066\u307b\u3057\u3044\uff0e\n\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\uff0c\u3053\u3053\u306b\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3088\u3046\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u4e2d\u306b gui/dist \u3068\u3044\u3046\u30d5\u30a9\u30eb\u30c0\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u306b\u306f\u30d3\u30eb\u30c9\u6e08\u307f\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4 (HTML/CSS/JavaScript) \u304c\u5165\u3063\u3066\u3044\u308b\uff0e\nAWS CLI \u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\u3053\u3068\u3067\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3092 S3 \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3088\u3046\uff0e\n\n$ aws s3 cp --recursive ./gui/dist s3://<BUCKET_NAME>\n\n\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u969b\u306f\uff0c Bashoutter \u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u884c\u3046\u3053\u3068 (./gui/dist \u306b\u6ce8\u76ee)\uff0c\u305d\u3057\u3066 <BUCKET_NAME> \u306b\u306f\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u81ea\u8eab\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u304c\u5165\u308b\u70b9\u306b\u6ce8\u610f\uff0e\n\u5ff5\u306e\u305f\u3081\uff0cAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\uff0c\u30d0\u30b1\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u308b\u70b9\u3092\u78ba\u8a8d\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\n\n\n\n\n\u306a\u304a\uff0c\u4eca\u56de\u306f GUI \u306e\u8aac\u660e\u306f\u3068\u304f\u306b\u884c\u308f\u306a\u3044\u304c\uff0c Bashoutter \u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306f Vue.js \u3068 Vuetify \u3068\u3044\u3046 UI \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u3063\u3066\u4f5c\u6210\u3057\u305f\uff0e\nVue \u3092\u4f7f\u3046\u3053\u3068\u3067\uff0c Single page application (SPA) \u306e\u6280\u8853\u3067\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u753b\u9762\u304c\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b\uff0e\n\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\nhandson/bashoutter/gui\n\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u3042\u308b\u306e\u3067\uff0c\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u78ba\u8a8d\u3057\u3066\u307f\u308b\u3068\u3088\u3044\uff0e\n\n\n\n\n\u30a2\u30c3\u30d7\u30c8\u30fc\u30c9\u304c\u5b8c\u4e86\u3057\u305f\u3068\u3053\u308d\u3067\uff0c\u7d9a\u3044\u3066\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\u306b\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u51fa\u529b\u3092\u898b\u76f4\u3057\u3066\u307f\u3088\u3046\uff0e\nBashoutter.BucketUrl= \u3067\u4e0e\u3048\u3089\u308c\u305f URL \u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b (Figure 98)\uff0e\n\u3053\u308c\u306f\uff0c\u5148\u8ff0\u3057\u305f\u3068\u304a\u308a\uff0c Public access mode \u306e S3 \u30d0\u30b1\u30c3\u30c8\u306e URL \u3067\u3042\u308b\uff0e\n\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3092\u958b\u304d\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306b S3 \u306e URL \u3092\u5165\u529b\u3057\u3078\u30a2\u30af\u30bb\u30b9\u3057\u3066\u307f\u3088\u3046\uff0e\n\u3059\u308b\u3068\uff0c Figure 103 \u306e\u3088\u3046\u306a\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\n\n\nFigure 103. \"Bashoutter\" \u306e GUI \u753b\u9762\n\n\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u305f\u3089\uff0c\u4e00\u756a\u4e0a\u306e \"API Endpoint URL\" \u3068\u66f8\u3044\u3066\u3042\u308b\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\uff0c\u4eca\u56de\u30c7\u30d7\u30ed\u30a4\u3057\u305f API Gateway \u306e URL \u3092\u5165\u529b\u3059\u308b\n(\u4eca\u56de\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\uff0cAPI Gateway \u306e URL \u306f\u30e9\u30f3\u30c0\u30e0\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u306e\u3067\u3053\u306e\u3088\u3046\u306a GUI \u306e\u4ed5\u69d8\u306b\u306a\u3063\u3066\u3044\u308b)\uff0e\n\u305d\u3046\u3057\u305f\u3089\uff0c\u753b\u9762\u306e \"REFRESH\" \u3068\u66f8\u3044\u3066\u3042\u308b\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u307f\u3088\u3046\uff0e\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4ff3\u53e5\u304c\u767b\u9332\u6e08\u307f\u3067\u3042\u308c\u3070\uff0c\u4ff3\u53e5\u306e\u4e00\u89a7\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u5404\u4ff3\u53e5\u306e\u5de6\u4e0b\u306b\u3042\u308b\u30cf\u30fc\u30c8\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\uff0c \"like\" \u306e\u7968\u3092\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u65b0\u3057\u3044\u4ff3\u53e5\u3092\u6295\u7a3f\u3059\u308b\u306b\u306f\uff0c\u4e94\u4e03\u4e94\u3068\u6295\u7a3f\u8005\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\uff0c \"POST\" \u3092\u62bc\u3059\uff0e\n\"POST\" \u3092\u62bc\u3057\u305f\u5f8c\u306f\uff0c\u518d\u3073 \"REFRESH\" \u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3053\u3068\u3067\u6700\u65b0\u306e\u4ff3\u53e5\u306e\u30ea\u30b9\u30c8\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u3059\u308b\uff0e\n\n\n13.7. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u524a\u9664\n\u3053\u308c\u3067\uff0c Bashoutter \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u5b8c\u6210\u3057\u305f\uff01\n\u3053\u306e SNS \u306f\uff0c\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3092\u901a\u3058\u3066\u4e16\u754c\u306e\u3069\u3053\u304b\u3089\u3067\u3082\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u72b6\u614b\u306b\u3042\u308b\uff0e\n\u307e\u305f\uff0c Section 13.5 \u3067\u898b\u305f\u3088\u3046\u306b\uff0c\u5927\u91cf\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u540c\u6642\u30a2\u30af\u30bb\u30b9\u306b\u3088\u308b\u8ca0\u8377\u304c\u304b\u304b\u3063\u3066\u3082\uff0c\u67d4\u8edf\u306b\u30b9\u30b1\u30fc\u30eb\u304c\u884c\u308f\u308c\u9045\u5ef6\u306a\u304f\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u6975\u3081\u3066\u7c21\u7d20\u306a\u304c\u3089\u3082\uff0c\u7acb\u6d3e\u306a\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u306e\u30b9\u30da\u30c3\u30af\u306f\u6e80\u305f\u3057\u3066\u3044\u308b\u306e\u3067\u3042\u308b\uff01\nBashoutter \u30a2\u30d7\u30ea\u3092\u5b58\u5206\u306b\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u305f\u3089\uff0c\u6700\u5f8c\u306b\u5fd8\u308c\u305a\u306b\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3088\u3046\uff0e\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u30b9\u30bf\u30c3\u30af\u306e\u524a\u9664\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\uff0e\n\n\n\n\n\n\n\n\nCDK \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u3088\u3063\u3066\u306f S3 \u306e\u30d0\u30b1\u30c3\u30c8\u304c\u7a7a\u3067\u306a\u3044\u3068\uff0c cdk destroy \u304c\u30a8\u30e9\u30fc\u3092\u51fa\u529b\u3059\u308b\u5834\u5408\u304c\u3042\u308b\uff0e\n\u3053\u306e\u5834\u5408\u306f\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3059\u308b\u524d\u306b\uff0c S3 \u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u8eab\u3092\u3059\u3079\u3066\u524a\u9664\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c S3 \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u884c\u304d\uff0c\u30d0\u30b1\u30c3\u30c8\u306e\u4e2d\u8eab\u3092\u958b\u3044\u305f\u3046\u3048\u3067\uff0c\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\uff0c \"Actions\" \u2192 \"Delete\" \u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\u3044\uff0e\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u5b9f\u884c\u3059\u308b\u306b\u306f\uff0c \u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\uff0e\n<BUCKET NAME> \u306e\u3068\u3053\u308d\u306f\uff0c\u81ea\u5206\u306e \u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d (\"BashoutterBucketXXXX\" \u3068\u3044\u3046\u30d1\u30bf\u30fc\u30f3\u306e\u540d\u524d\u304c\u3064\u3044\u3066\u3044\u308b\u306f\u305a\u3067\u3042\u308b) \u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff0e\n\n$ aws s3 rm <BUCKET NAME> --recursive\n\n\n\n\n\n\n\n13.8. \u5c0f\u62ec\n\u3053\u3053\u307e\u3067\u304c\uff0c\u672c\u66f8\u7b2c\u4e09\u90e8\u306e\u5185\u5bb9\u3067\u3042\u3063\u305f\uff0e\n\u7b2c\u4e09\u90e8\u3067\u306f\uff0c\u30af\u30e9\u30a6\u30c9\u306e\u5fdc\u7528\u3068\u3057\u3066\uff0c\u4e00\u822c\u306e\u4eba\u306b\u4f7f\u3063\u3066\u3082\u3089\u3046\u3088\u3046\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u4f5c\u308b\u306e\u304b\uff0c\u3068\u3044\u3046\u70b9\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\uff0c\u8aac\u660e\u3092\u884c\u3063\u305f\uff0e\n\u305d\u306e\u4e2d\u3067\uff0c\u5f93\u6765\u7684\u306a\u30af\u30e9\u30a6\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u3068\uff0c\u3053\u3053\u6570\u5e74\u306e\u6700\u65b0\u306e\u8a2d\u8a08\u65b9\u6cd5\u3067\u3042\u308b\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\uff0e\nSection 12 \u3067\u306f\uff0c AWS \u3067\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306e\u5b9f\u8df5\u3068\u3057\u3066\uff0c Lambda, S3, DynamoDB \u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u884c\u3063\u305f\uff0e\n\u6700\u5f8c\u306b\uff0c Section 13 \u3067\u306f\uff0c\u3053\u308c\u3089\u306e\u6280\u8853\u3092\u7d71\u5408\u3059\u308b\u3053\u3068\u3067\uff0c\u5b8c\u5168\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \"Bashoutter\" \u3092\u4f5c\u6210\u3057\u305f\uff0e\n\u3053\u308c\u3089\u306e\u6f14\u7fd2\u3092\u901a\u3058\u3066\uff0c\u4e16\u306e\u4e2d\u306e\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u3067\u304d\u4e0a\u304c\u3063\u3066\u3044\u308b\u306e\u304b\uff0c\u5c11\u3057\u7406\u89e3\u304c\u6df1\u307e\u3063\u305f\u3060\u308d\u3046\u304b\uff1f\n\u307e\u305f\uff0c\u305d\u306e\u3088\u3046\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u81ea\u5206\u304c\u4f5c\u308a\u305f\u3044\u3068\u601d\u3063\u305f\u3068\u304d\uff0c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u304c\u305d\u306e\u51fa\u767a\u70b9\u3068\u306a\u308b\u3053\u3068\u304c\u3067\u304d\u305f\u306a\u3089\u3070\u5e78\u3044\u3067\u3042\u308b\uff0e\n\n\n\n\n14. \u307e\u3068\u3081\n\n\n\n15. Appendix: \u74b0\u5883\u69cb\u7bc9\n\n\u672c\u66f8\u3092\u8aad\u307f\u9032\u3081\u308b\u306b\u3042\u305f\u3063\u3066\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u74b0\u5883\u3092\u81ea\u5206\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u3053\u3053\u3067\u306f\uff0c AWS \u3084\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u521d\u5fc3\u8005\u3092\u60f3\u5b9a\u3057\u3066\uff0c\u672c\u7ae0\u3067\u5fc5\u8981\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306a\u3069\u3092\u7c21\u5358\u306b\u89e3\u8aac\u3059\u308b\uff0e\n\u4ee5\u4e0b\u306b\u7c21\u5358\u306a\u76ee\u6b21\u3092\u793a\u305d\u3046\uff0e\n\u65e2\u306b\u74b0\u5883\u69cb\u7bc9\u304c\u6e08\u3093\u3067\u3044\u308b\u5834\u5408\u306f\u9069\u5b9c\u8aad\u307f\u98db\u3070\u3057\u3066\u3044\u305f\u3060\u304d\uff0c\u95a2\u4fc2\u306e\u3042\u308b\u7b87\u6240\u306e\u307f\u76ee\u3092\u901a\u305b\u3070\u826f\u3044\uff0e\n\n\n\nAWS \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u53d6\u5f97 (Section 15.1)\n\n\nAWS \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u4f5c\u6210 (Section 15.2)\n\n\nAWS CLI \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Section 15.3)\n\n\nAWS CDK \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Section 15.4)\n\n\nWSL \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Section 15.5)\n\n\nDocker \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Section 15.6)\n\n\nPython venv \u30af\u30a4\u30c3\u30af\u30ac\u30a4\u30c9 (Section 15.7)\n\n\n\u30cf\u30f3\u30ba\u30aa\u30f3\u5b9f\u884c\u7528\u306e Docker image \u306e\u4f7f\u3044\u65b9 (Section 15.8)\n\n\n\n\u4f7f\u7528\u3059\u308b OS \u306f Linux/Mac/Windows \u306e\u3069\u308c\u3092\u7528\u3044\u3066\u3082\u69cb\u308f\u306a\u3044\uff0e\nWindows \u306e\u30e6\u30fc\u30b6\u30fc\u306f\uff0c Windows Subsytem for Linux (WSL) \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u308b (Section 15.5)\uff0e\n\u307e\u305f\uff0c\u672c\u66f8\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\nDocker \u30a4\u30e1\u30fc\u30b8\n\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\uff0e\n\u3053\u308c\u3092\u7528\u3044\u308b\u3068\uff0c AWS CLI/CDK \u3084 Python \u306e\u8a2d\u5b9a\u306a\u3069\u3092\u30b9\u30ad\u30c3\u30d7\u3067\u304d\u308b\u306e\u3067\uff0c Docker \u306e\u4f7f\u7528\u65b9\u6cd5\u3092\u77e5\u3063\u3066\u3044\u308b\u8aad\u8005\u306b\u306f\u4fbf\u5229\u3060\u308d\u3046\uff0e\n\n15.1. AWS \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u53d6\u5f97\n\u672c\u66f8\u3067\u63d0\u4f9b\u3059\u308b\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u969b\u306b\u81ea\u5206\u3067\u8a66\u3059\u306b\u306f\uff0c\u8aad\u8005\u81ea\u8eab\u3067 AWS \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u3092\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u8a73\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u306e\u624b\u9806\u306f \u516c\u5f0f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u306b\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u305d\u3061\u3089\u3082\u53c2\u7167\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u4ee5\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u3092\u884c\u3046\uff0e\n\u307e\u305a\uff0c\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u304b\u3089 AWS \u30b3\u30f3\u30bd\u30fc\u30eb \u306b\u30a2\u30af\u30bb\u30b9\u3057\uff0c\u53f3\u4e0a\u306e Create an AWS Account \u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\n(Figure 104 \u3067\u5b9f\u7dda\u3067\u56f2\u3063\u305f\u90e8\u5206)\uff0e\n\n\n\nFigure 104. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (1): AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30a2\u30af\u30bb\u30b9\n\n\u6b21\u306b\uff0c\u9077\u79fb\u3057\u305f\u5148\u306e\u30da\u30fc\u30b8\u3067\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306a\u3069\u306e\u767b\u9332\u3092\u884c\u3046 (Figure 105)\uff0e\n\n\n\nFigure 105. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (2): \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u30fb\u30d1\u30b9\u30ef\u30fc\u30c9\u306a\u3069\u306e\u767b\u9332\uff0e\n\n\u7d9a\u3044\u3066\uff0c\u4f4f\u6240\u3084\u96fb\u8a71\u756a\u53f7\u306a\u3069\u3092\u8a0a\u304b\u308c\u308b\u306e\u3067\uff0c\u3059\u3079\u3066\u5165\u529b\u3057\u3088\u3046 (Figure 106)\uff0e\n\n\n\nFigure 106. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (3): \u4f4f\u6240\u30fb\u96fb\u8a71\u756a\u53f7\u306e\u5165\u529b\n\n\u6b21\u306b\uff0c\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u60c5\u5831\u306e\u767b\u9332\u3092\u6c42\u3081\u3089\u308c\u308b (Figure 107)\uff0e\n\u500b\u4eba\u3067 AWS \u3092\u5229\u7528\u3059\u308b\u5834\u5408\u306f\uff0c\u5229\u7528\u6599\u91d1\u306e\u8acb\u6c42\u306f\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u3092\u7d4c\u7531\u3057\u3066\u884c\u308f\u308c\u308b\uff0e\n\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u767b\u9332\u306a\u3057\u306b\u306f AWS \u3092\u4f7f\u3044\u59cb\u3081\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\uff0e\n\n\n\nFigure 107. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (4): \u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u306e\u767b\u9332\n\n\u6b21\u306e\u753b\u9762\u3067\u306f\uff0c\u643a\u5e2f\u96fb\u8a71\u306e SMS \u307e\u305f\u306f\u30dc\u30a4\u30b9\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u5229\u7528\u3057\u305f\u672c\u4eba\u78ba\u8a8d\u304c\u6c42\u3081\u3089\u308c\u308b (Figure 108)\uff0e\n\u5e0c\u671b\u306e\u8a8d\u8a3c\u65b9\u6cd5\u3092\u9078\u629e\u3057\uff0c\u81ea\u5206\u306e\u643a\u5e2f\u96fb\u8a71\u756a\u53f7\u3092\u5165\u529b\u3057\u3088\u3046\uff0e\n\n\n\nFigure 108. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (5): \u643a\u5e2f\u96fb\u8a71\u306b\u3088\u308b\u672c\u4eba\u78ba\u8a8d\n\n\u7121\u4e8b\u306b\u672c\u4eba\u78ba\u8a8d\u304c\u5b8c\u4e86\u3059\u308b\u3068\uff0c\u6700\u5f8c\u306b\u30b5\u30dd\u30fc\u30c8\u30d7\u30e9\u30f3\u306e\u9078\u629e\u3092\u6c42\u3081\u3089\u308c\u308b (Figure 109)\uff0e\n\u7121\u6599\u306e Basic support \u3092\u9078\u629e\u3057\u3066\u304a\u3051\u3070\u554f\u984c\u306a\u3044\uff0e\n\n\n\nFigure 109. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (6): \u30b5\u30dd\u30fc\u30c8\u30d7\u30e9\u30f3\u306e\u9078\u629e\n\n\u4ee5\u4e0a\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u3088\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u304c\u5b8c\u4e86\u3059\u308b (Figure 110)\uff0e\n\u65e9\u901f\u30ed\u30b0\u30a4\u30f3\u3092\u3057\u3066\uff0c AWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304a\u3053\u3046\uff0e\n\n\n\nFigure 110. \u30b5\u30a4\u30f3\u30a2\u30c3\u30d7 (7): \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u304c\u5b8c\u4e86\u3057\u305f\n\n\n\n15.2. AWS \u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u4f5c\u6210\n\n\n\n\nAWS \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\uff0e\n\n\n\u753b\u9762\u53f3\u4e0a\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\uff0c\u8868\u793a\u3055\u308c\u308b\u30d7\u30eb\u30c0\u30a6\u30f3\u30e1\u30cb\u30e5\u30fc\u304b\u3089 \"My Security Credentials\" \u3092\u9078\u629e (Figure 111)\n\n\n\"Access keys for CLI, SDK, & API access\" \u306e\u4e0b\u306b\u3042\u308b \"Create accesss key\" \u306e\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b (Figure 112)\n\n\n\u8868\u793a\u3055\u308c\u305f Access key ID, Secret access key \u3092\u8a18\u9332\u3057\u3066\u304a\u304f (\u753b\u9762\u3092\u9589\u3058\u308b\u3068\u4e8c\u5ea6\u3068\u8868\u793a\u3055\u308c\u306a\u3044)\uff0e\n\n\n\u9375\u3092\u5fd8\u308c\u3066\u3057\u307e\u3063\u305f\u5834\u5408\u306a\u3069\u306f\uff0c\u540c\u3058\u624b\u9806\u3067\u518d\u767a\u884c\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\n\n\u767a\u884c\u3057\u305f\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306f\uff0c ~/.aws/credentials \u306e\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\u304b\uff0c\u74b0\u5883\u5909\u6570\u306b\u8a2d\u5b9a\u3059\u308b\u306a\u3069\u3057\u3066\u4f7f\u3046 (\u8a73\u3057\u304f\u306f Section 15.3)\uff0e\n\n\n\n\n\n\nFigure 111. AWS \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u767a\u884c1\n\n\n\n\nFigure 112. AWS \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u767a\u884c2\n\n\n\n\n\n\n\n\nAWS Educate Starter Account \u3092\u7528\u3044\u3066\u3044\u308b\u5834\u5408\u306f\uff0c\u6b21\u306e\u624b\u9806\u3067\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\n\n\nAWS Educate \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u304b\u3089\uff0c vocareum \u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u79fb\u52d5\u3059\u308b (Figure 113)\uff0e\n\n\nAccount Details \u3092\u30af\u30ea\u30c3\u30af\u3057\uff0c\u7d9a\u3044\u3066 AWS CLI: Show \u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\uff0e\n\n\naws_access_key_id, aws_secret_access_key, aws_session_token \u304c\u8868\u793a\u3055\u308c\u308b (Figure 114)\uff0e\n\u3053\u3053\u3067\u8868\u793a\u3055\u308c\u305f\u5185\u5bb9\u3092 ~/.aws/credentials \u306b\u30b3\u30d4\u30fc\u3059\u308b (Section 15.3 \u53c2\u7167)\uff0e\naws_session_token \u306e\u7b87\u6240\u3082\u6f0f\u3089\u3055\u305a\u30b3\u30d4\u30fc\u3059\u308b\u3053\u3068\uff0e\n\n\n\u7d9a\u3044\u3066\uff0c ~/.aws/config \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u6b21\u306e\u5185\u5bb9\u3092\u66f8\u304d\u8fbc\u3080\uff0e\n\u73fe\u6642\u70b9\u3067\u306f AWS Starter Account \u306f us-east-1 \u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u3057\u304b\u5229\u7528\u3067\u304d\u306a\u3044\u305f\u3081\u3067\u3042\u308b\uff0e\n\n\n\n\n[default]\nregion = us-east-1\noutput = json\n\n\n\n\n\u4e0a\u8a18\u306e\u8aac\u660e\u3067\u306f\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u540d\u304c default \u3068\u306a\u3063\u3066\u3044\u305f\u304c\uff0c\u3053\u308c\u306f\u81ea\u5206\u306e\u597d\u304d\u306a\u540d\u524d\u306b\u5909\u66f4\u3057\u3066\u3082\u3088\u3044\uff0e\ndefault \u4ee5\u5916\u306e\u540d\u524d\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\uff0c\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b (\u8a73\u3057\u304f\u306f Section 15.3)\uff0e\n\n\n\n\n\n\nFigure 113. vocareum \u30b3\u30f3\u30bd\u30fc\u30eb\n\n\n\n\nFigure 114. vocareum \u304b\u3089 AWS \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u767a\u884c\n\n\n\n\n\n\n\n15.3. AWS CLI \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\u8aad\u8005\u306e\u305f\u3081\u306b\uff0c\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3051\u308b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u624b\u9806 (Linux \u5411\u3051) \u3092\u7c21\u5358\u306b\u8a18\u8ff0\u3059\u308b\uff0e\n\u5c06\u6765\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\uff0c\u5e38\u306b \u516c\u5f0f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3067\u6700\u65b0\u306e\u60c5\u5831\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff0e\n\n$ curl \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\n$ unzip awscliv2.zip\n$ sudo ./aws/install\n\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u305f\u304b\u78ba\u8a8d\u3059\u308b\u305f\u3081\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3063\u3066\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831\u304c\u51fa\u529b\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u3067\u304d\u305f\u3089\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\u521d\u671f\u8a2d\u5b9a\u3092\u884c\u3046\n(\u53c2\u7167)\uff0e\n\n\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\uff0c AWS Access Key ID, AWS Secret Access Key \u3092\u5165\u529b\u3059\u308b\u3088\u3046\u6307\u793a\u3055\u308c\u308b\uff0e\n\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u767a\u884c\u306b\u3064\u3044\u3066\u306f Section 15.2 \u3092\u53c2\u7167\uff0e\n\u30b3\u30de\u30f3\u30c9\u306f\u52a0\u3048\u3066\uff0cDefault region name \u3092\u8a0a\u3044\u3066\u304f\u308b\uff0e\n\u3053\u3053\u306b\u306f\u81ea\u5206\u306e\u597d\u304d\u306a\u5730\u57df (\u4f8b\u3048\u3070 ap-northeast-1 =\u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3) \u3092\u6307\u5b9a\u3059\u308c\u3070\u3088\u3044\uff0e\n\u6700\u5f8c\u306e Default output format \u306f json \u3068\u3057\u3066\u304a\u304f\u3068\u3088\u3044\uff0e\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b8c\u4e86\u3059\u308b\u3068\uff0c ~/.aws/credentials \u3068 ~/.aws/config\u3000\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u5ff5\u306e\u305f\u3081\uff0c cat \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u4e2d\u8eab\u3092\u78ba\u8a8d\u3057\u3066\u307f\u308b\u3068\u3088\u3044\uff0e\n\n$ cat ~/.aws/credentials\n[default]\naws_access_key_id = XXXXXXXXXXXXXXXXXX\naws_secret_access_key = YYYYYYYYYYYYYYYYYYY\n\n$ cat ~/.aws/config\n[profile default]\nregion = ap-northeast-1\noutput = json\n\n~/.aws/credentials \u306b\u306f\u8a8d\u8a3c\u9375\u306e\u60c5\u5831\u304c\uff0c ~/.aws/config \u306b\u306f AWS CLI \u306e\u8a2d\u5b9a\u304c\u8a18\u9332\u3055\u308c\u3066\u3044\u308b\uff0e\n\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\uff0c [default] \u3068\u3044\u3046\u540d\u524d\u3067\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u304c\u4fdd\u5b58\u3055\u308c\u308b\uff0e\n\u3044\u304f\u3064\u304b\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3044\u5206\u3051\u305f\u3051\u308c\u3070\uff0c default \u306e\u4f8b\u306b\u5f93\u3063\u3066\uff0c\u305f\u3068\u3048\u3070 [myprofile] \u306a\u3069\u3068\u3044\u3046\u540d\u524d\u3067\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3059\u308c\u3070\u3088\u3044\uff0e\nAWS CLI \u3067\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3064\u3068\u304d\u306b\uff0c\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3044\u5206\u3051\u308b\u306b\u306f\uff0c\n\n$ aws s3 ls --profile myprofile\n\n\u306e\u3088\u3046\u306b\uff0c --profile \u3068\u3044\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3064\u3051\u3066\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\u3044\u3061\u3044\u3061 --profile \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3064\u3051\u308b\u306e\u304c\u9762\u5012\u3060\u3068\u611f\u3058\u308b\u5834\u5408\u306f\uff0c AWS_PROFILE \u3068\u3044\u3046\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3088\u3044\uff0e\n\n$ export AWS_PROFILE=myprofile\n\n\u3042\u308b\u3044\u306f\uff0c\u8a8d\u8a3c\u60c5\u5831\u306a\u3069\u3092\u74b0\u5883\u5909\u6570\u306b\u8a2d\u5b9a\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af\u3082\u3042\u308b\uff0e\n\nexport AWS_ACCESS_KEY_ID=XXXXXX\nexport AWS_SECRET_ACCESS_KEY=YYYYYY\nexport AWS_DEFAULT_REGION=ap-northeast-1\n\n\u3053\u308c\u3089\u306e\u74b0\u5883\u5909\u6570\u306f\uff0c ~/.aws/credentials \u3088\u308a\u3082\u9ad8\u3044\u512a\u5148\u5ea6\u3092\u3082\u3064\u306e\u3067\uff0c\u74b0\u5883\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308c\u3070\u305d\u3061\u3089\u306e\u60c5\u5831\u304c\u4f7f\u7528\u3055\u308c\u308b\n(\u53c2\u7167)\uff0e\n\n\n\n\n\n\n\nAWS Educate Starter Account \u306f us-east-1 \u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b (\u57f7\u7b46\u6642\u70b9\u3067\u306e\u60c5\u5831)\uff0e\n\u3088\u3063\u3066\uff0c AWS Educate Starter Account \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306f\uff0c default region \u3092 us-east-1 \u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\n\n\n\n\n\n15.4. AWS CDK \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\u8aad\u8005\u306e\u305f\u3081\u306b\uff0c\u57f7\u7b46\u6642\u70b9\u306b\u304a\u3051\u308b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u624b\u9806 (Linux \u5411\u3051) \u3092\u7c21\u5358\u306b\u8a18\u8ff0\u3059\u308b\uff0e\n\u5c06\u6765\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\uff0c\u5e38\u306b \u516c\u5f0f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3067\u6700\u65b0\u306e\u60c5\u5831\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3053\u3068\u3092\u5fd8\u308c\u305a\u306b\uff0e\nNode.js \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308c\u3070\uff0c\u57fa\u672c\u7684\u306b\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308c\u3070\u3088\u3044\uff0e\n\n$ sudo npm install -g aws-cdk\n\n\n\n\n\n\n\n\n\u672c\u66f8\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306fAWS CDK version 1.100.0 \u3067\u958b\u767a\u3057\u305f\uff0e\nCDK \u306f\u958b\u767a\u9014\u4e0a\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306a\u306e\u3067\uff0c\u5c06\u6765\u7684\u306bAPI\u304c\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\uff0e\nAPI\u306e\u5909\u66f4\u306b\u3088\u308a\u30a8\u30e9\u30fc\u304c\u751f\u3058\u305f\u5834\u5408\u306f\uff0c version 1.100.0 \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3059\u308b\uff0e\n\n$ npm install -g aws-cdk@1.100\n\n\n\n\n\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u305f\u304b\u78ba\u8a8d\u3059\u308b\u305f\u3081\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3063\u3066\u6b63\u3057\u304f\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u3067\u304d\u305f\u3089\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308aAWS\u5074\u306e\u521d\u671f\u8a2d\u5b9a\u3092\u884c\u3046\uff0e\n\u3053\u308c\u306f\u4e00\u5ea6\u5b9f\u884c\u3059\u308c\u3070OK\uff0e\n\n\n\n\n\n\n\n\ncdk bootstrap \u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306f\uff0cAWS\u306e\u8a8d\u8a3c\u60c5\u5831\u3068\u30ea\u30fc\u30b8\u30e7\u30f3\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f ~/.aws/config \u306b\u3042\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3055\u308c\u308b\uff0e\n\u30c7\u30d5\u30a9\u30eb\u30c8\u4ee5\u5916\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u3044\u308b\u3068\u304d\u306f Section 15.3 \u3067\u7d39\u4ecb\u3057\u305f\u30c6\u30af\u30cb\u30c3\u30af\u3092\u4f7f\u3063\u3066\u5207\u308a\u66ff\u3048\u308b\uff0e\n\n\n\n\n\n\n\n\n\n\n\nAWS CDK \u306e\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u306f AWS CLI \u3068\u57fa\u672c\u7684\u306b\u540c\u3058\u3067\u3042\u308b\uff0e\u8a73\u3057\u304f\u306f Section 15.3 \u3092\u53c2\u7167\uff0e\n\n\n\n\n\n\n15.5. WSL \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\u672c\u66f8\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089 AWS CLI \u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u305f\u308a\uff0c Python \u3067\u66f8\u304b\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\u30b3\u30de\u30f3\u30c9\u306f\u57fa\u672c\u7684\u306b UNIX \u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u60f3\u5b9a\u3057\u3066\u66f8\u304b\u308c\u3066\u3044\u308b\uff0e\nLinux \u3084 Mac \u306e\u30e6\u30fc\u30b6\u30fc\u306f OS \u306b\u6a19\u6e96\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u7528\u3044\u308c\u3070\u826f\u3044\uff0e\nWindows \u3092\u5229\u7528\u3057\u3066\u3044\u308b\u8aad\u8005\u306f\uff0c\nWindows Subsystem for Linux (WSL)\n\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u4eee\u60f3\u306e Linux \u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3059\u308b\uff0e\nCygwin\n\u306a\u3069\u306e Linux \u74b0\u5883\u3092\u30a8\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\u307b\u304b\u306e\u30c4\u30fc\u30eb\u3067\u3082\u69cb\u308f\u306a\u3044\u304c\uff0c\u672c\u66f8\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306f WSL \u3067\u306e\u307f\u52d5\u4f5c\u78ba\u8a8d\u3092\u884c\u3063\u3066\u3044\u308b\uff0e\nWSL \u3068\u306f\uff0c Windows \u306e OS \u4e0a\u3067 Linux \u306e\u4eee\u60f3\u74b0\u5883\u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306e\uff0c Microsoft \u793e\u304c\u516c\u5f0f\u3067\u63d0\u4f9b\u3057\u3066\u3044\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3042\u308b\uff0e\nUbuntu \u306a\u3069\u5e0c\u671b\u306e Linux distribution \u304c\u9078\u629e\u3067\u304d\uff0c\u57fa\u672c\u7684\u306b\u3059\u3079\u3066\u306e Linux \u5411\u3051\u306b\u4f5c\u3089\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u30fb\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u57f7\u7b46\u6642\u70b9\u3067\u306f\nWSL 2\n\u304c\u6700\u65b0\u7248\u3068\u3057\u3066\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u4ee5\u4e0b\u3067\u306f WSL 2 \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u3092\u7c21\u5358\u306b\u8aac\u660e\u3059\u308b\uff0e\n\u7d30\u304b\u306a\u8a73\u7d30\u306a\u3069\u306f\uff0c\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\n\u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\n\u524d\u63d0\u3068\u3057\u3066\uff0c\u4f7f\u7528\u3055\u308c\u308b OS \u306f Windows 10 (Pro \u307e\u305f\u306f Home \u30a8\u30c7\u30a3\u30b7\u30e7\u30f3) \u3067\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u3055\u3089\u306b\uff0c\u4f7f\u7528\u3057\u3066\u3044\u308b Windows 10\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304cWSL\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3042\u308b\u304b\u3092\u78ba\u8a8d\u3059\u308b\uff0e\nX64 \u306e\u30b7\u30b9\u30c6\u30e0\u3067\u306f Version 1903, Build 18362 \u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001 Windows \u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u884c\u3046\uff0e\n\u307e\u305a\u6700\u521d\u306b\uff0c Administrator \u6a29\u9650\u3067 PowerShell \u3092\u8d77\u52d5\u3059\u308b (Figure 115)\uff0e\n\u5de6\u4e0b\u306e Windows \u30e1\u30cb\u30e5\u30fc\u306e\u691c\u7d22\u30d0\u30fc\u306b powershell \u3068\u5165\u529b\u3059\u308b\u3068\uff0c PowerShell \u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b\uff0c\n\u3053\u308c\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3001 Run as administrator \u3092\u9078\u629e\u3057\u8d77\u52d5\u3059\u308b\uff0e\n\n\n\nFigure 115. \u7ba1\u7406\u8005\u6a29\u9650\u3067\u306e PowerShell \u306e\u8d77\u52d5\n\nPowerShell \u304c\u8d77\u52d5\u3057\u305f\u3089\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\uff0e\n\ndism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart\n\n\u5b9f\u884c\u3057\u3066\u3001\u201cThe operation completed successfully.\u201d \u3068\u51fa\u529b\u3055\u308c\u308b\u306e\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\u3053\u308c\u3067 WSL \u304c enable \u3055\u308c\u308b\uff0e\n\u6b21\u306b\uff0c\u5148\u307b\u3069\u3068\u540c\u3058 Administrator \u6a29\u9650\u3067\u958b\u3044\u305f PowerShell \u3067\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3002\n\ndism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart\n\n\u5b9f\u884c\u3057\u3066\uff0c \u201cThe operation completed successfully.\u201d \u3068\u51fa\u529b\u3055\u308c\u308b\u306e\u3092\u78ba\u8a8d\u3059\u308b\uff0e\n\u3053\u308c\u304c\u78ba\u8a8d\u51fa\u6765\u305f\u3089\u3001\u4e00\u5ea6\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3092\u518d\u8d77\u52d5\u3059\u308b\uff0e\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30d6\u30eb\u30af\u30ea\u30c3\u30af\u3057\u3066\u5b9f\u884c\u3059\u308b\uff0e\n\u30c0\u30a4\u30a2\u30ed\u30b0\u306b\u5f93\u3063\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u5b8c\u4e86\u3055\u305b\u308b\uff0e\n\u305d\u3046\u3057\u305f\u3089\uff0c\u518d\u3073 PowerShell \u3092\u958b\u304d\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3002\n\nwsl --set-default-version 2\n\n\u6700\u5f8c\u306b\u3001\u81ea\u5206\u306e\u597d\u307f\u306e Linux distribution \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\n\u3053\u3053\u3067\u306f Ubuntu 20.04 \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3088\u3046\uff0e\nMicrosoft store \u306e\u30a2\u30d7\u30ea\u3092\u8d77\u52d5\u3057\uff0c\u691c\u7d22\u30d0\u30fc\u306b Ubuntu \u3068\u5165\u529b\u3059\u308b\uff0e\nUbuntu 20.04 LTS \u3068\u3044\u3046\u9805\u76ee\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u306a\u306e\u3067\uff0c\u305d\u308c\u3092\u958b\u304d\uff0c \u201cGet\u201d \u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b (Figure 116)\uff0e\n\u3057\u3070\u3089\u304f\u5f85\u3064\u3068\uff0c Ubuntu 20.04 \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3059\u308b\uff0e\n\n\n\nFigure 116. Microsoft store \u304b\u3089 Ubuntu 20.04 \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\nUbuntu 20.04 \u3092\u521d\u56de\u306b\u8d77\u52d5\u3059\u308b\u3068\uff0c\u521d\u671f\u8a2d\u5b9a\u304c\u81ea\u52d5\u3067\u958b\u59cb\u3055\u308c\uff0c\u6570\u5206\u5f85\u3064\u3053\u3068\u306b\u306a\u308b\uff0e\n\u521d\u671f\u8a2d\u5b9a\u304c\u7d42\u308f\u308b\u3068\uff0c\u30e6\u30fc\u30b6\u30fc\u540d\u30fb\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u3088\u3046\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u51fa\u308b\u306e\u3067\uff0c\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u5f93\u3044\u5165\u529b\u3059\u308b\uff0e\n\u3053\u308c\u3067 WSL2 \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3057\u305f\uff0e\n\u65e9\u901f WSL2 \u3092\u8d77\u52d5\u3057\u3066\u307f\u3088\u3046\uff0e\n\u5de6\u4e0b\u306e Windows \u30e1\u30cb\u30e5\u30fc\u306e\u691c\u7d22\u30d0\u30fc\u306b Ubuntu \u3068\u5165\u529b\u3059\u308b\u3068\uff0c Ubuntu 20.04 \u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b (Figure 117)\uff0e\n\u30af\u30ea\u30c3\u30af\u3057\u3066\u8d77\u52d5\u3057\u3088\u3046\uff0e\n\n\n\nFigure 117. Ubuntu 20.04 \u306e\u8d77\u52d5\n\n\u3059\u308b\u3068\uff0c\u30bf\u30fc\u30df\u30ca\u30eb\u306e\u9ed2\u3044\u753b\u9762\u304c\u7acb\u3061\u4e0a\u304c\u308b\u3060\u308d\u3046 (Figure 118)\uff0e\nls, top \u306a\u3069\u306e\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3063\u3066\u307f\u3066\uff0c WSL \u304c\u304d\u3061\u3093\u3068\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046\uff0e\n\n\n\nFigure 118. WSL \u306e\u8d77\u52d5\u753b\u9762\n\n\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066\uff0c\nWindows Terminal\n\u3068\u3044\u3046\u30de\u30a4\u30af\u30ed\u30bd\u30d5\u30c8\u304b\u3089\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u30c4\u30fc\u30eb\u3092\u4f7f\u3046\u3068\uff0c\u3088\u308a\u5feb\u9069\u306b WSL \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u3053\u3061\u3089\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3082\u63a8\u5968\u3059\u308b\uff0e\n\n\n15.6. Docker \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nDocker \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u65b9\u6cd5\u306f OS \u306b\u3088\u3063\u3066\u7570\u306a\u308b\uff0e\nMac \u30e6\u30fc\u30b6\u30fc\u306f\uff0c Docker Desktop \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u65b9\u6cd5\u306f\uff0c\nDocker \u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\n\u304b\u3089\uff0c Mac \u7248\u306e Docker Desktop \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30d6\u30eb\u30af\u30ea\u30c3\u30af\u3057\uff0c Applications \u306e\u30d5\u30a9\u30eb\u30c0\u306b\u30c9\u30e9\u30c3\u30b0\u3059\u308b\u3060\u3051\u3067\u826f\u3044\uff0e\n\u8a73\u7d30\u306f\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\n\u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\nWindows \u306e\u30e6\u30fc\u30b6\u30fc\u306f\uff0cDocker Desktop \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\uff0e\n\u305d\u306e\u969b\uff0c WSL 2 \u304c\u4e8b\u524d\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u8a73\u7d30\u306f\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\n\u3092\u53c2\u7167\u306e\u3053\u3068\uff0e\nDocker Desktop \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3068\uff0c WSL \u304b\u3089\u3082 docker \u30b3\u30de\u30f3\u30c9\u304c\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\uff0e\nLinux \u30e6\u30fc\u30b6\u30fc (\u7279\u306b Ubuntu \u30e6\u30fc\u30b6\u30fc) \u306b\u3064\u3044\u3066\u306f\uff0c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u65b9\u6cd5\u306f\u3044\u304f\u3064\u304b\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308b\uff0e\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\n\u306b\u3044\u304f\u3064\u304b\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u65b9\u6cd5\u304c\u793a\u3055\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u8a73\u3057\u3044\u60c5\u5831\u306f\u305d\u3061\u3089\u3092\u53c2\u7167\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\u6700\u3082\u7c21\u5358\u306a\u65b9\u6cd5\u306f\uff0c Docker \u304c\u516c\u5f0f\u3067\u63d0\u4f9b\u3057\u3066\u3044\u308b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7528\u3044\u308b\u65b9\u6cd5\u3067\u3042\u308b\uff0e\n\u3053\u306e\u5834\u5408\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067 Docker \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u308b\uff0e\n\n$ curl -fsSL https://get.docker.com -o get-docker.sh\n$ sudo sh get-docker.sh\n\n\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\uff0c root \u30e6\u30fc\u30b6\u30fc\u306e\u307f\u304c docker \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3067\u304d\u308b\u8a2d\u5b9a\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\n\u5f93\u3063\u3066\uff0c\u30b3\u30de\u30f3\u30c9\u306b\u306f\u6bce\u56de sudo \u3092\u4ed8\u3051\u52a0\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e\n\u3053\u308c\u304c\u9762\u5012\u3060\u3068\u611f\u3058\u308b\u5834\u5408\u306f\uff0c\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u3088\u308a\uff0c\u4f7f\u7528\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u3092 docker \u3068\u3044\u3046\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b (\u8a73\u7d30\u306f\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \"Post-installation steps for Linux\"\n\u3092\u53c2\u7167)\uff0e\n\u307e\u305a\u6700\u521d\u306b\uff0c docker \u3068\u3044\u3046\u540d\u524d\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b\uff0e\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3088\u3063\u3066\u306f\uff0c\u65e2\u306b docker \u30b0\u30eb\u30fc\u30d7\u304c\u4f5c\u3089\u308c\u3066\u3044\u308b\u5834\u5408\u3082\u3042\u308b\uff0e\n\n\u6b21\u306b\uff0c\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30e6\u30fc\u30b6\u30fc\u3092 docker \u30b0\u30eb\u30fc\u30d7\u306b\u52a0\u3048\u308b\uff0e\n\n$ sudo usermod -aG docker $USER\n\n\u3053\u3053\u307e\u3067\u3067\u304d\u305f\u3089\uff0c\u4e00\u5ea6\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\uff0c\u518d\u5ea6\u30ed\u30b0\u30a4\u30f3\u3059\u308b\uff0e\n\u3053\u308c\u306b\u3088\u3063\u3066\uff0c\u30b0\u30eb\u30fc\u30d7\u306e\u5909\u66f4\u304c\u30bf\u30fc\u30df\u30ca\u30eb\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u53cd\u6620\u3055\u308c\u308b\uff0e\n\u8a2d\u5b9a\u304c\u6b63\u3057\u304f\u3067\u304d\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u307f\u308b\uff0e\n\nsudo \u306a\u3057\u3067\u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u3067\u304d\u305f\u306a\u3089\u3070\uff0c\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3067\u3042\u308b\uff0e\n\n\n15.7. Python venv \u30af\u30a4\u30c3\u30af\u30ac\u30a4\u30c9\n\u4ed6\u4eba\u304b\u3089\u3082\u3089\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\uff0c numpy \u3084 scipy \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u9055\u3046\uff01\u306a\u3069\u306e\u7406\u7531\u3067\uff0c\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u52d5\u304b\u306a\u3044\uff0c\u3068\u3044\u3046\u7d4c\u9a13\u3092\u3057\u305f\u3053\u3068\u304c\u3042\u308b\u4eba\u306f\u591a\u3044\u306e\u3067\u306f\u306a\u3044\u3060\u308d\u3046\u304b\uff0e\n\u3082\u3057\uff0c\u81ea\u5206\u306e\u8a08\u7b97\u6a5f\u306e\u4e2d\u306b\u4e00\u3064\u3057\u304b Python \u74b0\u5883\u304c\u306a\u3044\u3068\u3059\u308b\u3068\uff0c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5207\u308a\u66ff\u3048\u308b\u3054\u3068\u306b\u6b63\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u76f4\u3055\u306a\u3051\u308c\u3070\u306a\u3089\u305a\uff0c\u3053\u308c\u306f\u5927\u5909\u306a\u624b\u9593\u3067\u3042\u308b\uff0e\n\u30b3\u30fc\u30c9\u306e\u30b7\u30a7\u30a2\u3092\u3088\u308a\u30b9\u30e0\u30fc\u30ba\u306b\u3059\u308b\u305f\u3081\u306b\u306f\uff0c\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3054\u3068\u306b\u7ba1\u7406\u3055\u308c\u308b\u3079\u304d\u3067\u3042\u308b\uff0e\n\u305d\u308c\u3092\u53ef\u80fd\u306b\u3059\u308b\u306e\u304c Python \u4eee\u60f3\u74b0\u5883\u3068\u3088\u3070\u308c\u308b\u30c4\u30fc\u30eb\u3067\u3042\u308a\uff0c venv, pyenv, conda \u306a\u3069\u304c\u3088\u304f\u4f7f\u308f\u308c\u308b\uff0e\n\u305d\u306e\u306a\u304b\u3067\u3082\uff0c venv \u306f Python \u306b\u6a19\u6e96\u642d\u8f09\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3068\u3066\u3082\u4fbf\u5229\u3067\u3042\u308b\uff0e\npyenv \u3084 conda \u306f\uff0c\u5225\u9014\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u5fc5\u8981\u304c\u3042\u308b\u304c\uff0c\u305d\u308c\u305e\u308c\u306e\u9577\u6240\u3082\u3042\u308b\uff0e\nvenv \u3092\u4f7f\u3063\u3066\u4eee\u60f3\u74b0\u5883\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\uff0c\n\n\u3068\u5b9f\u884c\u3059\u308b\uff0e\n\u3053\u308c\u306b\u3088\u308a .env/ \u3068\u3044\u3046\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u4f5c\u3089\u308c\uff0c\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4f9d\u5b58\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4fdd\u5b58\u3055\u308c\u308b\u3053\u3068\u306b\u306a\u308b\uff0e\n\u3053\u306e\u65b0\u305f\u306a\u4eee\u60f3\u74b0\u5883\u3092\u8d77\u52d5\u3059\u308b\u306b\u306f\n\n$ source .env/bin/activate\n\n\u3068\u5b9f\u884c\u3059\u308b\uff0e\n\u30b7\u30a7\u30eb\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u306b (.env) \u3068\u3044\u3046\u6587\u5b57\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3088\u3046 (Figure 119)\uff0e\n\u3053\u308c\u304c\uff0c \"\u3044\u307e\u3042\u306a\u305f\u306f venv \u306e\u4e2d\u306b\u3044\u307e\u3059\u3088\" \u3068\u3044\u3046\u3057\u308b\u3057\u306b\u306a\u308b\uff0e\n\n\n\nFigure 119. venv \u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\n\n\u4eee\u60f3\u74b0\u5883\u3092\u8d77\u52d5\u3059\u308b\u3068\uff0c\u305d\u308c\u4ee5\u964d\u5b9f\u884c\u3059\u308b pip \u30b3\u30de\u30f3\u30c9\u306f\uff0c .env/ \u4ee5\u4e0b\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u308b\uff0e\u3053\u306e\u3088\u3046\u306b\u3057\u3066\uff0c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3054\u3068\u306b\u4f7f\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5207\u308a\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\nPython \u3067\u306f requirements.txt \u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u306b\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u8a18\u8ff0\u3059\u308b\u306e\u304c\u4e00\u822c\u7684\u306a\u6163\u4f8b\u3067\u3042\u308b\uff0e\u4ed6\u4eba\u304b\u3089\u3082\u3089\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\uff0c requirements.txt \u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308c\u3070\uff0c\n\n$ pip install -r requirements.txt\n\n\u3068\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\uff0c\u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\uff0c\u77ac\u6642\u306b Python \u74b0\u5883\u3092\u518d\u73fe\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\nvenv \u306b\u3088\u308b\u4eee\u60f3\u74b0\u5883\u3092\u4fdd\u5b58\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u540d\u524d\u306f\u4efb\u610f\u306b\u9078\u3079\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304c\uff0c .env \u3068\u3044\u3046\u540d\u524d\u3092\u7528\u3044\u308b\u306e\u304c\u4e00\u822c\u7684\u3067\u3042\u308b\uff0e\n\n\n\n\n\n\n15.8. \u30cf\u30f3\u30ba\u30aa\u30f3\u5b9f\u884c\u7528\u306e Docker image \u306e\u4f7f\u3044\u65b9\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\uff0c Node.js, Python, AWS CDK \u306a\u3069\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f Docker image \u3092\u7528\u610f\u3057\u305f\uff0e\n\u3053\u308c\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\uff0c\u81ea\u5206\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306b\u8af8\u3005\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u306a\u304f\uff0c\u3059\u3050\u306b\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u3067\u304d\u308b\uff0e\n\n\n\n\n\n\n\n\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u3044\u304f\u3064\u304b\u306e\u30b3\u30de\u30f3\u30c9\u306f Docker \u306e\u5916 = \u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306e\u30ea\u30a2\u30eb\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\uff0e\n\u305d\u308c\u3089\u306b\u3064\u3044\u3066\u306f\u30cf\u30f3\u30ba\u30aa\u30f3\u306e\u8a72\u5f53\u7b87\u6240\u306b\u6ce8\u610f\u66f8\u304d\u3068\u3057\u3066\u8a18\u3057\u3066\u3042\u308b\uff0e\n\n\n\n\n\n\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3059\u308b\uff0e\n\n$ docker run -it tomomano/labc:latest\n\n\u521d\u56de\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u307f\uff0c\u30a4\u30e1\u30fc\u30b8\u304c Docker Hub \u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 (pull) \u3055\u308c\u308b\uff0e\n\u4e8c\u56de\u76ee\u4ee5\u964d\u306f\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u4f7f\u7528\u3055\u308c\u308b\uff0e\n\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3059\u308b\u3068\uff0c\u6b21\u306e\u3088\u3046\u306a\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30b7\u30a7\u30eb\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3042\u308b (\u8d77\u52d5\u6642\u306b -it \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3064\u3051\u305f\u306e\u304c\u30dd\u30a4\u30f3\u30c8\u3067\u3042\u308b)\uff0e\n\n\u3053\u306e\u72b6\u614b\u3067 ls \u30b3\u30de\u30f3\u30c9\u3092\u6253\u3064\u3068\uff0c handson/ \u3068\u3044\u3046\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3053\u3053\u306b cd \u3059\u308b\uff0e\n\n\u3059\u308b\u3068\uff0c\u5404\u30cf\u30f3\u30ba\u30aa\u30f3\u3054\u3068\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3042\u308b\uff0e\n\u3042\u3068\u306f\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3054\u3068\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u79fb\u52d5\u3057\uff0c\u30cf\u30f3\u30ba\u30aa\u30f3\u3054\u3068\u306e virtualenv \u3092\u4f5c\u6210\u3057\uff0c\u30b9\u30bf\u30c3\u30af\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u884c\u3048\u3070\u3088\u3044 (Section 4.4 \u306a\u3069\u53c2\u7167)\uff0e\n\u30cf\u30f3\u30ba\u30aa\u30f3\u3054\u3068\u306b\u4f7f\u7528\u3059\u308b\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u7570\u306a\u308b\u306e\u3067\uff0c\u305d\u308c\u305e\u308c\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3054\u3068\u306b virtualenv \u3092\u4f5c\u6210\u3059\u308b\u3068\u3044\u3046\u8a2d\u8a08\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\nAWS \u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u5fd8\u308c\u305a\u306b\uff0e\nSection 15.3 \u3067\u8a18\u8ff0\u3057\u305f\u3088\u3046\u306b\uff0c AWS_ACCESS_KEY_ID \u306a\u3069\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u306e\u304c\u7c21\u5358\u306a\u65b9\u6cd5\u3067\u3042\u308b\uff0e\n\u3042\u308b\u3044\u306f\uff0c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306e ~/.aws/credentials \u306b\u8a8d\u8a3c\u60c5\u5831\u304c\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u308b\u306a\u3089\uff0c\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u3067\uff0c\u540c\u3058\u8a8d\u8a3c\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30f3\u30c6\u30ca\u5185\u90e8\u304b\u3089\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3042\u308b\uff0e\n\u3053\u306e\u9078\u629e\u80a2\u3092\u53d6\u308b\u5834\u5408\u306f\uff0c\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3059\u308b\uff0e\n\n$ docker run -it -v ~/.aws:/root/.aws:ro tomomano/labc:latest\n\n\u3053\u308c\u306b\u3088\u308a\uff0c\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306e ~/.aws \u3092\u30b3\u30f3\u30c6\u30ca\u306e /root/.aws \u306b\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e\n\u6700\u5f8c\u306e :ro \u306f read-only \u3092\u610f\u5473\u3059\u308b\uff0e\n\u5927\u5207\u306a\u8a8d\u8a3c\u30d5\u30a1\u30a4\u30eb\u304c\u8aa4\u3063\u3066\u66f8\u304d\u63db\u3048\u3089\u308c\u3066\u3057\u307e\u308f\u306a\u3044\u3088\u3046\u306b\uff0c read-only \u306e\u30d5\u30e9\u30b0\u3092\u3064\u3051\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3059\u308b\uff0e\n\n\n\n\n\n\n\n/root/ \u304c\u30b3\u30f3\u30c6\u30ca\u74b0\u5883\u306b\u304a\u3051\u308b\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3042\u308b\uff0e\n\u3053\u3053\u3067\u7d39\u4ecb\u3057\u305f\u8a8d\u8a3c\u30d5\u30a1\u30a4\u30eb\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af\u306f\uff0c SSH \u9375\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u6e21\u3059\u3068\u304d\u306a\u3069\u306b\u3082\u4f7f\u3048\u308b\uff0e\n\n\n\n\n\n\n\n\n16. \u8b1d\u8f9e\n\n\u672c\u539f\u7a3f\u306e\u57f7\u7b46\u306b\u3042\u305f\u308a\uff0c\u4ee5\u4e0b\u306e\u65b9\u3005\u304b\u3089\u306e\u5354\u529b\u3092\u5f97\u305f\uff0e\u3053\u306e\u5834\u3092\u501f\u308a\u3066\uff0c\u611f\u8b1d\u3092\u8868\u3057\u305f\u3044\uff0e\n2021\u5e74\u30d0\u30fc\u30b8\u30e7\u30f3\u306e contributors\n\n\n\n\u9999\u53d6\u771f\u77e5\u5b50\u6c0f - \u30cf\u30f3\u30ba\u30aa\u30f3\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u52d5\u4f5c\u78ba\u8a8d\uff0c\u6587\u7ae0\u6821\u95b2\n\n\n\n\n\n\n\n\u52dd\u4fe3\u656c\u5bdb\u6c0f - Docker \u30a4\u30e1\u30fc\u30b8\u306e\u4f5c\u6210\n\n\n\u9999\u53d6\u771f\u77e5\u5b50\u6c0f - \u30cf\u30f3\u30ba\u30aa\u30f3\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u52d5\u4f5c\u78ba\u8a8d\n\n\n@shuuji3 - MR !15\n\n\n@takatama_jp - MR !14\n\n\n\n\n\u307e\u305f\uff0c\u672c\u66f8\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u6559\u79d1\u66f8\u3068\u3057\u3066\uff0c\u3059\u3079\u3066\u306e\u8aad\u8005\u30fb\u30c7\u30a3\u30d9\u30ed\u30c3\u30d1\u30fc\u304b\u3089\u306e\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u53d7\u3051\u4ed8\u3051\u3066\u3044\u308b\uff0e\n\u8aa4\u690d\u3084\u8a18\u8ff0\u306e\u8aa4\u308a\uff0c\u6539\u5584\u70b9\u306a\u3069\u898b\u3064\u304b\u3063\u305f\u3089\uff0c\u305c\u3072 Issues \u3084 Pull request \u3092\u6295\u7a3f\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff0e\n\n\n\n17. \u8457\u8005\u7d39\u4ecb\n\n\u771f\u91ce \u667a\u4e4b (Tomoyuki Mano)\n\u60c5\u5831\u7406\u5de5\u5b66\u535a\u58eb (\u6771\u4eac\u5927\u5b66\u5927\u5b66\u9662\u60c5\u5831\u7406\u5de5\u5b66\u7cfb\u7814\u7a76\u79d1\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u5b66\u5c02\u653b)\uff0e\n2021\u5e74\u3088\u308a\u65e5\u672c\u5b66\u8853\u632f\u8208\u4f1a\u7279\u5225\u7814\u7a76\u54e1 (PD) (\u73fe\u8077)\uff0e\n\u6c96\u7e04\u79d1\u5b66\u6280\u8853\u5927\u5b66\u9662\u5927\u5b66 (OIST) \u306b\u3066\u30dd\u30b9\u30c9\u30af\u7814\u7a76\u54e1\u3068\u3057\u3066\u50cd\u304f\uff0e\n\u73fe\u5728\u306e\u7814\u7a76\u5206\u91ce\u306f\u795e\u7d4c\u79d1\u5b66\u30fb\u795e\u7d4c\u60c5\u5831\u5b66\uff0e\n\u8da3\u5473\u306f\u6599\u7406\u30fb\u30e9\u30f3\u30cb\u30f3\u30b0\u30fb\u9244\u9053\u30fb\u30a2\u30cb\u30e1\uff0c\u6751\u4e0a\u6625\u6a39\u306e\u71b1\u70c8\u306a\u611b\u8aad\u5bb6\uff0e\n\n\n\n\n\n18. \u30e9\u30a4\u30bb\u30f3\u30b9\n\n\n\u6559\u80b2\u306a\u3069\u975e\u5546\u7528\u306e\u76ee\u7684\u3067\u306e\u672c\u6559\u79d1\u66f8\u306e\u4f7f\u7528\u3084\u518d\u914d\u5e03\u306f\u81ea\u7531\u306b\u884c\u3046\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e\n\u5546\u7528\u76ee\u7684\u3067\u672c\u66f8\u306e\u5168\u4f53\u307e\u305f\u306f\u305d\u306e\u4e00\u90e8\u3092\u7121\u65ad\u3067\u8ee2\u8f09\u3059\u308b\u884c\u70ba\u306f\uff0c\u3053\u308c\u3092\u56fa\u304f\u7981\u3058\u307e\u3059\uff0e"
                ],
                "output": "readability",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:23.700090+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--disable-sync",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--screenshot",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "Chromium 121.0.6167.57",
                "end_ts": "2024-06-02T17:01:14.871554+00:00",
                "index_texts": null,
                "output": "screenshot.png",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:09.257733+00:00",
                "status": "succeeded"
            }
        ],
        "singlefile": [
            {
                "cmd": [
                    "/app/node_modules/single-file-cli/single-file",
                    "--browser-executable-path=chromium-browser",
                    "--browser-args=[\"--headless=new\", \"--no-sandbox\", \"--no-zygote\", \"--disable-dev-shm-usage\", \"--disable-software-rasterizer\", \"--run-all-compositor-stages-before-draw\", \"--hide-scrollbars\", \"--autoplay-policy=no-user-gesture-required\", \"--no-first-run\", \"--use-fake-ui-for-media-stream\", \"--use-fake-device-for-media-stream\", \"--disable-sync\", \"--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'\", \"--window-size=1440,2000\", \"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)\"]",
                    "https://tomomano.github.io/learn-aws-by-coding/",
                    "singlefile.html"
                ],
                "cmd_version": "1.1.46",
                "end_ts": "2024-06-02T17:00:41.040007+00:00",
                "index_texts": null,
                "output": "singlefile.html",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:00:09.512790+00:00",
                "status": "succeeded"
            }
        ],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.5.0 (aarch64-unknown-linux-gnu)",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "curl 8.5.0 (aarch64-unknown-linux-gnu)",
                "end_ts": "2024-06-02T17:01:23.693099+00:00",
                "index_texts": null,
                "output": "\u30b3\u30fc\u30c9\u3067\u5b66\u3076AWS\u5165\u9580",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:23.586030+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--backup-converted",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--timeout=60",
                    "--restrict-file-names=windows",
                    "--warc-file=/data/archive/1717347608.906901/warc/1717347681",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "https://tomomano.github.io/learn-aws-by-coding/"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2024-06-02T17:01:23.575148+00:00",
                "index_texts": null,
                "output": "tomomano.github.io/learn-aws-by-coding/index.html",
                "pwd": "/data/archive/1717347608.906901",
                "schema": "ArchiveResult",
                "start_ts": "2024-06-02T17:01:21.447349+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": "https://web.archive.org/web/20240602170143/https://tomomano.github.io/learn-aws-by-coding/",
        "dom": "output.html",
        "favicon": "favicon.ico",
        "git": null,
        "media": "media",
        "pdf": "output.pdf",
        "screenshot": "screenshot.png",
        "singlefile": "singlefile.html",
        "title": "\u30b3\u30fc\u30c9\u3067\u5b66\u3076AWS\u5165\u9580",
        "warc": null,
        "wget": "tomomano.github.io/learn-aws-by-coding/index.html"
    },
    "link_dir": "/data/archive/1717347608.906901",
    "newest_archive_date": "2024-06-02T17:01:40.107481+00:00",
    "num_failures": 0,
    "num_outputs": 12,
    "oldest_archive_date": "2024-06-02T17:00:08.978449+00:00",
    "path": "/learn-aws-by-coding/",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "1b0dbeef-6ab5-441c-8598-b968b29e2587",
    "sources": [
        "/data/sources/1717347608-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1717347608.906901",
    "title": "\u30b3\u30fc\u30c9\u3067\u5b66\u3076AWS\u5165\u9580",
    "updated": "2024-06-02T17:00:08.978003+00:00",
    "updated_date": "2024-06-02 17:00",
    "url": "https://tomomano.github.io/learn-aws-by-coding/"
}