toshiki-notebook/development/aws/appendix.html

71 lines
111 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Appendix: 環境構築 | Toshiki's Note</title>
<meta name="description" content="Toshiki's web notebook served via Vitepress!">
<link rel="preload stylesheet" href="/assets/style.3867508b.css" as="style">
<script type="module" src="/assets/app.b7ebe66f.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.ade46834.js">
<link rel="modulepreload" href="/assets/chunks/theme.2274efad.js">
<link rel="modulepreload" href="/assets/chunks/venv_shell.dc2530bc.js">
<link rel="modulepreload" href="/assets/development_aws_appendix.md.3bde5b85.lean.js">
<link rel="stylesheet" href="https://cdnjs.toshiki.dev/ajax/libs/KaTeX/0.16.0/katex.min.css">
<link rel="stylesheet" href="https://cdnjs.toshiki.dev/ajax/libs/font-awesome/6.3.0/css/all.min.css">
<link rel="icon" href="https://r2.toshiki.dev/cdn/toshiki-notebook-favicon/favicon.ico">
<meta name="author" content="Anda Toshiki">
<meta name="keywords" content="Toshiki, Anda Toshiki, andatoshiki, GitHub, GitHub action, Vitepress, Vite, Notebook, Knowledge base, Programming, Programming Notes, Academic, Personal, Notebook, Productivity, Journal, Note-taking, Markdown, Notepad, Organization, Tutorial">
<meta name="google-site-verification" content="lm7PNJiYSPEx1dMast1Xptc0Vk0cU06o-daZSsIgr2I">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="theme-color" content="#3c8772">
<meta property="og:type" content="website">
<meta property="og:locale" content="en-US">
<meta property="og:title" content="Toshiki&#39;s Note">
<meta property="og:description" content="Toshiki&#39;s web notebook served via Vitepress!">
<meta property="og:site" content="https://note.toshiki.dev">
<meta property="og:site_name" content="Toshiki&#39;s Note">
<meta property="og:image" content="https://note.toshiki.dev/og-cover.png">
<script>function siteruntime(){window.setTimeout("siteruntime()",1e3),X=new Date("8/24/2021 10:28:00"),Y=new Date,T=Y.getTime()-X.getTime(),M=24*60*60*1e3,a=T/M,A=Math.floor(a),b=(a-A)*24,B=Math.floor(b),c=(b-B)*60,C=Math.floor((b-B)*60),D=Math.floor((c-C)*60),siteruntime_span.innerHTML="This site has been running for: "+A+" day(s) "+B+" hour(s) "+C+" minute(s) "+D+" second(s)"}siteruntime();</script>
<script async="true" defer="true" data-website-id="86de8554-d4c9-4f2b-b62a-068b71241048" src="https://umami.toshiki.dev/umami.js"></script>
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-83f63849><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0eca8f1e></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0eca8f1e> Skip to content </a><!--]--><!----><header class="VPNav" data-v-83f63849 data-v-999a1a39><div class="VPNavBar has-sidebar" data-v-999a1a39 data-v-e99cf6bd><div class="container" data-v-e99cf6bd><div class="title" data-v-e99cf6bd><div class="VPNavBarTitle has-sidebar" data-v-e99cf6bd data-v-a8886b70><a class="title" href="/" data-v-a8886b70><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logos/logo.png" alt data-v-164d1caf><!--]--><!--[-->Toshiki&#39;s Note<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-e99cf6bd><div class="curtain" data-v-e99cf6bd></div><div class="content-body" data-v-e99cf6bd><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:&#39;Meta&#39;;" data-v-e99cf6bd><!--[--><div id="docsearch"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-e99cf6bd data-v-1817056a><span id="main-nav-aria-label" class="visually-hidden" data-v-1817056a>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/development/" tabindex="0" data-v-1817056a data-v-f28b94cc data-v-075865b7><!--[-->Development<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-1817056a data-v-4c03a652><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-4c03a652><span class="text" data-v-4c03a652><!----> Academic <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-4c03a652><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-4c03a652><div class="VPMenu" data-v-4c03a652 data-v-da053c30><div class="items" data-v-da053c30><!--[--><!--[--><div class="VPMenuGroup" data-v-da053c30 data-v-2e982fbb><p class="title" data-v-2e982fbb>K-12</p><!--[--><!--[--><div class="VPMenuLink" data-v-2e982fbb data-v-6f715184><a class="VPLink link" href="/academic/chemistry/index" data-v-6f715184 data-v-075865b7><!--[-->Chemistry<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-2e982fbb data-v-6f715184><a class="VPLink link" href="/discrete-math/index" data-v-6f715184 data-v-075865b7><!--[-->Discrete Math.<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-2e982fbb data-v-6f715184><a class="VPLink link" href="/academic/literature/index" data-v-6f715184 data-v-075865b7><!--[-->Literature<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-da053c30 data-v-2e982fbb><p class="title" data-v-2e982fbb>Tools</p><!--[--><!--[--><div class="VPMenuLink" data-v-2e982fbb data-v-6f715184><a class="VPLink link" href="/academic/physics/ipho-formulas-jpn/1" data-v-6f715184 data-v-075865b7><!--[-->Formulas for IPhO JPN.<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><span class="VPLink" data-v-6f715184 data-v-075865b7><!--[--><!--]--><!----></span></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-1817056a data-v-4c03a652><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-4c03a652><span class="text" data-v-4c03a652><!----> Application <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-4c03a652><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-4c03a652><div class="VPMenu" data-v-4c03a652 data-v-da053c30><div class="items" data-v-da053c30><!--[--><!--[--><div class="VPMenuGroup" data-v-da053c30 data-v-2e982fbb><p class="title" data-v-2e982fbb>Personal projects</p><!--[--><!--[--><div class="VPMenuLink" data-v-2e982fbb data-v-6f715184><a class="VPLink link" href="/application/markdown-it-katex/how-to-use" data-v-6f715184 data-v-075865b7><!--[-->markdown-it-katex<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-2e982fbb data-v-6f715184><a class="VPLink link" href="/application/vitepress-plugin-shiki-twoslash/index" data-v-6f715184 data-v-075865b7><!--[-->vitepress-plugin-shiki-twoslash<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-1817056a data-v-4c03a652><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-4c03a652><span class="text" data-v-4c03a652><!----> Save <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-4c03a652><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-4c03a652><div class="VPMenu" data-v-4c03a652 data-v-da053c30><div class="items" data-v-da053c30><!--[--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><a class="VPLink link" href="/save/reading/index" data-v-6f715184 data-v-075865b7><!--[-->Reading<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-da053c30 data-v-6f715184><a class="VPLink link" href="/academic/vocabulary/index" data-v-6f715184 data-v-075865b7><!--[-->Vocabulary<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-e99cf6bd data-v-72c0c02a><label title="toggle dark mode" data-v-72c0c02a data-v-cb74fac6><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-checked="false" data-v-cb74fac6 data-v-9f7dbbcf><span class="check" data-v-9f7dbbcf><span class="icon" data-v-9f7dbbcf><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-cb74fac6><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-cb74fac6><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></label></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-e99cf6bd data-v-268ff66d data-v-65dbf981><!--[--><a class="VPSocialLink" href="https://github.com/andatoshiki" aria-label="github" target="_blank" rel="noopener" data-v-65dbf981 data-v-2d45784b><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://twitter.com/andatoshiki" aria-label="twitter" target="_blank" rel="noopener" data-v-65dbf981 data-v-2d45784b><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-e99cf6bd data-v-67546bb2 data-v-4c03a652><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-4c03a652><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-4c03a652><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-4c03a652><div class="VPMenu" data-v-4c03a652 data-v-da053c30><!----><!--[--><!--[--><!----><div class="group" data-v-67546bb2><div class="item appearance" data-v-67546bb2><p class="label" data-v-67546bb2>Appearance</p><div class="appearance-action" data-v-67546bb2><label title="toggle dark mode" data-v-67546bb2 data-v-cb74fac6><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-checked="false" data-v-cb74fac6 data-v-9f7dbbcf><span class="check" data-v-9f7dbbcf><span class="icon" data-v-9f7dbbcf><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-cb74fac6><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-cb74fac6><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></label></div></div></div><div class="group" data-v-67546bb2><div class="item social-links" data-v-67546bb2><div class="VPSocialLinks social-links-list" data-v-67546bb2 data-v-65dbf981><!--[--><a class="VPSocialLink" href="https://github.com/andatoshiki" aria-label="github" target="_blank" rel="noopener" data-v-65dbf981 data-v-2d45784b><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://twitter.com/andatoshiki" aria-label="twitter" target="_blank" rel="noopener" data-v-65dbf981 data-v-2d45784b><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-e99cf6bd data-v-2314de5a><span class="container" data-v-2314de5a><span class="top" data-v-2314de5a></span><span class="middle" data-v-2314de5a></span><span class="bottom" data-v-2314de5a></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav" data-v-83f63849 data-v-fa4746c0><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-fa4746c0><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-fa4746c0><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-fa4746c0>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-fa4746c0 data-v-f8dbb575><button data-v-f8dbb575>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-83f63849 data-v-0e47c5d5><div class="curtain" data-v-0e47c5d5></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-0e47c5d5><span class="visually-hidden" id="sidebar-aria-label" data-v-0e47c5d5> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-0e47c5d5><section class="VPSidebarItem level-0 collapsible" data-v-0e47c5d5 data-v-0cc45b6b><div class="item" role="button" tabindex="0" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><h2 class="text" data-v-0cc45b6b>Notes & Issues</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0cc45b6b><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-0cc45b6b><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-0cc45b6b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/file-naming-convention" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>File Naming Convention</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/rclone-for-r2" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>RClone for R2</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-0e47c5d5><section class="VPSidebarItem level-0 collapsible has-active" data-v-0e47c5d5 data-v-0cc45b6b><div class="item" role="button" tabindex="0" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><h2 class="text" data-v-0cc45b6b>コードで学ぶAWS入門</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0cc45b6b><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-0cc45b6b><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-0cc45b6b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/index" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>背景</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/main" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>はじめに!</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/cloud" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>クラウド概論</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/aws-get-started" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>AWS 入門</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/handson-ec2" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Hands-on 1: 初めての EC2 インスタンスを起動する</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/scientific-computing" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>クラウドで行う科学計算・機械学習</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/handson-ec2" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Hands-on 2: AWS でディープラーニングを実践</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/docker-system" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Docker 入門</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/handson-qabot" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Hands-on 3: AWS で自動質問回答ボットを走らせる</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/aws-batch" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Hands-on 4: AWS Batch を使って機械学習のハイパーパラメータサーチを並列化する</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/webserver" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Web サービスの作り方</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/serverless" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Serverless architecture</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/handson-serverless" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Hands-on 5: サーバーレス入門</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/handson-bashoutter" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>Hands-on 6: Bashoutter</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/closing" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>まとめ</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link is-active has-active" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/appendix" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>ppendix: 環境構築</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0cc45b6b data-v-0cc45b6b><div class="item" data-v-0cc45b6b><div class="indicator" data-v-0cc45b6b></div><a class="VPLink link link" href="/development/aws/acknowledgement" data-v-0cc45b6b data-v-075865b7><!--[--><p class="text" data-v-0cc45b6b>謝辞</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-83f63849 data-v-bb292142><div class="VPDoc has-sidebar has-aside" data-v-bb292142 data-v-6c4a7022><!--[--><!--]--><div class="container" data-v-6c4a7022><div class="aside" data-v-6c4a7022><div class="aside-curtain" data-v-6c4a7022></div><div class="aside-container" data-v-6c4a7022><div class="aside-content" data-v-6c4a7022><div class="VPDocAside" data-v-6c4a7022 data-v-f77a9b1a><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-f77a9b1a data-v-ea95c6a2><div class="content" data-v-ea95c6a2><div class="outline-marker" data-v-ea95c6a2></div><div class="outline-title" data-v-ea95c6a2>TOC</div><nav aria-labelledby="doc-outline-aria-label" data-v-ea95c6a2><span class="visually-hidden" id="doc-outline-aria-label" data-v-ea95c6a2> Table of Contents for current page </span><ul class="root" data-v-ea95c6a2 data-v-74f66e6c><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-f77a9b1a></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--[--><!--[--><!--[--><div class="VPDocAsideSponsors"><div class="VPSponsors vp-sponsor aside"><!--[--><section class="vp-sponsor-section"><!----><div class="VPSponsorsGrid vp-sponsor-grid medium"><!--[--><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden"></h4><img class="vp-sponsor-grid-image" src="https://jsd.toshiki.dev/gh/andatoshiki/toshiki-notebook@master/assets/logo/sponsor/telegram.png"></article></a></div><!--]--></div></section><!--]--></div></div><!--]--><!--]--><!--]--><!--]--></div></div></div></div><div class="content" data-v-6c4a7022><div class="content-container" data-v-6c4a7022><!--[--><!--]--><!----><main class="main" data-v-6c4a7022><div style="position:relative;" class="vp-doc _development_aws_appendix" data-v-6c4a7022><div><h1 id="appendix-環境構築" tabindex="-1">Appendix: 環境構築 <a class="header-anchor" href="#appendix-環境構築" aria-label="Permalink to &quot;Appendix: 環境構築&quot;"></a></h1><p>本書を読み進めるにあたって,ハンズオンのプログラムを実行するための環境を自分のローカルマシンにセットアップしなければならない. ここでは, AWS やコマンドラインの初心者を想定して,本章で必要なソフトウェアやライブラリのインストールなどを簡単に解説する. 以下に簡単な目次を示そう. 既に環境構築が済んでいる場合は適宜読み飛ばしていただき,関係のある箇所のみ目を通せば良い.</p><ul><li><p>AWS アカウントの取得 (<a href="#sec:create_aws_account">AWS アカウントの取得</a>)</p></li><li><p>AWS シークレットキーの作成 (<a href="#aws_secrets">AWS のシークレットキーの作成</a>)</p></li><li><p>AWS CLI のインストール (<a href="#aws_cli_install">AWS CLI のインストール</a>)</p></li><li><p>AWS CDK のインストール (<a href="#aws_cdk_install">AWS CDK のインストール</a>)</p></li><li><p>WSL のインストール (<a href="#sec:install_wsl">WSL のインストール</a>)</p></li><li><p>Docker のインストール (<a href="#sec:install_docker">Docker のインストール</a>)</p></li><li><p>Python venv クイックガイド (<a href="#venv_quick_guide">Python クイックガイド</a>)</p></li><li><p>ハンズオン実行用の Docker image の使い方 (<a href="#sec_handson_docker">ハンズオン実行用の Docker image の使い方</a>)</p></li></ul><p>使用する OS は Linux/Mac/Windows のどれを用いても構わない. Windows のユーザーは, Windows Subsytem for Linux (WSL) を使用することを想定している (<a href="#sec:install_wsl">WSL のインストール</a>)</p><p>また,本書のハンズオンを実行するための <a href="https://hub.docker.com/repository/docker/tomomano/labc" target="_blank" rel="noreferrer">Docker イメージ</a> を提供している. これを用いると, AWS CLI/CDK や Python の設定などをスキップできるので, Docker の使用方法を知っている読者には便利だろう.</p><h2 id="aws-アカウントの取得" tabindex="-1">AWS アカウントの取得 <a class="header-anchor" href="#aws-アカウントの取得" aria-label="Permalink to &quot;AWS アカウントの取得&quot;"></a></h2><p>本書で提供するハンズオンを実際に自分で試すには,読者自身で AWS のアカウントの作成をする必要がある. 詳しいアカウントの作成の手順は <a href="https://aws.amazon.com/jp/register-flow/" target="_blank" rel="noreferrer">公式のドキュメンテーション</a> に書かれているので,そちらも参照していただきたい. 以下の手順に従ってアカウントの作成を行う.</p><p>まず,ウェブブラウザから <a href="https://aws.amazon.com/console/" target="_blank" rel="noreferrer">AWS コンソール</a> にアクセスし,右上の <code>Create an AWS Account</code> をクリックする (<a href="#fig:aws-signup-1">figure_title</a> で実線で囲った部分)</p><p><img src="/assets/signup-1.2ce1cfc1.png" alt="サインアップ (1): AWS コンソールにアクセス"></p><p>次に,遷移した先のページでメールアドレスとパスワードなどの登録を行う (<a href="#fig:aws-signup-3">figure_title</a>)</p><p><img src="/assets/signup-3.113ffb4e.png" alt="サインアップ (2): メールアドレス・パスワードなどの登録."></p><p>続いて,住所や電話番号などを訊かれるので,すべて入力しよう (<a href="#fig:aws-signup-4">figure_title</a>)</p><p><img src="/assets/signup-4.077f0007.png" alt="サインアップ (3): 住所・電話番号の入力"></p><p>次に,クレジットカードの情報の登録を求められる (<a href="#fig:aws-signup-5">figure_title</a>) 個人で AWS を利用する場合は,利用料金の請求はクレジットカードを経由して行われる. クレジットカードの登録なしには AWS を使い始めることはできないことに注意.</p><p><img src="/assets/signup-5.b4f95da8.png" alt="サインアップ (4): クレジットカードの登録"></p><p>次の画面では,携帯電話の SMS またはボイスメッセージを利用した本人確認が求められる (<a href="#fig:aws-signup-6">figure_title</a>) 希望の認証方法を選択し,自分の携帯電話番号を入力しよう.</p><p><img src="/assets/signup-6.b6818e69.png" alt="サインアップ (5): 携帯電話による本人確認"></p><p>無事に本人確認が完了すると,最後にサポートプランの選択を求められる (<a href="#fig:aws-signup-8">figure_title</a>) 無料の Basic support を選択しておけば問題ない.</p><p><img src="/assets/signup-8.35b15bda.png" alt="サインアップ (6): サポートプランの選択"></p><p>以上のステップにより,アカウントの作成が完了する (<a href="#fig:aws-signup-9">figure_title</a>) 早速ログインをして, AWS コンソールにアクセスできるか確認しておこう.</p><p><img src="/assets/signup-9.34dd9d26.png" alt="サインアップ (7): アカウントの作成が完了した"></p><h2 id="aws-のシークレットキーの作成" tabindex="-1">AWS のシークレットキーの作成 <a class="header-anchor" href="#aws-のシークレットキーの作成" aria-label="Permalink to &quot;AWS のシークレットキーの作成&quot;"></a></h2><p>AWS シークレットキーとは, AWS CLI や AWS CDK から AWS の API を操作するときに,ユーザー認証を行うための鍵のことである. AWS CLI/CDK を使うには,最初にシークレットキーを発行する必要がある. AWS シークレットキーの詳細は <a href="https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html" target="_blank" rel="noreferrer">公式ドキュメンテーション &quot;Understanding and getting your AWS credentials&quot;</a> を参照.</p><ol><li><p>AWS コンソールにログインする.</p></li><li><p>画面右上のアカウント名をクリックし,表示されるプルダウンメニューから &quot;My Security Credentials&quot; を選択 (<a href="#fig:aws_secret_key_1">figure_title</a>)</p></li><li><p>&quot;Access keys for CLI, SDK, &amp; API access&quot; の下にある &quot;Create accesss key&quot; のボタンをクリックする (<a href="#fig:aws_secret_key_2">figure_title</a>)</p></li><li><p>表示された Access key ID, Secret access key を記録しておく (画面を閉じると二度と表示されない)</p></li><li><p>鍵を忘れてしまった場合などは,同じ手順で再発行が可能である.</p></li><li><p>発行したシークレットキーは, <code>~/.aws/credentials</code> のファイルに書き込むか,環境変数に設定するなどして使う (詳しくは <a href="#aws_cli_install">AWS CLI のインストール</a>)</p></li></ol><p><img src="/assets/aws_secret_key_1.d1744b9c.png" alt="AWS シークレットキーの発行1"></p><p><img src="/assets/aws_secret_key_2.bd52cb4d.png" alt="AWS シークレットキーの発行2"></p><p><strong>AWS Educate Starter Account</strong> を用いている場合は,次の手順でシークレットキーを確認する.</p><ul><li><p>AWS Educate のコンソール画面から, <code>vocareum</code> のコンソールに移動する (<a href="#fig:vocareum_console">figure_title</a>)</p></li><li><p><code>Account Details</code> をクリックし,続いて <code>AWS CLI: Show</code> をクリックする.</p></li><li><p><code>aws_access_key_id</code>, <code>aws_secret_access_key</code>, <code>aws_session_token</code> が表示される (<a href="#fig:vocareum_secret">figure_title</a>) ここで表示された内容を <code>~/.aws/credentials</code> にコピーする (<a href="#aws_cli_install">AWS CLI のインストール</a> 参照) <code>aws_session_token</code> の箇所も漏らさずコピーすること.</p></li><li><p>続いて, <code>~/.aws/config</code> というファイルを用意し,次の内容を書き込む. 現時点では AWS Starter Account は <code>us-east-1</code> リージョンでしか利用できないためである.</p></li></ul><div class="language-toml vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">toml</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#839496;">[default]</span></span>
<span class="line"><span style="color:#839496;"> </span><span style="color:#268BD2;">region</span><span style="color:#839496;"> = u</span><span style="color:#DC322F;">s-east-1</span></span>
<span class="line"><span style="color:#839496;"> </span><span style="color:#268BD2;">output</span><span style="color:#839496;"> = j</span><span style="color:#DC322F;">son</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#657B83;">[default]</span></span>
<span class="line"><span style="color:#657B83;"> </span><span style="color:#268BD2;">region</span><span style="color:#657B83;"> = u</span><span style="color:#DC322F;">s-east-1</span></span>
<span class="line"><span style="color:#657B83;"> </span><span style="color:#268BD2;">output</span><span style="color:#657B83;"> = j</span><span style="color:#DC322F;">son</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><ul><li>上記の説明ではプロファイル名が <code>default</code> となっていたが,これは自分の好きな名前に変更してもよい. <code>default</code> 以外の名前を使用する場合は,コマンドを実行するときにプロファイル名を指定する必要がある (詳しくは <a href="#aws_cli_install">AWS CLI のインストール</a>)</li></ul><p><img src="/assets/vocareum_console.7ed192fc.png" alt="vocareum コンソール"></p><p><img src="/assets/vocareum_secret.d7ed51a8.png" alt="vocareum から AWS シークレットキーの発行"></p><h2 id="aws-cli-のインストール" tabindex="-1">AWS CLI のインストール <a class="header-anchor" href="#aws-cli-のインストール" aria-label="Permalink to &quot;AWS CLI のインストール&quot;"></a></h2><p>読者のために,執筆時点におけるインストールの手順 (Linux 向け) を簡単に記述する. 将来のバージョンでは変更される可能性があるので,常に <a href="https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html" target="_blank" rel="noreferrer">公式のドキュメンテーション</a> で最新の情報をチェックすることを忘れずに.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">curl</span><span style="color:#839496;"> </span><span style="color:#2AA198;">&quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&quot;</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-o</span><span style="color:#839496;"> </span><span style="color:#2AA198;">&quot;awscliv2.zip&quot;</span></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">unzip</span><span style="color:#839496;"> </span><span style="color:#2AA198;">awscliv2.zip</span></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#839496;"> </span><span style="color:#2AA198;">./aws/install</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">curl</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">&quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&quot;</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-o</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">&quot;awscliv2.zip&quot;</span></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">unzip</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">awscliv2.zip</span></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">./aws/install</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>インストールできたか確認するため,次のコマンドを打ってバージョン情報が出力されることを確認する.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">aws</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">--version</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">aws</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">--version</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>インストールができたら,次のコマンドにより初期設定を行う (<a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html" target="_blank" rel="noreferrer">参照</a>)</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">aws</span><span style="color:#839496;"> </span><span style="color:#2AA198;">configure</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">aws</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">configure</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>コマンドを実行すると, <code>AWS Access Key ID</code>, <code>AWS Secret Access Key</code> を入力するよう指示される. シークレットキーの発行については <a href="#aws_secrets">AWS のシークレットキーの作成</a> を参照. コマンドは加えて,<code>Default region name</code> を訊いてくる. ここには自分の好きな地域 (例えば <code>ap-northeast-1</code> =東京リージョン) を指定すればよい. 最後の <code>Default output format</code><code>json</code> としておくとよい.</p><p>このコマンドを完了すると, <code>~/.aws/credentials</code><code>~/.aws/config</code> という名前のファイルが生成されているはずである. 念のため, <code>cat</code> コマンドを使って中身を確認してみるとよい.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">cat</span><span style="color:#839496;"> </span><span style="color:#2AA198;">~/.aws/credentials</span></span>
<span class="line"><span style="color:#839496;">[default]</span></span>
<span class="line"><span style="color:#268BD2;">aws_access_key_id</span><span style="color:#839496;"> </span><span style="color:#2AA198;">=</span><span style="color:#839496;"> </span><span style="color:#2AA198;">XXXXXXXXXXXXXXXXXX</span></span>
<span class="line"><span style="color:#268BD2;">aws_secret_access_key</span><span style="color:#839496;"> </span><span style="color:#2AA198;">=</span><span style="color:#839496;"> </span><span style="color:#2AA198;">YYYYYYYYYYYYYYYYYYY</span></span>
<span class="line"></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">cat</span><span style="color:#839496;"> </span><span style="color:#2AA198;">~/.aws/config</span></span>
<span class="line"><span style="color:#839496;">[profile default]</span></span>
<span class="line"><span style="color:#268BD2;">region</span><span style="color:#839496;"> </span><span style="color:#2AA198;">=</span><span style="color:#839496;"> </span><span style="color:#2AA198;">ap-northeast-1</span></span>
<span class="line"><span style="color:#268BD2;">output</span><span style="color:#839496;"> </span><span style="color:#2AA198;">=</span><span style="color:#839496;"> </span><span style="color:#2AA198;">json</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">cat</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">~/.aws/credentials</span></span>
<span class="line"><span style="color:#657B83;">[default]</span></span>
<span class="line"><span style="color:#268BD2;">aws_access_key_id</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">=</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">XXXXXXXXXXXXXXXXXX</span></span>
<span class="line"><span style="color:#268BD2;">aws_secret_access_key</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">=</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">YYYYYYYYYYYYYYYYYYY</span></span>
<span class="line"></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">cat</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">~/.aws/config</span></span>
<span class="line"><span style="color:#657B83;">[profile default]</span></span>
<span class="line"><span style="color:#268BD2;">region</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">=</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">ap-northeast-1</span></span>
<span class="line"><span style="color:#268BD2;">output</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">=</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">json</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p><code>~/.aws/credentials</code> には認証鍵の情報が, <code>~/.aws/config</code> には AWS CLI の設定が記録されている.</p><p>デフォルトでは, <code>[default]</code> という名前でプロファイルが保存される. いくつかのプロファイルを使い分けたければ, default の例に従って,たとえば <code>[myprofile]</code> などという名前でプロファイルを追加すればよい.</p><p>AWS CLI でコマンドを打つときに,プロファイルを使い分けるには,</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">aws</span><span style="color:#839496;"> </span><span style="color:#2AA198;">s3</span><span style="color:#839496;"> </span><span style="color:#2AA198;">ls</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">--profile</span><span style="color:#839496;"> </span><span style="color:#2AA198;">myprofile</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">aws</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">s3</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">ls</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">--profile</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">myprofile</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>のように, <code>--profile</code> というオプションをつけてコマンドを実行する.</p><p>いちいち <code>--profile</code> オプションをつけるのが面倒だと感じる場合は, <code>AWS_PROFILE</code> という環境変数を設定するとよい.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">export</span><span style="color:#839496;"> </span><span style="color:#2AA198;">AWS_PROFILE=myprofile</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">export</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">AWS_PROFILE=myprofile</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>あるいは,認証情報などを環境変数に設定するテクニックもある.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#93A1A1;font-weight:bold;">export</span><span style="color:#839496;"> </span><span style="color:#268BD2;">AWS_ACCESS_KEY_ID</span><span style="color:#859900;">=</span><span style="color:#2AA198;">XXXXXX</span></span>
<span class="line"><span style="color:#93A1A1;font-weight:bold;">export</span><span style="color:#839496;"> </span><span style="color:#268BD2;">AWS_SECRET_ACCESS_KEY</span><span style="color:#859900;">=</span><span style="color:#2AA198;">YYYYYY</span></span>
<span class="line"><span style="color:#93A1A1;font-weight:bold;">export</span><span style="color:#839496;"> </span><span style="color:#268BD2;">AWS_DEFAULT_REGION</span><span style="color:#859900;">=</span><span style="color:#2AA198;">ap-northeast-1</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#586E75;font-weight:bold;">export</span><span style="color:#657B83;"> </span><span style="color:#268BD2;">AWS_ACCESS_KEY_ID</span><span style="color:#859900;">=</span><span style="color:#2AA198;">XXXXXX</span></span>
<span class="line"><span style="color:#586E75;font-weight:bold;">export</span><span style="color:#657B83;"> </span><span style="color:#268BD2;">AWS_SECRET_ACCESS_KEY</span><span style="color:#859900;">=</span><span style="color:#2AA198;">YYYYYY</span></span>
<span class="line"><span style="color:#586E75;font-weight:bold;">export</span><span style="color:#657B83;"> </span><span style="color:#268BD2;">AWS_DEFAULT_REGION</span><span style="color:#859900;">=</span><span style="color:#2AA198;">ap-northeast-1</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>これらの環境変数は, <code>~/.aws/credentials</code> よりも高い優先度をもつので,環境変数が設定されていればそちらの情報が使用される (<a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html" target="_blank" rel="noreferrer">参照</a>)</p><p><strong>AWS Educate Starter Account</strong><code>us-east-1</code> のリージョンのみ利用可能である (執筆時点での情報) よって, AWS Educate Starter Account を使用している場合は, default region を <code>us-east-1</code> に設定する必要がある.</p><h2 id="aws-cdk-のインストール" tabindex="-1">AWS CDK のインストール <a class="header-anchor" href="#aws-cdk-のインストール" aria-label="Permalink to &quot;AWS CDK のインストール&quot;"></a></h2><p>読者のために,執筆時点におけるインストールの手順 (Linux 向け) を簡単に記述する. 将来のバージョンでは変更される可能性があるので,常に <a href="https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html" target="_blank" rel="noreferrer">公式のドキュメンテーション</a> で最新の情報をチェックすることを忘れずに.</p><p>Node.js がインストールされていれば,基本的に次のコマンドを実行すればよい.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#839496;"> </span><span style="color:#2AA198;">npm</span><span style="color:#839496;"> </span><span style="color:#2AA198;">install</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-g</span><span style="color:#839496;"> </span><span style="color:#2AA198;">aws-cdk</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">npm</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">install</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-g</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">aws-cdk</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>本書のハンズオンは AWS CDK version 1.100.0 で開発した. CDK は開発途上のライブラリなので,将来的に API が変更される可能性がある. API の変更によりエラーが生じた場合は, version 1.100.0 を使用することを推奨する.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">npm</span><span style="color:#839496;"> </span><span style="color:#2AA198;">install</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-g</span><span style="color:#839496;"> </span><span style="color:#2AA198;">aws-cdk@1.100</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">npm</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">install</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-g</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">aws-cdk@1.100</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>インストールできたか確認するため,次のコマンドを打って正しくバージョンが表示されることを確認する.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">cdk</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">--version</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">cdk</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">--version</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>インストールができたら,次のコマンドにより AWS 側の初期設定を行う. これは一度実行すれば OK</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">cdk</span><span style="color:#839496;"> </span><span style="color:#2AA198;">bootstrap</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">cdk</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">bootstrap</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><code>cdk bootstrap</code> を実行するときはAWS の認証情報とリージョンが正しく設定されていることを確認する. デフォルトでは <code>~/.aws/config</code> にあるデフォルトのプロファイルが使用される. デフォルト以外のプロファイルを用いるときは <a href="#aws_cli_install">AWS CLI のインストール</a> で紹介したテクニックを使って切り替える.</p><p>AWS CDK の認証情報の設定は AWS CLI と基本的に同じである.詳しくは <a href="#aws_cli_install">AWS CLI のインストール</a> を参照.</p><h2 id="wsl-のインストール" tabindex="-1">WSL のインストール <a class="header-anchor" href="#wsl-のインストール" aria-label="Permalink to &quot;WSL のインストール&quot;"></a></h2><p>本書のハンズオンではコマンドラインから AWS CLI のコマンドを実行したり, Python で書かれたプログラムを実行する. コマンドは基本的に UNIX のターミナルを想定して書かれている. Linux や Mac のユーザーは OS に標準搭載されているターミナルを用いれば良い. Windows を利用している読者は, <a href="https://docs.microsoft.com/en-us/windows/wsl/" target="_blank" rel="noreferrer">Windows Subsystem for Linux (WSL)</a> を利用することで,仮想の Linux 環境を構築することを推奨する. <a href="https://www.cygwin.com/" target="_blank" rel="noreferrer">Cygwin</a> などの Linux 環境をエミュレートするほかのツールでも構わないが,本書のプログラムは WSL でのみ動作確認を行っている.</p><p>WSL とは, Windows の OS 上で Linux の仮想環境を起動するための, Microsoft 社が公式で提供しているソフトウェアである. Ubuntu など希望の Linux distribution が選択でき,基本的にすべての Linux 向けに作られたプログラム・ソフトウェアを使用することができる.</p><p>執筆時点では <a href="https://docs.microsoft.com/en-us/windows/wsl/compare-versions#whats-new-in-wsl-2" target="_blank" rel="noreferrer">WSL 2</a> が最新版として提供されているので,以下では WSL 2 のインストール手順を簡単に説明する. 細かな詳細などは, <a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10" target="_blank" rel="noreferrer">公式ドキュメンテーション</a> を参照のこと.</p><p>前提として,使用される OS は Windows 10 (Pro または Home エディション) でなければならない. さらに,使用している Windows 10 のバージョンが WSL に対応するバージョンであるかを確認する. X64 のシステムでは Version 1903, Build 18362 以上でなければならない. バージョンが対応していない場合は、 Windows のアップデートを行う.</p><p>まず最初に, Administrator 権限で PowerShell を起動する (<a href="#fig:powershell">figure_title</a>) 左下の Windows メニューの検索バーに <code>powershell</code> と入力すると, PowerShell のプログラムが見つかるはずである, これを右クリックし、 <code>Run as administrator</code> を選択し起動する.</p><p><img src="/assets/powershell.9acad0f3.png" alt="管理者権限での PowerShell の起動"></p><p>PowerShell が起動したら、次のコマンドを実行する.</p><div class="language-powershell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">powershell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">dism.exe</span><span style="color:#839496;"> </span><span style="color:#859900;">/</span><span style="color:#839496;">online </span><span style="color:#859900;">/</span><span style="color:#268BD2;">enable-feature</span><span style="color:#839496;"> </span><span style="color:#859900;">/</span><span style="color:#839496;">featurename:Microsoft</span><span style="color:#859900;">-</span><span style="color:#839496;">Windows</span><span style="color:#859900;">-</span><span style="color:#839496;">Subsystem</span><span style="color:#859900;">-</span><span style="color:#839496;">Linux </span><span style="color:#859900;">/</span><span style="color:#839496;">all </span><span style="color:#859900;">/</span><span style="color:#839496;">norestart</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">dism.exe</span><span style="color:#657B83;"> </span><span style="color:#859900;">/</span><span style="color:#657B83;">online </span><span style="color:#859900;">/</span><span style="color:#268BD2;">enable-feature</span><span style="color:#657B83;"> </span><span style="color:#859900;">/</span><span style="color:#657B83;">featurename:Microsoft</span><span style="color:#859900;">-</span><span style="color:#657B83;">Windows</span><span style="color:#859900;">-</span><span style="color:#657B83;">Subsystem</span><span style="color:#859900;">-</span><span style="color:#657B83;">Linux </span><span style="color:#859900;">/</span><span style="color:#657B83;">all </span><span style="color:#859900;">/</span><span style="color:#657B83;">norestart</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>実行して、“The operation completed successfully.” と出力されるのを確認する. これで WSL が enable される.</p><p>次に,先ほどと同じ Administrator 権限で開いた PowerShell で次のコマンドを実行する。</p><div class="language-powershell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">powershell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">dism.exe</span><span style="color:#839496;"> </span><span style="color:#859900;">/</span><span style="color:#839496;">online </span><span style="color:#859900;">/</span><span style="color:#268BD2;">enable-feature</span><span style="color:#839496;"> </span><span style="color:#859900;">/</span><span style="color:#839496;">featurename:VirtualMachinePlatform </span><span style="color:#859900;">/</span><span style="color:#839496;">all </span><span style="color:#859900;">/</span><span style="color:#839496;">norestart</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">dism.exe</span><span style="color:#657B83;"> </span><span style="color:#859900;">/</span><span style="color:#657B83;">online </span><span style="color:#859900;">/</span><span style="color:#268BD2;">enable-feature</span><span style="color:#657B83;"> </span><span style="color:#859900;">/</span><span style="color:#657B83;">featurename:VirtualMachinePlatform </span><span style="color:#859900;">/</span><span style="color:#657B83;">all </span><span style="color:#859900;">/</span><span style="color:#657B83;">norestart</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>実行して, “The operation completed successfully.” と出力されるのを確認する. これが確認出来たら、一度コンピュータを再起動する.</p><p>続いて, Linux kernel update package を次のリンクからダウンロードする. <a href="https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi" target="_blank" rel="noreferrer">https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi</a></p><p>ダウンロードしたファイルをダブルクリックして実行する. ダイアログに従ってインストールを完了させる.</p><p>そうしたら,再び PowerShell を開き次のコマンドを実行する。</p><div class="language-powershell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">powershell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#839496;">wsl </span><span style="color:#859900;">--</span><span style="color:#268BD2;">set-default</span><span style="color:#859900;">-</span><span style="color:#839496;">version </span><span style="color:#D33682;">2</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#657B83;">wsl </span><span style="color:#859900;">--</span><span style="color:#268BD2;">set-default</span><span style="color:#859900;">-</span><span style="color:#657B83;">version </span><span style="color:#D33682;">2</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>最後に、自分の好みの Linux distribution をインストールする. ここでは Ubuntu 20.04 をインストールしよう.</p><p>Microsoft store のアプリを起動し,検索バーに <code>Ubuntu</code> と入力する. Ubuntu 20.04 LTS という項目が見つかるはずなので,それを開き, “Get” ボタンをクリックする (<a href="#fig:microsoft_store">figure_title</a>) しばらく待つと, Ubuntu 20.04 のインストールが完了する.</p><p><img src="/assets/microsoft_store.4753ca17.png" alt="Microsoft store から Ubuntu 20.04 をインストール"></p><p>Ubuntu 20.04 を初回に起動すると,初期設定が自動で開始され,数分待つことになる. 初期設定が終わると,ユーザー名・パスワードを設定するようプロンプトが出るので,プロンプトに従い入力する.</p><p>これで WSL2 のインストールが完了した. 早速 WSL2 を起動してみよう. 左下の Windows メニューの検索バーに <code>Ubuntu</code> と入力すると, Ubuntu 20.04 のプログラムが見つかるはずである (<a href="#fig:ubuntu">figure_title</a>) クリックして起動しよう.</p><p><img src="/assets/ubuntu2004.548d548b.png" alt="Ubuntu 20.04 の起動"></p><p>すると,ターミナルの黒い画面が立ち上がるだろう (<a href="#fig:wsl_window">figure_title</a>) <code>ls</code>, <code>top</code> などのコマンドを打ってみて, WSL がきちんと動作していることを確認しよう.</p><p><img src="/assets/wsl_window.22182bed.png" alt="WSL の起動画面"></p><p>オプションとして, <a href="https://docs.microsoft.com/en-us/windows/terminal/get-started" target="_blank" rel="noreferrer">Windows Terminal</a> というマイクロソフトから提供されているツールを使うと,より快適に WSL を使用することができる. 興味のある読者はこちらのインストールも推奨する.</p><h2 id="docker-のインストール" tabindex="-1">Docker のインストール <a class="header-anchor" href="#docker-のインストール" aria-label="Permalink to &quot;Docker のインストール&quot;"></a></h2><p>Docker のインストールの方法は OS によって異なる.</p><p>Mac ユーザーは, Docker Desktop をインストールする. インストールの方法は, <a href="https://docs.docker.com/docker-for-mac/install/" target="_blank" rel="noreferrer">Docker のウェブサイト</a> から, Mac 版の Docker Desktop をダウンロードし,ダウンロードされたファイルをダブルクリックし, <code>Applications</code> のフォルダにドラッグするだけで良い. 詳細は <a href="https://docs.docker.com/docker-for-mac/install/" target="_blank" rel="noreferrer">公式ドキュメンテーション</a> を参照のこと.</p><p>Windows のユーザーはDocker Desktop をインストールする. その際, WSL 2 が事前にインストールされていなければならない. 詳細は <a href="https://docs.docker.com/desktop/windows/install/" target="_blank" rel="noreferrer">公式ドキュメンテーション</a> を参照のこと. Docker Desktop をインストールすると, WSL からも <code>docker</code> コマンドが使用できるようになる.</p><p>Linux ユーザー (特に Ubuntu ユーザー) については,インストールの方法はいくつかのアプローチがある. <a href="https://docs.docker.com/engine/install/ubuntu/" target="_blank" rel="noreferrer">公式ドキュメンテーション</a> にいくつかのインストールの方法が示されているので,詳しい情報はそちらを参照いただきたい.</p><p>最も簡単な方法は, Docker が公式で提供しているインストールスクリプトを用いる方法である. この場合,次のコマンドを実行することで Docker がインストールされる.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">curl</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-fsSL</span><span style="color:#839496;"> </span><span style="color:#2AA198;">https://get.docker.com</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-o</span><span style="color:#839496;"> </span><span style="color:#2AA198;">get-docker.sh</span></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#839496;"> </span><span style="color:#2AA198;">sh</span><span style="color:#839496;"> </span><span style="color:#2AA198;">get-docker.sh</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">curl</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-fsSL</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">https://get.docker.com</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-o</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">get-docker.sh</span></span>
<span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">sh</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">get-docker.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>デフォルトのインストールでは, root ユーザーのみが <code>docker</code> コマンドを使用できる設定になっている. 従って,コマンドには毎回 <code>sudo</code> を付け加える必要がある. これが面倒だと感じる場合は,次のステップにより,使用するユーザーを <code>docker</code> というグループに追加する (詳細は <a href="https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user" target="_blank" rel="noreferrer">公式ドキュメンテーション &quot;Post-installation steps for Linux&quot;</a> を参照)</p><p>まず最初に, <code>docker</code> という名前にグループを追加する. インストールによっては,既に <code>docker</code> グループが作られている場合もある.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#839496;"> </span><span style="color:#2AA198;">groupadd</span><span style="color:#839496;"> </span><span style="color:#2AA198;">docker</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">groupadd</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">docker</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>次に,現在使用しているユーザーを <code>docker</code> グループに加える.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#839496;"> </span><span style="color:#2AA198;">usermod</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-aG</span><span style="color:#839496;"> </span><span style="color:#2AA198;">docker</span><span style="color:#839496;"> </span><span style="color:#268BD2;">$USER</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">sudo</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">usermod</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-aG</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">docker</span><span style="color:#657B83;"> </span><span style="color:#268BD2;">$USER</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>ここまでできたら,一度ログアウトし,再度ログインする. これによって,グループの変更がターミナルのセッションに反映される.</p><p>設定が正しくできているかを確認するため,次のコマンドを実行してみる.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">docker</span><span style="color:#839496;"> </span><span style="color:#2AA198;">run</span><span style="color:#839496;"> </span><span style="color:#2AA198;">hello-world</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">docker</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">run</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">hello-world</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><code>sudo</code> なしでコンテナが実行できたならば,設定は完了である.</p><h2 id="python-venv-クイックガイド" tabindex="-1">Python <code>venv</code> クイックガイド <a class="header-anchor" href="#python-venv-クイックガイド" aria-label="Permalink to &quot;Python `venv` クイックガイド&quot;"></a></h2><p>他人からもらったプログラムで, numpy や scipy のバージョンが違う!などの理由で,プログラムが動かない,という経験をしたことがある人は多いのではないだろうか. もし,自分の計算機の中に一つしか Python 環境がないとすると,プロジェクトを切り替えるごとに正しいバージョンをインストールし直さなければならず,これは大変な手間である.</p><p>コードのシェアをよりスムーズにするためには,ライブラリのバージョンはプロジェクトごとに管理されるべきである. それを可能にするのが Python 仮想環境とよばれるツールであり, <a href="https://docs.python.org/3/tutorial/venv.html" target="_blank" rel="noreferrer">venv</a>, <a href="https://github.com/pyenv/pyenv" target="_blank" rel="noreferrer">pyenv</a>, <a href="https://docs.conda.io/en/latest/" target="_blank" rel="noreferrer">conda</a> などがよく使われる.</p><p>そのなかでも, <code>venv</code> は Python に標準搭載されているのでとても便利である. <code>pyenv</code><code>conda</code> は,別途インストールの必要があるが,それぞれの長所もある.</p><p><code>venv</code> を使って仮想環境を作成するには,</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">python</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-m</span><span style="color:#839496;"> </span><span style="color:#2AA198;">venv</span><span style="color:#839496;"> </span><span style="color:#2AA198;">.env</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">python</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-m</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">venv</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">.env</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>と実行する. これにより <code>.env/</code> というディレクトリが作られ,このディレクトリに依存するライブラリが保存されることになる.</p><p>この新たな仮想環境を起動するには</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">source</span><span style="color:#839496;"> </span><span style="color:#2AA198;">.env/bin/activate</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">source</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">.env/bin/activate</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>と実行する.</p><p>シェルのプロンプトに <code>(.env)</code> という文字が追加されていることを確認しよう (<a href="#fig_venv_prompt">figure_title</a>) これが, &quot;いまあなたは venv の中にいますよ&quot; というしるしになる.</p><p><img src="/assets/venv_shell.41d578fd.png" alt="venv を起動したときのプロンプト"></p><p>仮想環境を起動すると,それ以降実行する <code>pip</code> コマンドは, <code>.env/</code> 以下にインストールされる.このようにして,プロジェクトごとに使うライブラリのバージョンを切り分けることができる.</p><p>Python では <code>requirements.txt</code> というファイルに依存ライブラリを記述するのが一般的な慣例である.他人からもらったプログラムに, <code>requirements.txt</code> が定義されていれば,</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">pip</span><span style="color:#839496;"> </span><span style="color:#2AA198;">install</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-r</span><span style="color:#839496;"> </span><span style="color:#2AA198;">requirements.txt</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">pip</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">install</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-r</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">requirements.txt</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>と実行することで,必要なライブラリをインストールし,瞬時に Python 環境を再現することができる.</p><p>venv による仮想環境を保存するディレクトリの名前は任意に選べることができるが, <code>.env</code> という名前を用いるのが一般的である.</p><h2 id="ハンズオン実行用の-docker-image-の使い方" tabindex="-1">ハンズオン実行用の Docker image の使い方 <a class="header-anchor" href="#ハンズオン実行用の-docker-image-の使い方" aria-label="Permalink to &quot;ハンズオン実行用の Docker image の使い方&quot;"></a></h2><p>ハンズオンを実行するために必要な, Node.js, Python, AWS CDK などがインストールされた Docker image を用意した. これを使用することで,自分のローカルマシンに諸々をインストールする必要なく,すぐにハンズオンのコードが実行できる.</p><p>ハンズオンのいくつかのコマンドは Docker の外 = ローカルマシンのリアル環境で実行されなければならない. それらについてはハンズオンの該当箇所に注意書きとして記してある.</p><p>Docker イメージは <a href="https://hub.docker.com/repository/docker/tomomano/labc" target="_blank" rel="noreferrer">Docker Hub</a> においてある. Docker イメージのビルドファイルは GitHub の <a href="https://github.com/tomomano/learn-aws-by-coding-source-code/blob/main/docker/Dockerfile" target="_blank" rel="noreferrer">docker/Dockerfile</a> にある.</p><p>次のコマンドでコンテナを起動する.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">docker</span><span style="color:#839496;"> </span><span style="color:#2AA198;">run</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-it</span><span style="color:#839496;"> </span><span style="color:#2AA198;">tomomano/labc:latest</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">docker</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">run</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-it</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">tomomano/labc:latest</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>初回にコマンドを実行したときのみ,イメージが Docker Hub からダウンロード (pull) される. 二回目以降はローカルにダウンロードされたイメージが使用される.</p><p>コンテナが起動すると,次のようなインタラクティブシェルが表示されるはずである (起動時に <code>-it</code> のオプションをつけたのがポイントである)</p><p>root@aws-handson:~$&lt;/programlisting&gt;</p><p>この状態で <code>ls</code> コマンドを打つと, <code>handson/</code> というディレクトリがあるはずである. ここに <code>cd</code> する.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">cd</span><span style="color:#839496;"> </span><span style="color:#2AA198;">handson</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">cd</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">handson</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>すると,各ハンズオンごとのディレクトリが見つかるはずである.</p><p>あとは,ハンズオンごとにディレクトリを移動し,ハンズオンごとの virtualenv を作成し,スタックのデプロイを行えばよい (<a href="#sec_handson_ec2_run">???</a> など参照) ハンズオンごとに使用する依存ライブラリが異なるので,それぞれのハンズオンごとに virtualenv を作成するという設計になっている.</p><p>AWS の認証情報を設定することも忘れずに. <a href="#aws_cli_install">AWS CLI のインストール</a> で記述したように, <code>AWS_ACCESS_KEY_ID</code> などの環境変数を設定するのが簡単な方法である. あるいは,<strong>ローカルマシンの</strong> <code>~/.aws/credentials</code> に認証情報が書き込まれているなら,このディレクトリをコンテナに<strong>マウント</strong>することで,同じ認証ファイルをコンテナ内部から参照することが可能である. この選択肢を取る場合は,次のコマンドでコンテナを起動する.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki solarized-dark vp-code-dark"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#839496;"> </span><span style="color:#2AA198;">docker</span><span style="color:#839496;"> </span><span style="color:#2AA198;">run</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-it</span><span style="color:#839496;"> </span><span style="color:#CB4B16;">-v</span><span style="color:#839496;"> </span><span style="color:#2AA198;">~/.aws:/root/.aws:ro</span><span style="color:#839496;"> </span><span style="color:#2AA198;">tomomano/labc:latest</span></span></code></pre><pre class="shiki solarized-light vp-code-light"><code><span class="line"><span style="color:#268BD2;">$</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">docker</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">run</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-it</span><span style="color:#657B83;"> </span><span style="color:#CB4B16;">-v</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">~/.aws:/root/.aws:ro</span><span style="color:#657B83;"> </span><span style="color:#2AA198;">tomomano/labc:latest</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>これにより,ローカルマシンの <code>~/.aws</code> をコンテナの <code>/root/.aws</code> にマウントすることができる. 最後の <code>:ro</code> は read-only を意味する. 大切な認証ファイルが誤って書き換えられてしまわないように, read-only のフラグをつけることをおすすめする.</p><p><code>/root/</code> がコンテナ環境におけるホームディレクトリである. ここで紹介した認証ファイルをマウントするテクニックは, SSH 鍵をコンテナに渡すときなどにも使える.</p></div></div></main><footer class="VPDocFooter" data-v-6c4a7022 data-v-b5edbda4><!--[--><!--[--><!--[--><!--[--><!----><!--]--><!--]--><!--]--><!--]--><div class="edit-info" data-v-b5edbda4><div class="edit-link" data-v-b5edbda4><a class="VPLink link edit-link-button" href="https://github.com/andatoshiki/toshiki-notebook/edit/master/docs/development/aws/appendix.md" target="_blank" rel="noreferrer" data-v-b5edbda4 data-v-075865b7><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" aria-label="edit icon" data-v-b5edbda4><path d="M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"></path><path d="M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"></path></svg> Edit this page on GitHub<!--]--><!----></a></div><div class="last-updated" data-v-b5edbda4><p class="VPLastUpdated" data-v-b5edbda4 data-v-00fbdbd8>Last updated: <time datetime="2023-09-17T03:14:32.000Z" data-v-00fbdbd8></time></p></div></div><div class="prev-next" data-v-b5edbda4><div class="pager" data-v-b5edbda4><a class="pager-link prev" href="/development/aws/closing" data-v-b5edbda4><span class="desc" data-v-b5edbda4>Previous page</span><span class="title" data-v-b5edbda4>まとめ</span></a></div><div class="has-prev pager" data-v-b5edbda4><a class="pager-link next" href="/development/aws/acknowledgement" data-v-b5edbda4><span class="desc" data-v-b5edbda4>Next page</span><span class="title" data-v-b5edbda4>謝辞</span></a></div></div></footer><!--[--><!--[--><!--[--><div id="comment-container"></div><!--]--><!--]--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-83f63849 data-v-02da8605><div class="container" data-v-02da8605><p class="message" data-v-02da8605>Wrote with <i class="heart fa fa-heart fa-xs fa-beat"></i> and <i class="coffee fa fa-coffee fa-xs" aria-hidden="true"></i> by <a href="https://toshiki.dev">Anda Toshiki</a> at <code>root@andatoshiki:/~</code></p><p class="copyright" data-v-02da8605>Copyright © 2023-2023 <a href="https://github.com/andatoshiki">Anda Toshiki</a>, <a href="https://github.com/lolilab">LoliLab</a> and <a href="https://github.com/toshikidev">Toshiki Dev</a> present <br /><span id="siteruntime_span"></span></p></div></footer><!--[--><!--]--></div></div>
<script>__VP_HASH_MAP__ = JSON.parse("{\"academic_chemistry_index.md\":\"b808c1f9\",\"academic_literature_index.md\":\"a0fea530\",\"academic_chemistry_problems_03-02-3.md\":\"e0f1a13e\",\"academic_chemistry_notes_12-5.md\":\"16ff574e\",\"academic_physics_index.md\":\"6aceadef\",\"academic_chemistry_problems_03-02-1.md\":\"6fdc48ca\",\"academic_physics_ipho-formulas-jpn_6.md\":\"304ba3a7\",\"academic_chemistry_problems_02-20.md\":\"db570597\",\"academic_physics_ipho-formulas-jpn_5.md\":\"48701407\",\"academic_physics_ipho-formulas-jpn_10.md\":\"3cd14471\",\"academic_physics_ipho-formulas-jpn_11.md\":\"5118645d\",\"academic_physics_ipho-formulas-jpn_12.md\":\"29744d01\",\"application_vitepress-plugin-shiki-twoslash_api_annotations.md\":\"4a130b6d\",\"academic_physics_ipho-formulas-jpn_13.md\":\"e48b05e6\",\"application_vitepress-plugin-shiki-twoslash_config_reference.md\":\"f60c7589\",\"application_vitepress-plugin-shiki-twoslash_guide_custom-theme.md\":\"0181bfbf\",\"academic_literature_writing_methods-of-development.md\":\"e22b2b80\",\"academic_physics_ipho-formulas-jpn_2.md\":\"e8cba7dc\",\"academic_vocabulary_2023_02_2023-02-27.md\":\"ca85a5ce\",\"academic_vocabulary_index.md\":\"20303757\",\"application_markdown-it-katex_how-to-use.md\":\"a30cf060\",\"application_markdown-it-katex_tips.md\":\"da90995e\",\"academic_chemistry_problems_03-02-2.md\":\"b873ea13\",\"application_vitepress-plugin-shiki-twoslash_api_cutting.md\":\"82fa68f0\",\"application_vitepress-plugin-shiki-twoslash_api_emit.md\":\"a2bdd9c1\",\"application_vitepress-plugin-shiki-twoslash_api_errors.md\":\"82c78cdb\",\"application_vitepress-plugin-shiki-twoslash_api_includes.md\":\"e6ce7356\",\"application_vitepress-plugin-shiki-twoslash_api_multi-file.md\":\"65e2bcd0\",\"application_vitepress-plugin-shiki-twoslash_api_queries.md\":\"0d682596\",\"application_vitepress-plugin-shiki-twoslash_api_types.md\":\"975e843e\",\"application_vitepress-plugin-shiki-twoslash_config_flags.md\":\"1bec944b\",\"application_vitepress-plugin-shiki-twoslash_guide_markdown-extensions.md\":\"0110ff70\",\"application_vitepress-plugin-shiki-twoslash_index.md\":\"92e15f3b\",\"development_aws_acknowledgement.md\":\"32091ba0\",\"development_aws_appendix.md\":\"3bde5b85\",\"development_aws_assignments.md\":\"d9330a67\",\"development_aws_author.md\":\"c5d29d2d\",\"development_aws_aws-batch.md\":\"f8dfc43b\",\"development_aws_aws-get-started.md\":\"80b94e13\",\"development_aws_closing.md\":\"288ecb12\",\"development_aws_cloud.md\":\"06d4e0f1\",\"development_aws_docker-system.md\":\"c7a15ca6\",\"development_aws_handson-bashoutter.md\":\"fd9d9f10\",\"development_aws_handson-ec2.md\":\"772c438f\",\"application_vitepress-plugin-shiki-twoslash_api_logging.md\":\"21101707\",\"academic_physics_ipho-formulas-jpn_7.md\":\"c5f08abc\",\"development_aws_handson-jupyter.md\":\"a1de8f53\",\"development_aws_handson-qabot.md\":\"a85076a8\",\"development_aws_handson-serverless.md\":\"4966e034\",\"development_aws_index.md\":\"ea3c5c99\",\"development_aws_license.md\":\"9ff7f049\",\"development_aws_scientific-computing.md\":\"d445b051\",\"development_aws_serverless.md\":\"6620f7a2\",\"development_aws_webserver.md\":\"0fb39c1b\",\"development_file-naming-convention.md\":\"4bcf148c\",\"development_rclone-for-r2.md\":\"98ca94f4\",\"getting-started.md\":\"612e3ac3\",\"javascript_notes_1_1-1.md\":\"398fb576\",\"javascript_notes_1_1-2.md\":\"0a951abd\",\"jp_index.md\":\"3f85d715\",\"roadmap.md\":\"ce021cae\",\"save_reading_index.md\":\"3b5e5e33\",\"save_reading_outliers_1.md\":\"b6f70daa\",\"save_reading_outliers_2.md\":\"f554860c\",\"save_reading_outliers_3.md\":\"c3239c17\",\"save_reading_outliers_4.md\":\"b3ee2a2f\",\"index.md\":\"4d77da52\",\"academic_physics_ipho-formulas-jpn_1.md\":\"0826b814\",\"academic_physics_ipho-formulas-jpn_4.md\":\"b40a5376\",\"academic_physics_ipho-formulas-jpn_8.md\":\"28980c88\",\"academic_physics_ipho-formulas-jpn_3.md\":\"37a00d89\",\"academic_physics_ipho-formulas-jpn_9.md\":\"9c4f5b8c\",\"development_aws_main.md\":\"19fb921b\",\"application_markdown-it-katex_support-function.md\":\"04c9020a\",\"application_markdown-it-katex_support-table.md\":\"5c1009da\"}")
__VP_SITE_DATA__ = JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Toshiki's Note\",\"description\":\"Toshiki's web notebook served via Vitepress!\",\"base\":\"/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Development\",\"link\":\"/development/\"},{\"text\":\"Academic\",\"items\":[{\"text\":\"K-12\",\"items\":[{\"text\":\"Chemistry\",\"link\":\"/academic/chemistry/index\",\"activeMatch\":\"/academic/chemistry/\"},{\"text\":\"Discrete Math.\",\"link\":\"/discrete-math/index\",\"activeMatch\":\"/categories/fragments/\"},{\"text\":\"Literature\",\"link\":\"/academic/literature/index\",\"activeMatch\":\"/academic/literature/\"}]},{\"text\":\"Tools\",\"items\":[{\"text\":\"Formulas for IPhO JPN.\",\"link\":\"/academic/physics/ipho-formulas-jpn/1\",\"activeMatch\":\"/academic/physics/ipho-formulas-jpn/\"}]},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"}],\"activeMatch\":\"/academic/\"},{\"text\":\"Application\",\"items\":[{\"text\":\"Personal projects\",\"items\":[{\"text\":\"markdown-it-katex\",\"link\":\"/application/markdown-it-katex/how-to-use\",\"activeMatch\":\"/application/markdown-it-katex/\"},{\"text\":\"vitepress-plugin-shiki-twoslash\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/index\",\"activeMatch\":\"/application/vitepress-plugin-shiki-twoslash/index\"}]}],\"activeMatch\":\"/save/\"},{\"text\":\"Save\",\"items\":[{\"text\":\"Reading\",\"link\":\"/save/reading/index\",\"activeMatch\":\"/save/reading/\"},{\"text\":\"Vocabulary\",\"link\":\"/academic/vocabulary/index\",\"activeMatch\":\"/academic/vocabulary/\"}],\"activeMatch\":\"/save/\"}],\"sidebar\":{\"/development/\":[{\"text\":\"Notes & Issues\",\"collapsed\":false,\"items\":[{\"text\":\"File Naming Convention\",\"link\":\"/development/file-naming-convention\"},{\"text\":\"RClone for R2\",\"link\":\"/development/rclone-for-r2\"}]},{\"text\":\"コードで学ぶAWS入門\",\"collapsed\":false,\"items\":[{\"text\":\"背景\",\"link\":\"/development/aws/index\"},{\"text\":\"はじめに!\",\"link\":\"/development/aws/main\"},{\"text\":\"クラウド概論\",\"link\":\"/development/aws/cloud.md\"},{\"text\":\"AWS 入門\",\"link\":\"/development/aws/aws-get-started\"},{\"text\":\"Hands-on 1: 初めての EC2 インスタンスを起動する\",\"link\":\"/development/aws/handson-ec2.md\"},{\"text\":\"クラウドで行う科学計算・機械学習\",\"link\":\"/development/aws/scientific-computing.md\"},{\"text\":\"Hands-on 2: AWS でディープラーニングを実践\",\"link\":\"/development/aws/handson-ec2.md\"},{\"text\":\"Docker 入門\",\"link\":\"/development/aws/docker-system\"},{\"text\":\"Hands-on 3: AWS で自動質問回答ボットを走らせる\",\"link\":\"/development/aws/handson-qabot\"},{\"text\":\"Hands-on 4: AWS Batch を使って機械学習のハイパーパラメータサーチを並列化する\",\"link\":\"/development/aws/aws-batch\"},{\"text\":\"Web サービスの作り方\",\"link\":\"/development/aws/webserver\"},{\"text\":\"Serverless architecture\",\"link\":\"/development/aws/serverless\"},{\"text\":\"Hands-on 5: サーバーレス入門\",\"link\":\"/development/aws/handson-serverless\"},{\"text\":\"Hands-on 6: Bashoutter\",\"link\":\"/development/aws/handson-bashoutter\"},{\"text\":\"まとめ\",\"link\":\"/development/aws/closing\"},{\"text\":\"ppendix: 環境構築\",\"link\":\"/development/aws/appendix\"},{\"text\":\"謝辞\",\"link\":\"/development/aws/acknowledgement\"}]}],\"/academic/chemistry/\":[{\"text\":\"Textbook\",\"collapsed\":true,\"items\":[{\"text\":\"12-5: Reaction Mechanism\",\"link\":\"/academic/chemistry/notes/12-5\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"}]},{\"text\":\"Kinetics\",\"collapsed\":false,\"items\":[{\"text\":\"Rate determining steps\",\"link\":\"/academic/chemistry/notes/kinetics/rate-determining-step\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"}]},{\"text\":\"Problems & Solutions\",\"collapsed\":true,\"items\":[{\"text\":\"Problem: 02-20\",\"link\":\"/academic/chemistry/problems/02-20\"},{\"text\":\"Problem: 03-02-1\",\"link\":\"/academic/chemistry/problems/03-02-1\"},{\"text\":\"Problem: 03-02-2\",\"link\":\"/academic/chemistry/problems/03-02-2\"},{\"text\":\"Problem: 03-02-3\",\"link\":\"/academic/chemistry/problems/03-02-3\"}]}],\"/academic/physics\":[{\"text\":\"IPhO Formulas: JP Ver.\",\"collapsed\":false,\"items\":[{\"text\":\"1: 数学\",\"link\":\"/academic/physics/ipho-formulas-jpn/1\"},{\"text\":\"2: 一般的な推奨事\",\"link\":\"/academic/physics/ipho-formulas-jpn/2\"},{\"text\":\"3: 運動学\",\"link\":\"/academic/physics/ipho-formulas-jpn/3\"},{\"text\":\"4: 力学\",\"link\":\"/academic/physics/ipho-formulas-jpn/4\"},{\"text\":\"5: 振動と波\",\"link\":\"/academic/physics/ipho-formulas-jpn/5\"},{\"text\":\"6: 幾何光学,測光\",\"link\":\"/academic/physics/ipho-formulas-jpn/6\"},{\"text\":\"7: 波動光学\",\"link\":\"/academic/physics/ipho-formulas-jpn/7\"},{\"text\":\"8: 電気回路\",\"link\":\"/academic/physics/ipho-formulas-jpn/8\"},{\"text\":\"9: 電磁気学\",\"link\":\"/academic/physics/ipho-formulas-jpn/9\"},{\"text\":\"10: 熱力\",\"link\":\"/academic/physics/ipho-formulas-jpn/10\"},{\"text\":\"11: 量子力学\",\"link\":\"/academic/physics/ipho-formulas-jpn/11\"},{\"text\":\"12: Keplerの法則\",\"link\":\"/academic/physics/ipho-formulas-jpn/12\"},{\"text\":\"13: 相対性理論\",\"link\":\"/academic/physics/ipho-formulas-jpn/13\"}]}],\"/academic/vocabulary/\":[{\"text\":\"Vocabulary\",\"collapsed\":true,\"items\":[{\"text\":\"2023-02-27\",\"link\":\"/academic/vocabulary/2023/02/2023-02-27\"}]}],\"/academic/literature/\":[{\"text\":\"Writing Resources\",\"collapsed\":true,\"items\":[{\"text\":\"Patterns of Organization and Methods of Development\",\"link\":\"/academic/literature/writing/methods-of-development\"}]}],\"/javascript/\":[{\"text\":\"1: Basic JavaScript-Value, Variables, and Control Flow\",\"collapsed\":true,\"items\":[{\"text\":\"1-1: Numbers\",\"link\":\"/javascript/notes/1/1-1\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"}]}],\"/save/reading/\":[{\"text\":\"Outliers\",\"collapsed\":true,\"items\":[{\"text\":\"Introduction & Chapter 1: The Roseto Mystery\",\"link\":\"/save/reading/outliers/1\"},{\"text\":\"Chapter 2: The 10,000-Hour Rule\",\"link\":\"/save/reading/outliers/2\"},{\"text\":\"Chapter 3: The Trouble with Geniuses, Part 1\",\"link\":\"/save/reading/outliers/3\"},{\"text\":\"Chapter 4: The Trouble with Geniuses, Part 2\",\"link\":\"/save/reading/outliers/4\"}]}],\"/application/markdown-it-katex/\":[{\"text\":\"markdown-it-katex\",\"collapsed\":false,\"items\":[{\"text\":\"1: How to use?\",\"link\":\"/application/markdown-it-katex/how-to-use\"},{\"text\":\"2: KaTeX supported functions\",\"link\":\"/application/markdown-it-katex/support-function\"},{\"text\":\"3: KaTeX support tables\",\"link\":\"/application/markdown-it-katex/support-table\"},{\"text\":\"4: Tips\",\"link\":\"/application/markdown-it-katex/tips\"}]}],\"/application/vitepress-plugin-shiki-twoslash/\":[{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Getting Started\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/\"},{\"text\":\"Markdown Extensions\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/guide/markdown-extensions\"},{\"text\":\"Using a Custom Theme\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/guide/custom-theme\"}]},{\"text\":\"Features\",\"collapsed\":false,\"items\":[{\"text\":\"Queries\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/queries\"},{\"text\":\"Errors\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/errors\"},{\"text\":\"Emit\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/emit\"},{\"text\":\"Cutting\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/cutting\"},{\"text\":\"Multi-file\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/multi-file\"},{\"text\":\"@types\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/types\"},{\"text\":\"Meta Annotations\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/annotations\"},{\"text\":\"Logging\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/logging\"},{\"text\":\"Includes\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/api/includes\"}]},{\"text\":\"Config\",\"collapsed\":false,\"items\":[{\"text\":\"Reference\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/config/reference\"},{\"text\":\"Compiler Flags\",\"link\":\"/application/vitepress-plugin-shiki-twoslash/config/flags\"}]}]},\"footer\":{\"copyright\":\"Copyright © 2023-2023 <a href=\\\"https://github.com/andatoshiki\\\">Anda Toshiki</a>, <a href=\\\"https://github.com/lolilab\\\">LoliLab</a> and <a href=\\\"https://github.com/toshikidev\\\">Toshiki Dev</a> present <br /><span id=\\\"siteruntime_span\\\"></span>\",\"message\":\"Wrote with <i class=\\\"heart fa fa-heart fa-xs fa-beat\\\"></i> and <i class=\\\"coffee fa fa-coffee fa-xs\\\" aria-hidden=\\\"true\\\"></i> by <a href=\\\"https://toshiki.dev\\\">Anda Toshiki</a> at <code>root@andatoshiki:/~</code>\"},\"logo\":\"/logos/logo.png\",\"outline\":\"deep\",\"outlineTitle\":\"TOC\",\"outlineBadges\":false,\"lastUpdatedText\":\"Last updated\",\"algolia\":{\"appId\":\"G9IUR45K98\",\"apiKey\":\"8528cc91281d8112b28f508317a96dd3\",\"indexName\":\"toshiki-notebook\"},\"editLink\":{\"pattern\":\"https://github.com/andatoshiki/toshiki-notebook/edit/master/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/andatoshiki\"},{\"icon\":\"twitter\",\"link\":\"https://twitter.com/andatoshiki\"}]},\"locales\":{\"/\":{\"label\":\"English\",\"lang\":\"en-US\"},\"/jp/\":{\"label\":\"Japanese\",\"title\":\"Vue Test Utils\",\"lang\":\"jp-JP\",\"description\":\"La documentation officielle de Vue Test Utils\"}},\"scrollOffset\":90,\"cleanUrls\":true}")</script>
</body>
</html>