mirror of
https://github.com/andatoshiki/toshiki-notebook.git
synced 2026-06-06 09:16:45 +00:00
234 lines
155 KiB
HTML
234 lines
155 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Hands-on #1: 初めての EC2 インスタンスを起動する | Toshiki's Note</title>
|
||
<meta name="description" content="Toshiki's web notebook served via Vitepress!">
|
||
<link rel="preload stylesheet" href="/assets/style.f7fa3e44.css" as="style">
|
||
<script type="module" src="/assets/app.011284e6.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.a1bac067.js">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.01bd8d3a.js">
|
||
<link rel="modulepreload" href="/assets/chunks/ec2_keypair_console.fc89ef69.js">
|
||
<link rel="modulepreload" href="/assets/chunks/VPC.e1acca4d.js">
|
||
<link rel="modulepreload" href="/assets/development_aws_handson-ec2.md.5dab590d.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="/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's Note">
|
||
<meta property="og:description" content="Toshiki's web notebook served via Vitepress!">
|
||
<meta property="og:site" content="https://note.toshiki.dev">
|
||
<meta property="og:site_name" content="Toshiki'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-faab6904><!--[--><!--]--><!--[--><span tabindex="-1" data-v-45af77af></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-45af77af> Skip to content </a><!--]--><!----><header class="VPNav" data-v-faab6904 data-v-247c5ab3><div class="VPNavBar has-sidebar" data-v-247c5ab3 data-v-6d75dbf9><div class="container" data-v-6d75dbf9><div class="title" data-v-6d75dbf9><div class="VPNavBarTitle has-sidebar" data-v-6d75dbf9 data-v-261d630d><a class="title" href="/" data-v-261d630d><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logos/logo.png" alt data-v-38b54517><!--]--><!--[-->Toshiki's Note<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-6d75dbf9><div class="curtain" data-v-6d75dbf9></div><div class="content-body" data-v-6d75dbf9><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:'Meta';" data-v-6d75dbf9><!--[--><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-6d75dbf9 data-v-3c0c9bf7><span id="main-nav-aria-label" class="visually-hidden" data-v-3c0c9bf7>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/development/" tabindex="0" data-v-3c0c9bf7 data-v-873dd2e7 data-v-e4e6c4b9><!--[-->Development<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-3c0c9bf7 data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-0f4f7ee9><span class="text" data-v-0f4f7ee9><!----> Academic <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-0f4f7ee9><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-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><div class="items" data-v-de09e9a1><!--[--><!--[--><div class="VPMenuGroup" data-v-de09e9a1 data-v-c62e6a26><p class="title" data-v-c62e6a26>K-12</p><!--[--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/academic/chemistry/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Chemistry<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/discrete-math/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Discrete Math.<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/academic/literature/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Literature<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-de09e9a1 data-v-c62e6a26><p class="title" data-v-c62e6a26>Tools</p><!--[--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/academic/physics/ipho-formulas-jpn/1" data-v-46fe076b data-v-e4e6c4b9><!--[-->Formulas for IPhO JPN.<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-3c0c9bf7 data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-0f4f7ee9><span class="text" data-v-0f4f7ee9><!----> Application <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-0f4f7ee9><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-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><div class="items" data-v-de09e9a1><!--[--><!--[--><div class="VPMenuGroup" data-v-de09e9a1 data-v-c62e6a26><p class="title" data-v-c62e6a26>Personal projects</p><!--[--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/application/markdown-it-katex/how-to-use" data-v-46fe076b data-v-e4e6c4b9><!--[-->markdown-it-katex<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-3c0c9bf7 data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-0f4f7ee9><span class="text" data-v-0f4f7ee9><!----> Save <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-0f4f7ee9><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-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><div class="items" data-v-de09e9a1><!--[--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><a class="VPLink link" href="/save/reading/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Reading<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><a class="VPLink link" href="/academic/vocabulary/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Vocabulary<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6d75dbf9 data-v-a2970734><label title="toggle dark mode" data-v-a2970734 data-v-8702c5d1><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-checked="false" data-v-8702c5d1 data-v-ec70faa1><span class="check" data-v-ec70faa1><span class="icon" data-v-ec70faa1><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-8702c5d1><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-8702c5d1><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-6d75dbf9 data-v-c2426d78 data-v-1bba9d3c><!--[--><a class="VPSocialLink" href="https://github.com/andatoshiki" aria-label="github" target="_blank" rel="noopener" data-v-1bba9d3c data-v-cf0cf26e><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-1bba9d3c data-v-cf0cf26e><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-6d75dbf9 data-v-e42ba61f data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-0f4f7ee9><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-0f4f7ee9><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-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><!----><!--[--><!--[--><!----><div class="group" data-v-e42ba61f><div class="item appearance" data-v-e42ba61f><p class="label" data-v-e42ba61f>Appearance</p><div class="appearance-action" data-v-e42ba61f><label title="toggle dark mode" data-v-e42ba61f data-v-8702c5d1><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-checked="false" data-v-8702c5d1 data-v-ec70faa1><span class="check" data-v-ec70faa1><span class="icon" data-v-ec70faa1><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-8702c5d1><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-8702c5d1><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-e42ba61f><div class="item social-links" data-v-e42ba61f><div class="VPSocialLinks social-links-list" data-v-e42ba61f data-v-1bba9d3c><!--[--><a class="VPSocialLink" href="https://github.com/andatoshiki" aria-label="github" target="_blank" rel="noopener" data-v-1bba9d3c data-v-cf0cf26e><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-1bba9d3c data-v-cf0cf26e><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-6d75dbf9 data-v-a9101582><span class="container" data-v-a9101582><span class="top" data-v-a9101582></span><span class="middle" data-v-a9101582></span><span class="bottom" data-v-a9101582></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav" data-v-faab6904 data-v-ca8eb0ef><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-ca8eb0ef><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-ca8eb0ef><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-ca8eb0ef>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-ca8eb0ef data-v-d78c832a><button data-v-d78c832a>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-faab6904 data-v-bdc7efdf><div class="curtain" data-v-bdc7efdf></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-bdc7efdf><span class="visually-hidden" id="sidebar-aria-label" data-v-bdc7efdf> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-bdc7efdf><section class="VPSidebarItem level-0 collapsible" data-v-bdc7efdf data-v-3d2999a2><div class="item" role="button" tabindex="0" data-v-3d2999a2><div class="indicator" data-v-3d2999a2></div><h2 class="text" data-v-3d2999a2>Wiki Database</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-3d2999a2><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-3d2999a2><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-3d2999a2><!--[--><div class="VPSidebarItem level-1" data-v-3d2999a2 data-v-3d2999a2><!----><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-faab6904 data-v-abf3a598><div class="VPDoc has-sidebar has-aside" data-v-abf3a598 data-v-070d2e51><!--[--><!--]--><div class="container" data-v-070d2e51><div class="aside" data-v-070d2e51><div class="aside-curtain" data-v-070d2e51></div><div class="aside-container" data-v-070d2e51><div class="aside-content" data-v-070d2e51><div class="VPDocAside" data-v-070d2e51 data-v-fae949d7><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-fae949d7 data-v-b2195150><div class="content" data-v-b2195150><div class="outline-marker" data-v-b2195150></div><div class="outline-title" data-v-b2195150>TOC</div><nav aria-labelledby="doc-outline-aria-label" data-v-b2195150><span class="visually-hidden" id="doc-outline-aria-label" data-v-b2195150> Table of Contents for current page </span><ul class="root" data-v-b2195150 data-v-d577eff3><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-fae949d7></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-070d2e51><div class="content-container" data-v-070d2e51><!--[--><!--]--><!----><main class="main" data-v-070d2e51><div style="position:relative;" class="vp-doc _development_aws_handson-ec2" data-v-070d2e51><div><h1 id="hands-on-1-初めての-ec2-インスタンスを起動する" tabindex="-1">Hands-on #1: 初めての EC2 インスタンスを起動する <a class="header-anchor" href="#hands-on-1-初めての-ec2-インスタンスを起動する" aria-label="Permalink to "Hands-on \#1: 初めての EC2 インスタンスを起動する""></a></h1><p>ハンズオンの第一回では, CDK を使って EC2 のインスタンス(仮想サーバー)を作成し,SSH でサーバーにログインする,という演習を行う. このハンズオンを終えれば,あなたは自分だけのサーバーを AWS 上に立ち上げ,自由に計算を走らせることができるようになるのである!</p><h2 id="準備" tabindex="-1">準備 <a class="header-anchor" href="#準備" aria-label="Permalink to "準備""></a></h2><p>ハンズオンのソースコードは GitHub の <a href="https://github.com/tomomano/learn-aws-by-coding/tree/main/handson/ec2-get-started" target="_blank" rel="noreferrer">handson/ec2-get-started</a> に置いてある.</p><p>このハンズオンは,基本的に <a href="https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc" target="_blank" rel="noreferrer">AWS の無料枠</a> の範囲内で実行することができる.</p><p>まずは,ハンズオンを実行するための環境を整える. これらの環境整備は,後のハンズオンでも前提となるものなので確実にミスなく行っていただきたい.</p><ul><li><p><strong>AWS Account</strong>: ハンズオンを実行するには個人の AWS アカウントが必要である. AWS アカウントの取得については <a href="#sec:create_aws_account">???</a> を参照のこと.</p></li><li><p><strong>Python と Node.js</strong>: 本ハンズオンを実行するには,Python (3.6 以上),Node.js (12.0 以上) がインストールされていなければならない.</p></li><li><p><strong>AWS CLI</strong>: AWS CLI のインストールについては, <a href="#aws_cli_install">???</a> を参照. ここに記載されている認証鍵の設定も済ませておくこと.</p></li><li><p><strong>AWS CDK</strong>: AWS CDK のインストールについては, <a href="#aws_cdk_install">???</a> を参照.</p></li><li><p><strong>ソースコードのダウンロード</strong>: 本ハンズオンで使用するプログラムのソースコードを,以下のコマンドを使って GitHub からダウンロードする.</p></li></ul><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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">git</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">clone</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">https://github.com/tomomano/learn-aws-by-coding.git</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">git</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">clone</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">https://github.com/tomomano/learn-aws-by-coding.git</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://github.com/tomomano/learn-aws-by-coding" target="_blank" rel="noreferrer">https://github.com/tomomano/learn-aws-by-coding</a> のページに行って,右上のダウンロードボタンからダウンロードすることもできる.</p><p><strong>Docker を使用する場合</strong></p><p>Python, Node.js, AWS CDK など,ハンズオンのプログラムを実行するために必要なプログラム/ライブラリがインストール済みの Docker image を用意した. また,ハンズオンのソースコードもパッケージ済みである. Docker の使い方を知っている読者は,これを使えば,諸々のインストールをする必要なく,すぐにハンズオンのプログラムを実行できる.</p><p>使用方法については <a href="#sec_handson_docker">???</a> を参照のこと.</p><h2 id="ssh" tabindex="-1">SSH <a class="header-anchor" href="#ssh" aria-label="Permalink to "SSH""></a></h2><p><strong>SSH (secure shell)</strong> は Unix 系のリモートサーバーに安全にアクセスするためのツールである. 本ハンズオンでは, SSH を使って仮想サーバーにアクセスする. SSH に慣れていない読者のため,簡単な説明をここで行おう.</p><p>SSH による通信はすべて暗号化されているので,機密情報をインターネットを介して安全に送受信することができる. 本ハンズオンで,リモートのサーバーにアクセスするための SSH クライアントがローカルマシンにインストールされている必要がある. SSH クライアントは Linux/Mac には標準搭載されている. Windows の場合は WSL をインストールすることで SSH クライアントを利用することを推奨する (<a href="#environments">???</a> を参照).</p><p>SSH コマンドの基本的な使い方を次に示す. <code><host name></code> はアクセスする先のサーバーの IP アドレスや DNS によるホストネームが入る. <code><user name></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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ssh</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#C3E88D;">user</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nam</span><span style="color:#A6ACCD;">e</span><span style="color:#89DDFF;">></span><span style="color:#C3E88D;">@</span><span style="color:#89DDFF;"><</span><span style="color:#C3E88D;">host</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nam</span><span style="color:#A6ACCD;">e</span><span style="color:#89DDFF;">></span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">ssh</span><span style="color:#ABB2BF;"> <</span><span style="color:#98C379;">user</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">nam</span><span style="color:#ABB2BF;">e></span><span style="color:#98C379;">@</span><span style="color:#ABB2BF;"><</span><span style="color:#98C379;">host</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">nam</span><span style="color:#ABB2BF;">e></span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>SSH は平文のパスワードによる認証を行うこともできるが,より強固なセキュリティを施すため,<strong>公開鍵暗号方式(Public Key Cryptography)による認証</strong>を行うことが強く推奨されており, EC2 はこの方法でしかアクセスを許していない. 公開鍵暗号方式の仕組みについては各自勉強してほしい. 本ハンズオンにおいて大事なことは,<strong>EC2 インスタンスが公開鍵(Public key)を保持し,クライアントとなるコンピュータ(読者自身のコンピュータ)が秘密鍵(Private key)を保持する</strong>,という点である. EC2 のインスタンスには秘密鍵を持ったコンピュータのみがアクセスすることができる.逆に言うと,秘密鍵が漏洩すると第三者もサーバーにアクセスできることになるので,<strong>秘密鍵は絶対に漏洩することのないよう注意して管理する</strong>.</p><p>SSH コマンドでは,ログインのために使用する秘密鍵ファイルを <code>-i</code> もしくは <code>--identity_file</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ssh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">Ec2SecretKey.pem</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#C3E88D;">user</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nam</span><span style="color:#A6ACCD;">e</span><span style="color:#89DDFF;">></span><span style="color:#C3E88D;">@</span><span style="color:#89DDFF;"><</span><span style="color:#C3E88D;">host</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nam</span><span style="color:#A6ACCD;">e</span><span style="color:#89DDFF;">></span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">ssh</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-i</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">Ec2SecretKey.pem</span><span style="color:#ABB2BF;"> <</span><span style="color:#98C379;">user</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">nam</span><span style="color:#ABB2BF;">e></span><span style="color:#98C379;">@</span><span style="color:#ABB2BF;"><</span><span style="color:#98C379;">host</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">nam</span><span style="color:#ABB2BF;">e></span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="アプリケーションの説明" tabindex="-1">アプリケーションの説明 <a class="header-anchor" href="#アプリケーションの説明" aria-label="Permalink to "アプリケーションの説明""></a></h2><p>このハンズオンで作成するアプリケーションの概要を <a href="#handson_01_architecture">figure_title</a> に示す.</p><p><img src="/assets/app_architecture.6f328bd7.png" alt="ハンズオン#1で作製するアプリケーションのアーキテクチャ"></p><p>このアプリケーションではまず,<strong>VPC (Virtual Private Cloud)</strong> を使ってプライベートな仮想ネットワーク環境を立ち上げている. その VPC の public subnet の内側に,<strong>EC2 (Elatic Compute Cloud)</strong> の仮想サーバーを配置する. さらに,セキュリティのため, <strong>Security Group</strong> による EC2 インスタンスへのアクセス制限を設定している. このようにして作成された仮想サーバーに,SSH を使ってアクセスし,簡単な計算を行う.</p><p><a href="#handson_01_architecture">figure_title</a> のようなアプリケーションを,CDK を使って構築する.</p><p>早速ではあるが,今回のハンズオンで使用するプログラムを見てみよう (<a href="https://github.com/tomomano/learn-aws-by-coding/blob/main/handson/ec2-get-started/app.py" target="_blank" rel="noreferrer">handson/ec2-get-started/app.py</a>).</p><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#C792EA;">class</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">MyFirstEc2</span><span style="color:#89DDFF;">(</span><span style="color:#FFCB6B;">core</span><span style="color:#89DDFF;">.</span><span style="color:#FFCB6B;">Stack</span><span style="color:#89DDFF;">):</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">def</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">__init__</span><span style="color:#89DDFF;">(</span><span style="color:#F07178;font-style:italic;">self</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">scope</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> core</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">App</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">name</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">str</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">key_name</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">str</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">**</span><span style="color:#A6ACCD;font-style:italic;">kwargs</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">-></span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">None:</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">super</span><span style="color:#89DDFF;">().</span><span style="color:#82AAFF;">__init__</span><span style="color:#89DDFF;">(</span><span style="color:#82AAFF;">scope</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> name</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">**</span><span style="color:#82AAFF;">kwargs</span><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#676E95;font-style:italic;">#</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> vpc </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">Vpc</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;">self</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">MyFirstEc2-Vpc</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">max_azs</span><span style="color:#89DDFF;">=</span><span style="color:#F78C6C;">1</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">cidr</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">10.10.0.0/23</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">subnet_configuration</span><span style="color:#89DDFF;">=[</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">SubnetConfiguration</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">name</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">public</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">subnet_type</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">SubnetType</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">PUBLIC</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">],</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">nat_gateways</span><span style="color:#89DDFF;">=</span><span style="color:#F78C6C;">0</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#676E95;font-style:italic;">#</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> sg </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">SecurityGroup</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;">self</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">MyFirstEc2Vpc-Sg</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">vpc</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">vpc</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">allow_all_outbound</span><span style="color:#89DDFF;">=True,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> sg</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">add_ingress_rule</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">peer</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">Peer</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">any_ipv4</span><span style="color:#89DDFF;">(),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">connection</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">Port</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">tcp</span><span style="color:#89DDFF;">(</span><span style="color:#F78C6C;">22</span><span style="color:#89DDFF;">),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#676E95;font-style:italic;">#</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> host </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">Instance</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;">self</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">MyFirstEc2Instance</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">instance_type</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">InstanceType</span><span style="color:#89DDFF;">(</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">t2.micro</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">machine_image</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">MachineImage</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">latest_amazon_linux</span><span style="color:#89DDFF;">(),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">vpc</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">vpc</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">vpc_subnets</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">SubnetSelection</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">subnet_type</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">SubnetType</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">PUBLIC</span><span style="color:#89DDFF;">),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">security_group</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">sg</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">key_name</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">key_name</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">)</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#C678DD;">class</span><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">MyFirstEc2</span><span style="color:#ABB2BF;">(</span><span style="color:#E5C07B;">core</span><span style="color:#ABB2BF;">.</span><span style="color:#E5C07B;">Stack</span><span style="color:#ABB2BF;">):</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#C678DD;">def</span><span style="color:#ABB2BF;"> </span><span style="color:#56B6C2;">__init__</span><span style="color:#ABB2BF;">(</span><span style="color:#E5C07B;font-style:italic;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;font-style:italic;">scope</span><span style="color:#ABB2BF;">: core.App, </span><span style="color:#D19A66;font-style:italic;">name</span><span style="color:#ABB2BF;">: </span><span style="color:#56B6C2;">str</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;font-style:italic;">key_name</span><span style="color:#ABB2BF;">: </span><span style="color:#56B6C2;">str</span><span style="color:#ABB2BF;">, **</span><span style="color:#D19A66;font-style:italic;">kwargs</span><span style="color:#ABB2BF;">) -> </span><span style="color:#D19A66;">None</span><span style="color:#ABB2BF;">:</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#56B6C2;">super</span><span style="color:#ABB2BF;">().</span><span style="color:#56B6C2;">__init__</span><span style="color:#ABB2BF;">(scope, name, **kwargs)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#7F848E;font-style:italic;">#</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> vpc </span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">Vpc</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"MyFirstEc2-Vpc"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">max_azs</span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;">1</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">cidr</span><span style="color:#56B6C2;">=</span><span style="color:#98C379;">"10.10.0.0/23"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">subnet_configuration</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">[</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">SubnetConfiguration</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">name</span><span style="color:#56B6C2;">=</span><span style="color:#98C379;">"public"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">subnet_type</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.SubnetType.</span><span style="color:#D19A66;">PUBLIC</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> )</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> ],</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">nat_gateways</span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> )</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#7F848E;font-style:italic;">#</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> sg </span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">SecurityGroup</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"MyFirstEc2Vpc-Sg"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">vpc</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">vpc,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">allow_all_outbound</span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;">True</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> )</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> sg.</span><span style="color:#61AFEF;">add_ingress_rule</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">peer</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.Peer.</span><span style="color:#61AFEF;">any_ipv4</span><span style="color:#ABB2BF;">(),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">connection</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.Port.</span><span style="color:#61AFEF;">tcp</span><span style="color:#ABB2BF;">(</span><span style="color:#D19A66;">22</span><span style="color:#ABB2BF;">),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> )</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#7F848E;font-style:italic;">#</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> host </span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">Instance</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"MyFirstEc2Instance"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">instance_type</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.</span><span style="color:#61AFEF;">InstanceType</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">"t2.micro"</span><span style="color:#ABB2BF;">),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">machine_image</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.MachineImage.</span><span style="color:#61AFEF;">latest_amazon_linux</span><span style="color:#ABB2BF;">(),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">vpc</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">vpc,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">vpc_subnets</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.</span><span style="color:#61AFEF;">SubnetSelection</span><span style="color:#ABB2BF;">(</span><span style="color:#E06C75;font-style:italic;">subnet_type</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.SubnetType.</span><span style="color:#D19A66;">PUBLIC</span><span style="color:#ABB2BF;">),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">security_group</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">sg,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">key_name</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">key_name</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> )</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><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br></div></div><ul><li><p>まず最初に,VPC を定義する.</p></li><li><p>次に, security group (SG) を定義している. ここでは,任意の IPv4 のアドレスからの,ポート 22 (SSH の接続に使用される)への接続を許可している. それ以外の接続は拒絶される.</p></li><li><p>最後に,上記で作った VPC と SG が付与された EC2 インスタンスを作成している. インスタンスタイプは <code>t2.micro</code> を選択し, <a href="https://aws.amazon.com/amazon-linux-ami/" target="_blank" rel="noreferrer">Amazon Linux</a> を OS として設定している.</p></li></ul><p>それぞれについて,もう少し詳しく説明しよう.</p><h3 id="vpc-virtual-private-cloud" tabindex="-1">VPC (Virtual Private Cloud) <a class="header-anchor" href="#vpc-virtual-private-cloud" aria-label="Permalink to "VPC (Virtual Private Cloud)""></a></h3><p><strong>VPC のアイコン.</strong></p><p><img src="/assets/VPC.4eaea6ed.png" alt="VPC"></p><p>VPC は AWS 上にプライベートな仮想ネットワーク環境を構築するツールである.高度な計算システムを構築するには,複数のサーバーを連動させて計算を行う必要があるが,そのような場合に互いのアドレスなどを管理する必要があり,そういった目的で VPC は有用である.</p><p>本ハンズオンでは,サーバーは一つしか起動しないので,VPC の恩恵はよく分からないかもしれない.しかし,EC2 インスタンスは必ず VPC の中に配置されなければならない,という制約があるので,このハンズオンでもミニマルな VPC を構成している.</p><p>興味のある読者のために,VPC のコードについてもう少し詳しく説明しよう.</p><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#A6ACCD;">vpc </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">Vpc</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;">self</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">MyFirstEc2-Vpc</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">max_azs</span><span style="color:#89DDFF;">=</span><span style="color:#F78C6C;">1</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">cidr</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">10.10.0.0/23</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">subnet_configuration</span><span style="color:#89DDFF;">=[</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">SubnetConfiguration</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">name</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">public</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">subnet_type</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">SubnetType</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">PUBLIC</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">],</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">nat_gateways</span><span style="color:#89DDFF;">=</span><span style="color:#F78C6C;">0</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#89DDFF;">)</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#ABB2BF;">vpc </span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">Vpc</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"MyFirstEc2-Vpc"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">max_azs</span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;">1</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">cidr</span><span style="color:#56B6C2;">=</span><span style="color:#98C379;">"10.10.0.0/23"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">subnet_configuration</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">[</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">SubnetConfiguration</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">name</span><span style="color:#56B6C2;">=</span><span style="color:#98C379;">"public"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">subnet_type</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.SubnetType.</span><span style="color:#D19A66;">PUBLIC</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> )</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> ],</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">nat_gateways</span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">)</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><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><ul><li><p><code>max_azs=1</code> : このパラメータは,前章で説明した avaialibility zone (AZ) を設定している. このハンズオンでは,特にデータセンターの障害などを気にする必要はないので <code>1</code> にしている.</p></li><li><p><code>cidr="10.10.0.0/23"</code> : このパラメータは,VPC 内の IPv4 のレンジを指定している. CIDR 記法については, <a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing" target="_blank" rel="noreferrer">Wikipedia</a>などを参照. <code>10.10.0.0/23</code> は <code>10.10.0.0</code> から <code>10.10.1.255</code> までの 512 個の連続したアドレス範囲を指している. つまり,この VPC では最大で 512 個のユニークな IPv4 アドレスが使えることになる. 今回はサーバーは一つなので 512 個は明らかに多すぎるが,VPC はアドレスの数はどれだけ作成しても無料なので,多めに作成した.</p></li><li><p><code>subnet_configuration=...</code> : このパラメータは,VPC にどのようなサブネットを作るか,を決めている. サブネットの種類には <strong>private subnet</strong> と <strong>public subnet</strong> の二種類がある. private subnet は基本的にインターネットとは遮断されたサブネット環境である. インターネットと繋がっていないので,セキュリティは極めて高く, VPC 内のサーバーとのみ通信を行えばよい EC2 インスタンスはここに配置する. Public subnet とはインターネットに繋がったサブネットである. 本ハンズオンで作成するサーバーは,外から SSH でログインを行いたいので, Public subnet 内に配置する. より詳細な記述は <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-subnet-basics" target="_blank" rel="noreferrer">公式ドキュメンテーション</a> を参照.</p></li><li><p><code>natgateways=0</code> : これは少し高度な内容なので省略する (興味のある読者は <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html" target="_blank" rel="noreferrer">公式ドキュメンテーション</a>を参照). が,<strong>これを 0 にしておかないと,NAT Gateway の利用料金が発生してしまうので,注意!</strong></p></li></ul><h3 id="security-group" tabindex="-1">Security Group <a class="header-anchor" href="#security-group" aria-label="Permalink to "Security Group""></a></h3><p>Security group (SG) は, EC2 インスタンスに付与することのできる仮想ファイアーウォールである. たとえば,特定の IP アドレスから来た接続を許可・拒絶したり (インバウンド・トラフィックの制限) ,逆に特定の IP アドレスへのアクセスを禁止したり (アウトバウンド・トラフィックの制限) することができる.</p><p>コードの該当部分を見てみよう.</p><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#A6ACCD;">sg </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">SecurityGroup</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;">self</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">MyFirstEc2Vpc-Sg</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">vpc</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">vpc</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">allow_all_outbound</span><span style="color:#89DDFF;">=True,</span></span>
|
||
<span class="line"><span style="color:#89DDFF;">)</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;">sg</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">add_ingress_rule</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">peer</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">Peer</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">any_ipv4</span><span style="color:#89DDFF;">(),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">connection</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">Port</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">tcp</span><span style="color:#89DDFF;">(</span><span style="color:#F78C6C;">22</span><span style="color:#89DDFF;">),</span></span>
|
||
<span class="line"><span style="color:#89DDFF;">)</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#ABB2BF;">sg </span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">SecurityGroup</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"MyFirstEc2Vpc-Sg"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">vpc</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">vpc,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">allow_all_outbound</span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;">True</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">)</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">sg.</span><span style="color:#61AFEF;">add_ingress_rule</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">peer</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.Peer.</span><span style="color:#61AFEF;">any_ipv4</span><span style="color:#ABB2BF;">(),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">connection</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.Port.</span><span style="color:#61AFEF;">tcp</span><span style="color:#ABB2BF;">(</span><span style="color:#D19A66;">22</span><span style="color:#ABB2BF;">),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">)</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>本ハンズオンでは, SSH による外部からの接続を許容するため, <code>sg.add_ingress_rule(peer=ec2.Peer.any_ipv4(), connection=ec2.Port.tcp(22))</code> により,すべての IPv4 アドレスからのポート 22 番へのアクセスを許容している. また, SSH で EC2 インスタンスにログインしたのち,インターネットからプログラムなどをダウンロードできるよう, <code>allow_all_outbound=True</code> のパラメータを設定している.</p><p>SSH はデフォルトでは 22 番ポートを使用するのが慣例である.</p><p>セキュリティ上の観点からは,SSH の接続は自宅や大学・職場など特定の地点からの接続のみを許す方が望ましい.</p><h3 id="ec2-elastic-compute-cloud" tabindex="-1">EC2 (Elastic Compute Cloud) <a class="header-anchor" href="#ec2-elastic-compute-cloud" aria-label="Permalink to "EC2 (Elastic Compute Cloud)""></a></h3><p><strong>EC2 のアイコン.</strong></p><p><img src="/assets/EC2.e3341478.png" alt="EC2"></p><p>EC2 は AWS 上に仮想サーバーを立ち上げるサービスである. 個々の起動状態にある仮想サーバーのことをインスタンス (instance) とよぶ (しかし,口語的なコミュニケーションにおいては,サーバーとインスタンスという言葉は相互互換的に用いられることが多い).</p><p>EC2 では用途に応じて様々なインスタンスタイプが提供されている. <a href="#ec2_instance_types">table_title</a> に,代表的なインスタンスタイプの例を挙げる (執筆時点での情報). EC2 のインスタンスタイプのすべてのリストは <a href="https://aws.amazon.com/ec2/instance-types/" target="_blank" rel="noreferrer">公式ドキュメンテーション "Amazon EC2 Instance Types"</a> で見ることができる.</p><h3 id="ec2-instance-types" tabindex="-1">EC2 instance types <a class="header-anchor" href="#ec2-instance-types" aria-label="Permalink to "EC2 instance types""></a></h3><table><thead><tr><th>Instance</th><th>vCPU</th><th>Memory (GiB)</th><th>Network bandwidth (Gbps)</th><th>Price per hour ($)</th></tr></thead><tbody><tr><td>t2.micro</td><td>1</td><td>1</td><td>-</td><td>0.0116</td></tr><tr><td>t2.small</td><td>1</td><td>2</td><td>-</td><td>0.023</td></tr><tr><td>t2.medium</td><td>2</td><td>4</td><td>-</td><td>0.0464</td></tr><tr><td>c5.24xlarge</td><td>96</td><td>192</td><td>25</td><td>4.08</td></tr><tr><td>c5n.18xlarge</td><td>72</td><td>192</td><td>100</td><td>3.888</td></tr><tr><td>x1e.16xlarge</td><td>64</td><td>1952</td><td>10</td><td>13.344</td></tr></tbody></table><p><a href="#ec2_instance_types">table_title</a> からわかるように, CPU は 1 コアから 96 コアまで,メモリーは 1GB から 2TB 以上まで,ネットワーク帯域は最大で 100Gbps まで,幅広く選択することができる. また,時間あたりの料金は,CPU・メモリーの占有数にほぼ比例する形で増加する. EC2 はサーバーの起動時間を秒単位で記録しており,<strong>利用料金は使用時間に比例する形で決定される</strong>. 例えば, <code>t2.medium</code> のインスタンスを 10 時間起動した場合,0.0464 * 10 = 0.464 ドルの料金が発生する.</p><p>AWS には <a href="https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc" target="_blank" rel="noreferrer">無料利用枠</a> というものがあり, <code>t2.micro</code> であれば月に 750 時間までは無料で利用することができる.</p><p><a href="#ec2_instance_types">table_title</a> の価格は <code>us-east-1</code> のものである. リージョンによって多少価格設定が異なる.</p><p>上記で t2.micro の $0.0116 / hour という金額は, On-demand インスタンスというタイプを選択した場合の価格である. EC2 ではほかに, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html" target="_blank" rel="noreferrer">Spot instance</a> とよばれるインスタンスも存在しする. Spot instance は,AWS のデータセンターの負荷が増えた場合,ユーザーのプログラムが実行中であっても AWS の判断により強制シャットダウンされる,という不便さを抱えているのだが,その分大幅に安い料金設定になっている. AWS で一時的に生じた余剰な空き CPU をユーザーに割安で貸し出す,という発想である. 科学計算やウェブサーバーなどの用途でコストを削減する目的で, Spot Instance を活用する事例も多数報告されている.</p><p>EC2 インスタンスを定義しているコードの該当部分を見てみよう.</p><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#A6ACCD;">host </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">Instance</span><span style="color:#89DDFF;">(</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;">self</span><span style="color:#89DDFF;">,</span><span style="color:#82AAFF;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">MyFirstEc2Instance</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">instance_type</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">InstanceType</span><span style="color:#89DDFF;">(</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">t2.micro</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">machine_image</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">MachineImage</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">latest_amazon_linux</span><span style="color:#89DDFF;">(),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">vpc</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">vpc</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">vpc_subnets</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">SubnetSelection</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">subnet_type</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">ec2</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">SubnetType</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">PUBLIC</span><span style="color:#89DDFF;">),</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">security_group</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">sg</span><span style="color:#89DDFF;">,</span></span>
|
||
<span class="line"><span style="color:#82AAFF;"> </span><span style="color:#A6ACCD;font-style:italic;">key_name</span><span style="color:#89DDFF;">=</span><span style="color:#82AAFF;">key_name</span></span>
|
||
<span class="line"><span style="color:#89DDFF;">)</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#ABB2BF;">host </span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;"> ec2.</span><span style="color:#61AFEF;">Instance</span><span style="color:#ABB2BF;">(</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E5C07B;">self</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"MyFirstEc2Instance"</span><span style="color:#ABB2BF;">,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">instance_type</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.</span><span style="color:#61AFEF;">InstanceType</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">"t2.micro"</span><span style="color:#ABB2BF;">),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">machine_image</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.MachineImage.</span><span style="color:#61AFEF;">latest_amazon_linux</span><span style="color:#ABB2BF;">(),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">vpc</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">vpc,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">vpc_subnets</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.</span><span style="color:#61AFEF;">SubnetSelection</span><span style="color:#ABB2BF;">(</span><span style="color:#E06C75;font-style:italic;">subnet_type</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">ec2.SubnetType.</span><span style="color:#D19A66;">PUBLIC</span><span style="color:#ABB2BF;">),</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">security_group</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">sg,</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#E06C75;font-style:italic;">key_name</span><span style="color:#56B6C2;">=</span><span style="color:#ABB2BF;">key_name</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">)</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>t2.micro</code> というインスタンスタイプを選択している. さらに, <code>machine_image</code> として, <a href="https://aws.amazon.com/amazon-linux-ami/" target="_blank" rel="noreferrer">Amazon Linux</a> を選択している (Machine image は OS と似た概念である. Machine image については, <a href="#sec_jupyter_and_deep_learning">???</a> でより詳しく触れる). さらに,上で定義した VPC, SG をこのインスタンスに付与している.</p><p>以上が,今回使用するプログラムの簡単な解説であった. ミニマルな形のプログラムではあるが,仮想サーバーを作成するのに必要なステップがおわかりいただけただろうか?</p><h2 id="プログラムを実行する" tabindex="-1">プログラムを実行する <a class="header-anchor" href="#プログラムを実行する" aria-label="Permalink to "プログラムを実行する""></a></h2><p>さて,ハンズオンのコードの理解ができたところで,プログラムを実際に実行してみよう.繰り返しになるが, <a href="#handson_01_prep">準備</a> での準備ができていることが前提である.</p><h3 id="python-の依存ライブラリのインストール" tabindex="-1">Python の依存ライブラリのインストール <a class="header-anchor" href="#python-の依存ライブラリのインストール" aria-label="Permalink to "Python の依存ライブラリのインストール""></a></h3><p>まずは,Python の依存ライブラリをインストールする.以下では,Python のライブラリを管理するツールとして, <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noreferrer">venv</a> を使用する.</p><p>まずは, <code>handson/ec2-get-started</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">cd</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">handson/ec2-get-started</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">cd</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">handson/ec2-get-started</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">python3</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-m</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">venv</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">.env</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">source</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">.env/bin/activate</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">pip</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-r</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">requirements.txt</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">python3</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-m</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">venv</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">.env</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">source</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">.env/bin/activate</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">pip</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">install</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-r</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">requirements.txt</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>これで Python の環境構築は完了だ.</p><p><code>venv</code> の簡単な説明は <a href="#venv_quick_guide">???</a> に記述してある.</p><p>環境によっては <code>pip</code> ではなく <code>pip3</code> あるいは <code>python3 -m pip</code> に置き換える必要がある.</p><h3 id="aws-のシークレットキーをセットする" tabindex="-1">AWS のシークレットキーをセットする <a class="header-anchor" href="#aws-のシークレットキーをセットする" aria-label="Permalink to "AWS のシークレットキーをセットする""></a></h3><p>AWS CLI および AWS CDK を使うには, AWS のシークレットキーが設定されている必要がある. シークレットキーの発行については <a href="#aws_secrets">???</a> を参照のこと. シークレットキーを発行したら, <a href="#aws_cli_install">???</a> を参照し,コマンドラインの設定を行う.</p><p>手順をここに短く要約すると,一つ目の方法は <code>AWS_ACCESS_KEY_ID</code> などの環境変数を設定するやり方である. もう一つの方法は, <code>~/.aws/credentials</code> に認証情報を保存しておく方式である. シークレットキーの設定は AWS CLI/CDK を使用するうえで共通のステップになるので,しっかりと理解しておくように.</p><h3 id="ssh-鍵を生成" tabindex="-1">SSH 鍵を生成 <a class="header-anchor" href="#ssh-鍵を生成" aria-label="Permalink to "SSH 鍵を生成""></a></h3><p>EC2 インスタンスには SSH を使ってログインする. EC2 インスタンスを作成するのに先行して,今回のハンズオンで専用に使う SSH の公開鍵・秘密鍵のペアを準備する必要がある.</p><p>次の AWS CLI コマンドにより, <code>HirakeGoma</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">KEY_NAME=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">HirakeGoma</span><span style="color:#89DDFF;">"</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">aws</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ec2</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">create-key-pair</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--key-name</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">${</span><span style="color:#A6ACCD;">KEY_NAME</span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--query</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">KeyMaterial</span><span style="color:#89DDFF;">'</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--output</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">text</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">${</span><span style="color:#A6ACCD;">KEY_NAME</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.pem</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">export</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">KEY_NAME="HirakeGoma"</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">aws</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">ec2</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">create-key-pair</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">--key-name</span><span style="color:#ABB2BF;"> ${</span><span style="color:#E06C75;">KEY_NAME</span><span style="color:#ABB2BF;">} </span><span style="color:#D19A66;">--query</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">'KeyMaterial'</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">--output</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">text</span><span style="color:#ABB2BF;"> > ${</span><span style="color:#E06C75;">KEY_NAME</span><span style="color:#ABB2BF;">}</span><span style="color:#98C379;">.pem</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>このコマンドを実行すると,現在のディレクトリに <code>HirakeGoma.pem</code> というファイルが作成される.これが,サーバーにアクセスするための秘密鍵である. SSH でこの鍵を使うため, <code>~/.ssh/</code> のディレクトリに鍵を移動する. さらに,秘密鍵が書き換えられたり第三者に閲覧されないよう,ファイルのアクセス権限を <code>400</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">mv</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">HirakeGoma.pem</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">~/.ssh/</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">400</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">~/.ssh/HirakeGoma.pem</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">mv</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">HirakeGoma.pem</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">~/.ssh/</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">chmod</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">400</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">~/.ssh/HirakeGoma.pem</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><h3 id="デプロイを実行" tabindex="-1">デプロイを実行 <a class="header-anchor" href="#デプロイを実行" aria-label="Permalink to "デプロイを実行""></a></h3><p>これまでのステップで, EC2 インスタンスをデプロイするための準備が整った! 早速,次のコマンドによりアプリケーションを AWS にデプロイしよう. <code>-c key_name="HirakeGoma"</code> というオプションで,先ほど生成した <code>HirakeGoma</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">cdk</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">deploy</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-c</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">key_name=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">HirakeGoma</span><span style="color:#89DDFF;">"</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">cdk</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">deploy</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-c</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">key_name="HirakeGoma"</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>このコマンドを実行すると, VPC, EC2 などが AWS 上に展開される. そして,コマンドの出力の最後に <a href="#handson_01_cdk_output">figure_title</a> のような出力が得られるはずである. <strong>出力の中で <code>InstancePublicIp</code> に続く数字が,起動したインスタンスのパブリック IP アドレスである.</strong> IP アドレスはデプロイごとにランダムなアドレスが割り当てられる.</p><p><img src="/assets/cdk_output.fe4cd34c.png" alt="CDKデプロイ実行後の出力"></p><h3 id="ssh-でログイン" tabindex="-1">SSH でログイン <a class="header-anchor" href="#ssh-でログイン" aria-label="Permalink to "SSH でログイン""></a></h3><p>早速,SSH で接続してみよう.</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ssh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">~/.ssh/HirakeGoma.pem</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ec2-user@</span><span style="color:#89DDFF;"><</span><span style="color:#C3E88D;">IP</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">addres</span><span style="color:#A6ACCD;">s</span><span style="color:#89DDFF;">></span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">ssh</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-i</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">~/.ssh/HirakeGoma.pem</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">ec2-user@</span><span style="color:#ABB2BF;"><</span><span style="color:#98C379;">IP</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">addres</span><span style="color:#ABB2BF;">s></span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><code>-i</code> オプションで,先ほど生成した秘密鍵を指定している. EC2 インスタンスにはデフォルトで <code>ec2-user</code> という名前のユーザーが作られているので,それを使用する. 最後に, <code><IP address></code> の部分は自身が作成した EC2 インスタンスの IP アドレスで置き換える (<code>12.345.678.9</code> など).</p><p>ログインに成功すると, <a href="#fig_handson_01_ssh_login">figure_title</a> のような画面が表示される. リモートのサーバーにログインしているので,プロンプトが <code>[ec2-user@ip-10-10-1-217 ~]$</code> のようになっていることを確認しよう.</p><p><img src="/assets/ssh_login.a5055bc8.png" alt="SSH で EC2 インスタンスにログイン"></p><p><strong>おめでとう!これで,めでたく AWS 上に EC2 仮想サーバーを起動し,リモートからアクセスできるようになった!</strong></p><h3 id="起動した-ec2-インスタンスで遊んでみる" tabindex="-1">起動した EC2 インスタンスで遊んでみる <a class="header-anchor" href="#起動した-ec2-インスタンスで遊んでみる" aria-label="Permalink to "起動した EC2 インスタンスで遊んでみる""></a></h3><p>せっかく新しいインスタンスを起動したので,少し遊んでみよう.</p><p>ログインした EC2 インスタンスで,次のコマンドを実行してみよう. CPU の情報を取得することができる.</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">cat</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">/proc/cpuinfo</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#FFCB6B;">processor</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">vendor_id</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">GenuineIntel</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">cpu</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">family</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">6</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">model</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">63</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">model</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">name</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">Intel</span><span style="color:#89DDFF;">(</span><span style="color:#FFCB6B;">R</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">Xeon</span><span style="color:#89DDFF;">(</span><span style="color:#FFCB6B;">R</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">CPU</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">E5-2676</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">v3</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">@</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2.40</span><span style="color:#C3E88D;">GHz</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">stepping</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">microcode</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0x43</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">cpu</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">MHz</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2400.096</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">cache</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">size</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">30720</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">KB</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">cat</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">/proc/cpuinfo</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#61AFEF;">processor</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">vendor_id</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">GenuineIntel</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">cpu</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">family</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">6</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">model</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">63</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">model</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">name</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">Intel</span><span style="color:#ABB2BF;">(</span><span style="color:#61AFEF;">R</span><span style="color:#ABB2BF;">) </span><span style="color:#98C379;">Xeon</span><span style="color:#ABB2BF;">(</span><span style="color:#61AFEF;">R</span><span style="color:#ABB2BF;">) </span><span style="color:#98C379;">CPU</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">E5-2676</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">v3</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">@</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">2.40</span><span style="color:#98C379;">GHz</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">stepping</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">2</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">microcode</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0x43</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">cpu</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">MHz</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">2400.096</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">cache</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">size</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">30720</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">KB</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><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><p>次に,実行中のプロセスやメモリの消費を見てみよう.</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">top</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-n</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#FFCB6B;">top</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">09</span><span style="color:#C3E88D;">:29:19</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">up</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">43</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">min,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">user,</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">load</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">average:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.00</span><span style="color:#C3E88D;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.00</span><span style="color:#C3E88D;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.00</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">Tasks:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">76</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">total,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">running,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">51</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">sleeping,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">stopped,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">zombie</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">Cpu(s</span><span style="color:#A6ACCD;">): 0.3%us, 0.3%sy, 0.1%ni, 98.9%id, 0.2%wa, 0.0%hi, 0.0%si, 0.2%st</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">Mem:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1009140</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">total,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">270760</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">used,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">738380</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">free,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">14340</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">buffers</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">Swap:</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">total,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">used,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">free,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">185856</span><span style="color:#C3E88D;">k</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">cached</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">PID</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">USER</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">PR</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">NI</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">VIRT</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">RES</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">SHR</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">S</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">%CPU</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">%MEM</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">TIME+</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">COMMAND</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">1</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">root</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">20</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">19696</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2596</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2268</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">S</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.3</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#C3E88D;">:01.21</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">init</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">2</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">root</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">20</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">S</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#C3E88D;">:00.00</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">kthreadd</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">3</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">root</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">20</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">I</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0.0</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">0</span><span style="color:#C3E88D;">:00.00</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">kworker/0:0</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">top</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-n</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">1</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#61AFEF;">top</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">-</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">09</span><span style="color:#98C379;">:29:19</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">up</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">43</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">min,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">1</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">user,</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">load</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">average:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.00</span><span style="color:#98C379;">,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.00</span><span style="color:#98C379;">,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.00</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">Tasks:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">76</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">total,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">1</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">running,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">51</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">sleeping,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">stopped,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">zombie</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">Cpu(s</span><span style="color:#ABB2BF;">): 0.3%us, 0.3%sy, 0.1%ni, 98.9%id, 0.2%wa, 0.0%hi, 0.0%si, 0.2%st</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">Mem:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">1009140</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">total,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">270760</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">used,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">738380</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">free,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">14340</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">buffers</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">Swap:</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">total,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">used,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">free,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">185856</span><span style="color:#98C379;">k</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">cached</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#61AFEF;">PID</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">USER</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">PR</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">NI</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">VIRT</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">RES</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">SHR</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">S</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">%CPU</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">%MEM</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">TIME+</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">COMMAND</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#61AFEF;">1</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">root</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">20</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">19696</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">2596</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">2268</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">S</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.3</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#98C379;">:01.21</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">init</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#61AFEF;">2</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">root</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">20</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">S</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#98C379;">:00.00</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">kthreadd</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;"> </span><span style="color:#61AFEF;">3</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">root</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">20</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">I</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0.0</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">0</span><span style="color:#98C379;">:00.00</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">kworker/0:0</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><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><p><code>t2.micro</code> インスタンスなので, 1009140k = 1GB のメモリーがあることがわかる.</p><p>今回起動したインスタンスには Python 2 はインストール済みだが, Python 3 は入っていない. Python 3.6 のインストールを行ってみよう. インストールは簡単である.</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">sudo</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">yum</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">update</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-y</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">sudo</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">yum</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-y</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">python36</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">sudo</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">yum</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">update</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-y</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">sudo</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">yum</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">install</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-y</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">python36</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>インストールした Python を起動してみよう.</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">python3</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">Python</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">3.6</span><span style="color:#C3E88D;">.10</span><span style="color:#A6ACCD;"> (default, </span><span style="color:#C3E88D;">Feb</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">10</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2020</span><span style="color:#C3E88D;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">19</span><span style="color:#C3E88D;">:55:14</span><span style="color:#A6ACCD;">)</span></span>
|
||
<span class="line"><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">GCC </span><span style="color:#F78C6C;">4.8</span><span style="color:#A6ACCD;">.5 </span><span style="color:#F78C6C;">20150623</span><span style="color:#A6ACCD;"> (Red Hat </span><span style="color:#F78C6C;">4.8</span><span style="color:#A6ACCD;">.5-28)</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;"> on linux</span></span>
|
||
<span class="line"><span style="color:#FFCB6B;">Type</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">help</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">copyright</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">credits</span><span style="color:#89DDFF;">"</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">or</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">license</span><span style="color:#89DDFF;">"</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">for</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">more</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">information.</span></span>
|
||
<span class="line"><span style="color:#A6ACCD;">>>></span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">python3</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">Python</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">3.6</span><span style="color:#98C379;">.10</span><span style="color:#ABB2BF;"> (default, </span><span style="color:#98C379;">Feb</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">10</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">2020</span><span style="color:#98C379;">,</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">19</span><span style="color:#98C379;">:55:14</span><span style="color:#ABB2BF;">)</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">[GCC </span><span style="color:#D19A66;">4.8</span><span style="color:#ABB2BF;">.5 </span><span style="color:#D19A66;">20150623</span><span style="color:#ABB2BF;"> (Red Hat </span><span style="color:#D19A66;">4.8</span><span style="color:#ABB2BF;">.5-28)] on linux</span></span>
|
||
<span class="line"><span style="color:#61AFEF;">Type</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">"help",</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">"copyright",</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">"credits"</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">or</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">"license"</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">for</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">more</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">information.</span></span>
|
||
<span class="line"><span style="color:#ABB2BF;">>>></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></div></div><p>Python のインタープリタが起動した! <code>Ctrl + D</code> あるいは <code>exit()</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">exit</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">exit</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="aws-コンソールから確認" tabindex="-1">AWS コンソールから確認 <a class="header-anchor" href="#aws-コンソールから確認" aria-label="Permalink to "AWS コンソールから確認""></a></h3><p>これまでは,すべてコマンドラインから EC2 に関連する操作を行ってきた. EC2 インスタンスの状態を確認したり,サーバーをシャットダウンするなどの操作は,AWS コンソールから実行することもできる. 軽くこれを紹介しよう.</p><p>まず,ウェブブラウザを開いて AWS コンソールにログインする. ログインしたら, <code>Services</code> から <code>EC2</code> を検索(選択)する. 次に,左のサイドバーの <code>Instances</code> とページをたどる. すると, <a href="#aws_ec2_console">figure_title</a> のような画面が得られるはずである. この画面で,自分のアカウントの管理下にあるインスタンスを確認できる. 同様に,VPC・SG についてもコンソールから確認できる.</p><p><img src="/assets/ec2_console.5a40979b.png" alt="EC2 コンソール画面"></p><p><strong>コンソール右上で,正しいリージョン (今回の場合は ap-northeast-1, Tokyo) が選択されているか,注意する!</strong></p><p>前章で CloudFormation について触れたが,今回デプロイしたアプリケーションも,CloudFormation のスタックとして管理されている. <strong>スタック (stack)</strong> とは, AWS リソースの集合のことを指す. 今回の場合は, VPC/EC2/SG などがスタックの中に含まれている. コンソールで <code>CloudFormation</code> のページに行ってみよう (<a href="#aws_cloudformation_console">figure_title</a>).</p><p><img src="/assets/cloudformation_console.ebb600fe.png" alt="CloudFormation コンソール画面"></p><p>"MyFirstEc2" という名前のスタックがあることが確認できる. クリックをして中身を見てみると,EC2, VPC などのリソースがこのスタックに紐付いていることがわかる.</p><h3 id="スタックを削除" tabindex="-1">スタックを削除 <a class="header-anchor" href="#スタックを削除" aria-label="Permalink to "スタックを削除""></a></h3><p>これにて,第一回のハンズオンで説明すべき事柄はすべて完了した. 最後に,使わなくなったスタックを削除しよう. スタックの削除には,二つの方法がある.</p><p>一つ目の方法は,前節の Cloudformation のコンソール画面で, "Delete" ボタンを押すことである (<a href="#cloudformation_delete">figure_title</a>). すると,スタックの状態が <code>"DELETE_IN_PROGRESS"</code> に変わり,削除が完了すると CloudFormation のスタックの一覧から消える.</p><p><img src="/assets/cloudformation_delete.b1f45eaa.png" alt="CloudFormationコンソール画面から,スタックを削除"></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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">cdk</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">destroy</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">cdk</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">destroy</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>このコマンドを実行すると,スタックの削除が始まる. 削除した後は,VPC, EC2 など,すべて跡形もなく消え去っていることを自身で確かめよう. CloudFormation を用いることで関連するすべての AWS リソースを一度に管理・削除することができるので,大変便利である.</p><p><strong>スタックの削除は各自で必ず行うこと!</strong> 行わなかった場合, EC2 インスタンスの料金が発生し続けることになる!</p><p>また,本ハンズオンのために作成した SSH 鍵ペアも不要なので,削除しておく. まず, EC2 側に登録してある公開鍵を削除する. これも,コンソールおよびコマンドラインの二つの方法で実行できる.</p><p>コンソールから実行するには, <code>EC2</code> の画面に行き,左のサイドバーの <code>Key Pairs</code> を選択する. 鍵の一覧が表示されるので, <code>HirakeGoma</code> とある鍵にチェックを入れ,画面右上の <code>Actions</code> から, <code>Delete</code> を実行する (<a href="#delete_ec2_key_pair">figure_title</a>).</p><p><img src="/assets/ec2_keypair_console.8dc88c2e.png" alt="EC2でSSH鍵ペアを削除"></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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">aws</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ec2</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">delete-key-pair</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--key-name</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">HirakeGoma</span><span style="color:#89DDFF;">"</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">aws</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">ec2</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">delete-key-pair</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">--key-name</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">"HirakeGoma"</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 material-theme-palenight vp-code-dark"><code><span class="line"><span style="color:#FFCB6B;">$</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">rm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-f</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">~/.ssh/HirakeGoma.pem</span></span></code></pre><pre class="shiki one-dark-pro vp-code-light"><code><span class="line"><span style="color:#61AFEF;">$</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">rm</span><span style="color:#ABB2BF;"> </span><span style="color:#D19A66;">-f</span><span style="color:#ABB2BF;"> </span><span style="color:#98C379;">~/.ssh/HirakeGoma.pem</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>これで,クラウドの片付けもすべて終了だ.</p><p>なお,頻繁に EC2 インスタンスを起動したりする場合は,いちいち SSH 鍵を削除する必要はない.</p><h2 id="小括" tabindex="-1">小括 <a class="header-anchor" href="#小括" aria-label="Permalink to "小括""></a></h2><p>ここまでが,本書の第一部の内容である. 盛りだくさんの内容であったが,ついてこれたであろうか?</p><p><a href="#chap_cloud_basics">???</a> では,クラウドの定義と用語の説明を行ったあと,なぜクラウドを使うのか,という点を議論した. 続いて <a href="#sec_aws_general_introduction">???</a> では,クラウドを学ぶ具体的なプラットフォームとして AWS を取り上げ, AWS を使用するにあたり最低限必要な知識と用語の説明を行った. さらに, <a href="#sec_first_ec2">Hands-on #1: 初めての EC2 インスタンスを起動する</a> のハンズオンでは AWS CLI と AWS CDK を使って,自身のプライベートなサーバーを AWS 上に立ち上げる演習を行った.</p><p>これらを通じて,いかに簡単に (たった数行のコマンドで!) 仮想サーバーを立ち上げたり,削除したりすることができるか,体験できただろう. 筆者は,<a href="#chap_cloud_basics">???</a> でクラウドの最も重要な側面はダイナミックに計算リソースを拡大・縮小できることである,と述べた. この言葉の意味が,ハンズオンを通じてより明らかになっただろうか? ここで学んだ技術を少し応用するだけで,自分のウェブページをホストする仮想サーバーを作成したり,大量のコアを搭載した EC2 インスタンスを用意して科学計算を実行するなど,いろいろなアプリケーションが実現できる.</p><p>次章からは,今回学んだクラウドの技術を基に,より現実に即した問題を解くことを体験してもらう. お楽しみに!</p></div></div></main><footer class="VPDocFooter" data-v-070d2e51 data-v-12247960><!--[--><!--[--><!--[--><!--[--><!----><!--]--><!--]--><!--]--><!--]--><div class="edit-info" data-v-12247960><div class="edit-link" data-v-12247960><a class="VPLink link edit-link-button" href="https://github.com/andatoshiki/toshiki-notebook/edit/master/docs/development/aws/handson-ec2.md" target="_blank" rel="noreferrer" data-v-12247960 data-v-e4e6c4b9><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" aria-label="edit icon" data-v-12247960><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-12247960><p class="VPLastUpdated" data-v-12247960 data-v-3b3294f7>Last updated: <time datetime="2023-05-24T05:36:21.000Z" data-v-3b3294f7></time></p></div></div><!----></footer><!--[--><!--[--><!--[--><div id="comment-container"></div><!--]--><!--]--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-faab6904 data-v-498c4241><div class="container" data-v-498c4241><p class="message" data-v-498c4241>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-498c4241>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_problems_03-02-2.md\":\"7d5213e7\",\"academic_chemistry_problems_03-02-3.md\":\"a195cabe\",\"academic_literature_index.md\":\"24fb05db\",\"academic_physics_index.md\":\"bde06c94\",\"academic_literature_writing_methods-of-development.md\":\"06af01b8\",\"academic_chemistry_index.md\":\"15fa213a\",\"academic_chemistry_problems_02-20.md\":\"723d0c28\",\"academic_physics_ipho-formulas-jpn_2.md\":\"1755bede\",\"academic_physics_ipho-formulas-jpn_6.md\":\"888c2ab6\",\"academic_vocabulary_2023_02_2023-02-27.md\":\"09dd6351\",\"application_markdown-it-katex_how-to-use.md\":\"ec060008\",\"application_markdown-it-katex_tips.md\":\"67c01364\",\"academic_vocabulary_index.md\":\"06422efc\",\"development_aws_assignments.md\":\"2499f104\",\"development_aws_author.md\":\"5b1958f6\",\"academic_physics_ipho-formulas-jpn_11.md\":\"fad5ddc5\",\"academic_chemistry_notes_12-5.md\":\"9ad41a10\",\"development_aws_license.md\":\"8a1886b2\",\"development_aws_aws-batch.md\":\"5697f30b\",\"development_aws_closing.md\":\"11331b23\",\"development_aws_cloud.md\":\"4d3cb1f7\",\"development_aws_docker-system.md\":\"839a2303\",\"development_aws_handson-bashoutter.md\":\"56788611\",\"development_aws_handson-ec2.md\":\"5dab590d\",\"academic_physics_ipho-formulas-jpn_7.md\":\"899991ea\",\"academic_physics_ipho-formulas-jpn_12.md\":\"26f7a079\",\"development_aws_introduction.md\":\"05ae2367\",\"development_aws_webserver.md\":\"9b3f9560\",\"development_file-naming-convention.md\":\"5f4cb6b0\",\"development_rclone-for-r2.md\":\"dbf7ea31\",\"index.md\":\"74fa1d45\",\"javascript_notes_1_1-1.md\":\"c62cc5ee\",\"javascript_notes_1_1-2.md\":\"6263cbe5\",\"roadmap.md\":\"347bae02\",\"save_reading_index.md\":\"2e13d639\",\"save_reading_outliers_1.md\":\"07c63a73\",\"save_reading_outliers_2.md\":\"dc6d8a0f\",\"save_reading_outliers_4.md\":\"1e95115d\",\"academic_physics_ipho-formulas-jpn_3.md\":\"0235c06d\",\"getting-started.md\":\"263682ea\",\"academic_physics_ipho-formulas-jpn_13.md\":\"eb04aaa7\",\"save_reading_outliers_3.md\":\"7f63ecbc\",\"development_aws_scientific-computing.md\":\"e302618c\",\"development_aws_aws-get-started.md\":\"24be09f5\",\"development_aws_acknowledgement.md\":\"2c5b53bc\",\"development_aws_handson-jupyter.md\":\"357f4cd3\",\"development_aws_appendix.md\":\"c9d35897\",\"development_aws_readme.md\":\"128be16c\",\"development_aws_handson-serverless.md\":\"8e539ce2\",\"development_aws_handson-qabot.md\":\"9b00ceeb\",\"development_aws_serverless.md\":\"58bb3be3\",\"academic_physics_ipho-formulas-jpn_9.md\":\"9c485abf\",\"academic_physics_ipho-formulas-jpn_5.md\":\"f6ab479a\",\"academic_physics_ipho-formulas-jpn_1.md\":\"da11037a\",\"academic_chemistry_problems_03-02-1.md\":\"5d7117d2\",\"academic_physics_ipho-formulas-jpn_8.md\":\"dad8981d\",\"academic_physics_ipho-formulas-jpn_4.md\":\"f67b718f\",\"academic_physics_ipho-formulas-jpn_10.md\":\"80d69796\",\"development_aws_main.md\":\"d05e5f58\",\"application_markdown-it-katex_support-function.md\":\"39235a6c\",\"application_markdown-it-katex_support-table.md\":\"acfd9be0\"}")
|
||
__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\":\"\",\"link\":\"\",\"activeMatch\":\"\"}]}],\"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\":\"Wiki Database\",\"collapsed\":false,\"items\":[{\"text\":\"\",\"link\":\"\"}]}],\"/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/\":[{\"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\"}]}]},\"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> |