11章

前置き

この章ではLambda,DynamoDB,S3を使って,関数の実行やデータの読み書きを試してみる.

Lambdaを触ってみる

まずは,Lambdaのディレクトリに移動する.

cd handson/lambda

awsシークレットキーの設定をして,以下を入力.これは後のものも共通で行う.

python3 -m venv .env
source .env/bin/activate
pip install -r requirements.txt
cdk deploy

すると次のようなものが表示される.「=」以下のものを使用するのでコピペでもしておくと良い.

次にlambdaにあるinvoke_one.pyを用いて関数を実行する.
これはランダムな寿司ネタが返ってくる関数だ.下の実行結果をみるとわかる.

python invoke_one.py =以下のもの

先程は1つの関数で1つのタスクを実行しただけだったが,今度は同時に多数のタスクをする関数を実行する.
同じくlambdaにあるinvoke_many.pyを用いて実行する.

python invoke_many.py =以下のもの

これは100個のタスクを実行する関数だ.では本当に100個実行できているのかを見る.
awsのlambda→関数→関数名からモニタリングがある.そこで以下のようなものが見られるはずだ.

左上のInvocationsが100となっていることから,100個のタスクを実行したことがわかった.

これでLambdaを触ってみるのは終わる.最後にスタックを削除しておく.

cdk destroy

Dynamoを触ってみる

Dynamoでは,データの読み書き,削除などの操作ができる.
まずはディレクトリを移動する.

cd handson/dynamodb

後はLambdaと同じ.
実行時出てきた「=」以降はひかえておく.

ここで一度awsからDynamoDB→テーブル→テーブル名→アイテムを見てみる.
すると空になっている.今はまだ何もしていないが,要素を追加してみる.
dynamodbにあるsimple_write.pyを使いデータを追加する.

python simple_write.py =以下のもの

これで先程の画面をもう一度見てみると,以下のように,要素が追加されている.

ageやfirstnameが書いてあるのは,simple_write.pyのItemで定義しているもので,そこから反映されていることもわかった.

では,simple_write.py追加したItemを読み出す,simple_read.pyを実行する.中身は下のようになっている.

下から2行目で,テーブルの要素を取り出している.

以下を実行してみる.

python simple_read.py =以下のもの

すると次が出力され書き込んだ要素を取り出せている.

これでDynamoDBに触れるのは終える.スタックを削除しておこう.


S3を触ってみる

S3は,AWSにデータをアップロードしたり,ダウンロードや削除するのに用いる.
S3では,バケットというものをまず作成し,その中にデータを入れていく.

デプロイはディレクトリを移動するだけで,あとは同じ.

cd handson/serverless/s3

次にs3にあるsimple_s3.pyを使い,データをアップロードする.
tmp.txtというファイルを生成し,=以下のところを名前としたバケットにアップロードするという流れである.

echo "Hello world!" >> tmp.txt
python simple_s3.py =以下のところ upload tmp.txt

逆に,ダウンロードしたいときは,上のuploadをdownloadにすれば良い.
また,アップロード,ダウンロードは,simple_s3.pyでそれぞれ定義されているので,見てみると良い.


何でもかんでも適当にアップロードすれば良いというものでもない.
アップロードする際に,どこにデータを置いておくかに注目する.ファイルで言うパスの部分だ.
これはS3ではKeyといい,--keyを用いてアップロード先を指定する.
試しに先程のtmp.txtを,a/b/tmp.txtにアップロードする場合は,以下のようにする.

python simple_s3.py =以下のところ upload tmp.txt --key a/b/tmp.txt

アップロードするコマンドの最後にKeyの情報を足すだけで指定ができる.
きちんと指定先にアップロードされているかを確認したければ,awsAmazon S3から見ると良い.

最後にスタックを削除するのを忘れないようにする.


まとめ

11章ではLambda,DynamoDB,S3を試しに軽く触ってみた.
どれもデプロイまでとスタックの削除は同じなのでコピペを用意しておくと楽かも..という感じでした.
それぞれのディレクトリで実行するためのpythonファイルが用意されていたので簡単にできたが,ファイルの中身がどうなっているのかも見てみると良いと思います.