半年ぶりにAWS＆Pythonのハンズオンやってみた。

内容
・趣旨目標
・使えるサービス
・参考サイト
・環境・EC2の作成、キーペアの作成
・SSH接続
・VSCodeから接続、ファイルなどの作成



## 趣旨目標
AWSを活用して簡単なWebアプリ（Hello World）をSSH通信でデプロイして、手を動かして学ぶ。

## 使えるサービス
EC2,Python,VSCode,Ubuntu

## 参考サイト：

https://youtu.be/AGmkG0wJ8LA


## 環境
Windows11,Python,VSCode（これらはセットアップ済みとして進めます。）


## EC2の作成、キーペアの作成
Ubuntuを選んでキーペア作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/750d7c13-6ed8-1e0e-a193-54e3d7aafa4d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/fe6feb89-98e1-c097-52a7-319a4796e868.png)

ここでキーペア作成、widowsなのでCドライブのユーザー直下の「ssh」に格納
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/37a009ef-2d2a-32ef-0bcf-be43289a30f4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/5b4a2925-d71b-198a-91bc-6c7eea61daa2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/fbf71f3f-97a6-a2dc-ca68-790a2f648cd2.png)
HTTP,HTTPS,SSHでインバウンド許可
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4237a51f-e46a-5513-d084-fd17c43636fd.png)

## SSH接続
赤枠をコピー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/990010d2-9e35-d312-7ce4-e5b7a21778de.png)

・powershellで接続
先程のSSHのアドレスを貼り付ける。以下デフォルトの状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/205dcf1f-d2b4-2f4d-12b9-f01801ad1479.png)

次の形式に修正
```
ssh -i "ここにキーファイルのパスを入れる" ubuntu@ec2-34-238-44-107.compute-1.amazonaws.com
```

修正済み（接続完了）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/48826916-fa4b-bb56-2a07-2b5c8f744d01.png)
※恐らくEC2からコピーしたデフォルトのパスでもいけますね。試してませんが(;'∀')

メモ：ここでSSHタイムアウトが怖いので、一度ログアウト方法を記載
```
exit
```

・Pythonのバージョン確認して、デフォルトのバージョンを確認
```
python -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/e33774a0-89ba-6729-4697-a18b798fed7a.png)
デフォルトになっていないので、画像のとおりコマンドを打ってください。と記載されています。
そもそもPython3がインストールされているか確認
```
python3 --version
```
入っているので、以下のコマンドでデフォルトのPythonをPython3にする。
```
sudo apt install python-is-python3
```
これのインストールが走って、再び以下のコマンド実行
```
python -v
```
たっくさん設定が表示され、デフォルトで設定されたことが分かる。
対話モードを抜ける「Ctrl+D」

続いて、Pythonがサーバー上で動作するか確認
空ファイル作成
```
 touch script.py
```
編集していく（vi）。
編集画面で例：print('こんにちわっす')と入力して保存で閉じる。
```
 vi script.py
```
Pythonを実行
```
python script.py
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/693fee09-53e1-8f01-bff1-a2a6bc382a96.png)

## VSCodeから接続、ファイルなどの作成
拡張機能を入れて、EC2にあったキー（powershellにも入力した文字）を再び入力して接続する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d1203b2f-19e9-d040-d631-2bb9315e078f.png)
接続完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/f1045161-f0f7-73d6-0e40-17ce81ab6b4f.png)

コードを編集して、サーバーに繋がったターミナルから確認できるか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/dced3e17-ccb1-94f3-f39d-d82d95ad6b37.png)
できています。



・パッケージを最新へ
```
sudo apt update
```
pipをインストール
```
sudo apt install python3-pip
```
はじめて見たぞこれ(p_-)華麗に「キャンセル」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/c93db3a5-03f8-4025-7247-08185951021d.png)


・Flaskをインストール
```
sudo pip install flask
```

「flaskr」というフォルダを作成し、「templates」というフォルダ作成。
「templates」に新たなファイル「index.html」を作成。
動画で紹介されるHTMLコード（自己流に編集しましょう。）
```
<!DOCTYPE html>
<html lange="ja">
<head>
    <meta charset="UTF-8">
    <title>EC2にHPデプロイ！</title>
</head>
<body>
<h1>けいじのホームページ</h1>
    <span>VScode使ってSSH接続でEC2上にWebサイト構築したもの。</span>
</body>
```
次に「flaskr」直下に「main.py」を作成
htmlデータが表示されるアプリを作ります。
```
from flaskr import app
from flask import render_template

@app.route('/')
def index():
    return render_template(
        'index.html',
    )
```

次に「flaskr」の中に、「__init__.py」ファイルを作成する。
今こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/2d210ac0-8d15-f9c4-5086-f9bfe49ceefe.png)
__init__py
```
from flask import Flask
app = Flask(__name__)
import flaskr.main
```
アプリに通ずるPythonのフォルダだよーと認識させる。これで繋がることができる。
考えてみたら、サーバーサーバーと言うけど、実際はPCだし、アプリはフォルダに入ったデータでしかない(p_-)なので、このフォルダはPython用でアプリに繋がっている大事なフォルダだよーと認識させないといけない。つまりinitファイルが大事(*´▽｀*)

Pythonを実行
```
sudo flask --app flaskr run --port 80 --host 0.0.0.0
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/232a4312-caf4-3879-b771-9f93cba046e4.png)
ローカルに無事デプロイできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/65b0e8ab-9d22-33fc-525b-79371dffde80.png)


改めてハンズオンを行った結果、半年前の理解度とエラー対処の行動が少し変わった気がします。経験だけを頼って仕事することは危険ですが、困ったときの対応方法に経験が活かされる気がします。精進いたします。