name: exercises-unix class: title, smokescreen, shelf, no-footer # 第08回 Unix演習<br><small>dfの読み方とS3へのコピー(www.py)</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact # dfコマンドとは? <div class=footnote> <small><small> (脚注) この演習では、実行例の結果は、すべて同じ(df /の出力と同じ)になります </small></small> </div> <small> - <B>ストレージの空き容量を調べる</B>時に使うコマンド - dfはdisplay free disk spaceの頭文字 - 引数は、ファイルシステム、ファイル、フォルダ(ディレクトリ)名など、わりと自由 - ファイルをフォルダ(ディレクトリ)名指定した場合は、 そのファイルやフォルダがあるファイルシステムと自動的に解釈されます ``` [実行例] ストレージ全体の空き容量を見たい $ df / www.pyファイルが置いてあるファイルシステムの空き容量を見たい $ df www.py いま作業している場所(フォルダ)のファイルシステムの空き容量を見たい $ df . ``` </small> --- class: compact # dfコマンドの出力の読み方 <small> ``` admin@ip-172-31-83-21:~$ df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvda1 8026128 2554440 5042432 34% / [説明] Filesystem 1K-blocks Used Available Use% Mounted on ファイル 最大容量 使用済 利用可能 ***% マウントポイント システムのID ``` - ファイルシステムのIDは`/dev/sda数字`か`/dev/xvda数字`です - `/dev/sda数字`はLinuxでよく出てくる定番のIDですが - `/dev/xvda数字`はAWS特有の名称です - `***%`は使用済をパーセントで表示しています(「使用済」はKB単位で同じ意味) - マウントポイントの意味は説明しませんが、ここでは`/`です - 「このファイルシステム(`/dev/xvda1`)はOS全体(`/`)」と読んで下さい </small> --- class: compact # [例題] EC2の残り容量を確認する <small> ``` admin@ip-172-31-83-21:~$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 489000 0 489000 0% /dev tmpfs 99908 492 99416 1% /run /dev/xvda1 8026128 2554440 5042432 34% / tmpfs 499532 0 499532 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock /dev/xvda15 126678 10900 115778 9% /boot/efi tmpfs 99904 0 99904 0% /run/user/1000 ``` - 数字の単位はKB - `/dev/xvda数字`がローカルストレージです - `/dev/xvda1`(`/`)がOSの入っている場所で、だいたい8GBなことを確認して下さい - `/dev/xvda15`(`/boot/efi`)以下にはカーネルが置かれています </small> --- name: exercises-aws class: title, smokescreen, shelf, no-footer # 第08回 AWS演習<br><small>ファイルをS3にコピーする(www.py編)</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact # [例題] PythonでファイルをS3にコピーする <small> 1. まずはEC2にboto3をインストールします。 ``` $ sudo apt install python3-boto3 ``` 1. EC2上に、次の賞味3行のPythonスクリプトを作り、S3にファイルがコピーされることを確認しなさい - もちろんバケット名(b2902900のところ)は各自の学籍番号に変更すること - このスクリプト(s3-copy.py)を作成し、 EC2にログインした場所(/home/admin)で実行 ``` #!/usr/bin/pytyon3 import boto3 s3 = boto3.client('s3', 'us-east-1') s3.upload_file('htdocs/index.html', 'b2902900', 'index.html') ``` - まずは、<B>コピーする部分だけの正味3行のスクリプトで試し</b>ます。 プログラミングとは少しずつ試しながら先に進めるものです。 動作確認できたらwww.pyと合体させます(本日の課題、後述) </small> --- class: compact # スクリプトの解説(1) <small> ``` #!/usr/bin/pytyon3 import boto3 s3 = boto3.client('s3', 'us-east-1') s3.upload_file('htdocs/index.html', 'b2902900', 'index.html') ``` - 上の3行で前回(`aws s3 cp ....`)と同じ動作をします - つまり内容は第07回と同じS3へのコピーですが、今回はpythonスクリプトで行っています - upload_fileメソッドの引数は`(コピー元ファイル, バケット名, コピー先のファイル名)`です - バケット名のb2902900部分は各自のバケット名=学籍番号に変更してください - 動作確認: S3の管理画面で「index.htmlオブジェクトが作成されている」なら成功です - S3上の最新のindex.htmlオブジェクトを確認してください - <B>オブジェクトの更新日時は操作した時刻のはず</B>です - S3上には同じindex.htmlという名前のオブジェクトが複数ありえるので区別すること </small> --- class: compact # スクリプトの解説(2) IaC (Infrastructure as Code) <small> - 実は、今まで使ってきた<B>awsコマンドはpythonスクリプト</B>なので、 そのコマンドの中身と同じコードを書いてみたのが前頁の例題でした - インフラストラクチャをプログラミングと同様に管理する手法を IaC (Infrastructure as Code)と呼びます <small> - 一般には、こういうプログラミングではなく、YAMLの設定ファイルとかを書きます。以下略 </small> </small> --- class: compact # 課題(必須): アップロードしたファイルをS3に保存する - たまにはPythonプログラミングで頭の体操をしましょう - いままでに次の2つをやりました <small> 1. ブラウザからファイルをアップロードできる 1. PythonスクリプトでS3にファイルをコピーする(さっき作っみた) </small> - <B>[課題] 上の2つを合体して次の動作を実現してください</B> <small> - 自分のブラウザからファイルをアップロードしたらS3に保存される - いちどEC2上にファイル(/home/admin/htdocs/file.uploaded)を作成し、 <br> そのファイルをS3にコピーしてよいです - ヒント: www.pyのアップロード機能はupload()というメソッドを見てください </small> - [動作確認] - ファイルをアップロードすると、新たにS3ファイルが作成されます - この作業の様子をTA/SAさんに実演してみせてください --- class: compact # [課題(自由、チャレンジ)] <div class=footnote> <small><small> (脚注) 検索すると、この例がたくさん出てくるので、こちらのほうがメジャーで、春学期のやりかたのほうがマイナーなのかも? <br> まぁ、boto3は、どちらもサポートしているので、どちらでも正解ですけどねぇ </small></small> </div> - 今回はRekognition使っていませんが、春学期の資料を見ておもいだしてください - ファイルをアップロードして、それをS3に保存してください。 そして、そのS3オブジェクトに対してAWS Rekognitionを適用してください - 動作確認はRekogonitionからの推定結果を表示できるか否かで十分です <br> (生JSONの出力でOK) - もちろん、さらに頑張って、じゃんけんと合体とかしてくれてもOKです - これは...期末試験のあと見せてもらう時間をとりますかね?