クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

クラウドサービスの基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 19分コマンド14個

写真をアップロードすると、どこへ行く?

写真アプリは、あなたの画像を1台のスマホに置いたままにはしません。クラウドの保存サービスに送り、別のプログラムが小さくできるようにキューにメモを置き、テーブルに記録します。この3つの仕事を担うのが S3、SQS、DynamoDB です。

このレッスンが終わると

メモ

練習用のクラウドで、AWS のコマンドラインを使ってデータを保存し、キューに入れ、探すことができます。

キーワード

  • バケット:S3 でファイルを入れる、名前のついた入れ物。
  • オブジェクト:保存された1つのファイル。キーで見つける。
  • キュー:順番に処理されるのを待つメッセージ。
  • テーブル:DynamoDB で、キーのもとに置かれた項目。
  • エミュレーター:サービスのようにふるまうが、本物ではない複製。

はじめに:もう知っていること

メモ

頭の中で答えましょう。1. ファイル名は何のためにありますか。2. バス停の行列は何のためにありますか。3. データベースのテーブルの1行は何ですか。答え: ファイルを見つけるための名前。人を順番に呼ぶため。1件の記録です。

始める前に

メモ

レッスンの上のバーにある ラボを起動 を押し、動いていると表示されるまで待ちます。スタックは cloud というサービスで、ターミナルはその名前でつながります。ここで有効なのは S3、SQS、DynamoDB だけです。ほかのサービス、たとえば Lambda をたずねると、エラーが返ります。作ったものは、ラボを停止して起動しなおしても残ります。下の 実行 ボタンは、それぞれのコマンドをラボのターミナルに、同じセッションの中で順番に入力します。様子を見たいときや自分で入力したいときは、バーの ターミナルを開く(新しいタブ) を押します。

1. バケットはオブジェクトを入れる

1つ目のコマンドは、aws コマンドに、スタックが確かめないので作り物のキー、リージョン us-east-1、自分専用のスタックのアドレスを渡し、何も表示しません。mb はバケットを作り、make_bucket: lab-bucket と表示します。次のコマンドは、テキスト hello cloud をキー hello.txt でバケットに送り、何も表示しません。- にコピーすると、オブジェクトが表示されます。hello cloud です。最後は、一度も保存していないキーをたずねます。返事は NoSuchKey と The specified key does not exist. というエラーで、本物の AWS でも同じです。

コマンド
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1 AWS_ENDPOINT_URL=http://cloud:4566

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws s3 mb s3://lab-bucket

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
echo "hello cloud" | aws s3 cp - s3://lab-bucket/hello.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws s3 cp s3://lab-bucket/hello.txt -

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws s3api get-object --bucket lab-bucket --key nothing.txt /dev/null

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2. キューは削除するまでメッセージを持つ

1つ目のコマンドはキューを作り、そのアドレスを Q に入れておくので、自分で入力しなくて済みます。2つ目はメッセージを送り、MD5OfBody と MessageId を表示します。3つ目はそれを受け取り、Messages の下に Body、つまり first message とともに表示し、返事を reply.json に保存します。4つ目は、受け取った証拠である ReceiptHandle を切り出して H に入れます。delete-message は何も表示しません。受け取るとメッセージがキューから消えると思う人が多くいますが、そうではありません。しばらく隠れるだけで、削除しないと戻ってきて2回処理されます。

コマンド
Q=$(aws sqs create-queue --queue-name lab-queue --query QueueUrl --output text)

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws sqs send-message --queue-url $Q --message-body "first message"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws sqs receive-message --queue-url $Q | tee reply.json

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
H=$(grep -o '"ReceiptHandle": "[^"]*"' reply.json | cut -d'"' -f4)

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws sqs delete-message --queue-url $Q --receipt-handle "$H"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3. テーブルはキーのもとに項目を置く

1つ目のコマンドは、author と title をキーにしたテーブル Books を作り、"ACTIVE" と表示します。2つ目は項目を2つ、1回の要求で保存し、空の UnprocessedItems を表示します。get-item は完全なキーで項目を1つたずね、それを表示します。値はそれぞれ型に包まれていて、S は文字、N は数です。query は1人の著者の項目をすべて読み、Count が 2 で、2つのタイトルを表示します。保存していないキーを get-item でたずねると、何も表示されません。ここでは、ない項目はエラーではなく空の返事です。

コマンド
aws dynamodb create-table --table-name Books --attribute-definitions AttributeName=author,AttributeType=S AttributeName=title,AttributeType=S --key-schema AttributeName=author,KeyType=HASH AttributeName=title,KeyType=RANGE --billing-mode PAY_PER_REQUEST --query TableDescription.TableStatus

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws dynamodb batch-write-item --request-items '{"Books":[{"PutRequest":{"Item":{"author":{"S":"Ada"},"title":{"S":"Notes"},"year":{"N":"1843"}}}},{"PutRequest":{"Item":{"author":{"S":"Ada"},"title":{"S":"Sketch"},"year":{"N":"1842"}}}}]}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws dynamodb get-item --table-name Books --key '{"author":{"S":"Ada"},"title":{"S":"Notes"}}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
aws dynamodb query --table-name Books --key-condition-expression "author = :a" --expression-attribute-values '{":a":{"S":"Ada"}}' --query '{Count:Count,Titles:Items[].title.S}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最後の確認

ヒント

前に戻らずに答えましょう。1. バケットの中でオブジェクトを見つけるものは何ですか。2. ないキーに対して S3 が返すエラーは何ですか。3. 処理し終えたメッセージには何をしますか。4. このスタックは本物の AWS ですか。答え: そのキーです。NoSuchKey です。削除します。いいえ、エミュレーター、つまり練習用の複製です。

先生へ

ヒント

このレッスンは、ラボの中で進めるレッスンの小さな見本です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボは小さなサービスがひとつと、名前つきボリュームがひとつで、自動採点はありません。生徒は自分のセッションの返事、つまりオブジェクトを送って一覧して読んだバケット、メッセージを送って受け取って削除したキュー、項目を保存して読んで問い合わせたテーブル、ないキーのエラーを提出し、MiniStack が何ではないかを一文で書きます。要点:1. S3 はバケットの中にキーでオブジェクトを保存する。2. キューはメッセージを持ち、メッセージは削除で終わる。3. DynamoDB はキーのもとに項目を保存し、クエリはキーの一部のもとにある項目をすべて読む。4. ない S3 のキーはエラーで、ない DynamoDB の項目は空の返事。5. MiniStack はエミュレーターで、AWS ではない。よくある間違い:受け取るとメッセージが消えると思うこと。準備:ラボとそのターミナル。ヒント:実行ボタンを押す前に、それぞれの返事を予想させてください。Lambda は、その関数が生徒のコードをスタックの中で実行してしまうので、わざと止めてあります。メッセージ ID、受信ハンドル、時刻、キューのアドレスは、本物の AWS とも実行ごとにも違います。自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。

このラボとソースについて: クラウドラボ:AWS コマンドラインで S3 バケット、SQS キュー、DynamoDB テーブルを練習する

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。