クラウドラボ:AWS コマンドラインで S3 バケット、SQS キュー、DynamoDB テーブルを練習する
このラボは、生徒ひとりひとりに専用の練習用クラウドを渡します。MiniStack は、Amazon Web Services の3つのサービス、ファイル用の S3、メッセージのキュー用の SQS、テーブル用の DynamoDB と同じ要求に答えるエミュレーターです。使うのは本物と同じ AWS コマンドラインなので、入力したものがそのまま役に立ちます。キャプチャした返事を使って課題を解く、クラウドコンピューティング実践モジュールに付属します。
これは攻撃用のラボではなく、AWS でもありません。どのコピーも、インターネットにも他の生徒にもつながらず、料金はかからず、Web ページもないので、すべて横のターミナルで入力します。有効なのは3つのサービスだけです。Lambda は、その関数が生徒自身のコードをスタックの中で実行してしまうため、わざと止めてあります。
生徒が学ぶこと
クラウドのサービスをコマンドラインから使う方法です。バケットはキーで見つけるオブジェクトを入れ(aws s3 mb、cp、ls)、キューは受け取ってから削除して終わらせるメッセージを持ち(aws sqs create-queue、send-message、receive-message、delete-message)、テーブルはクエリがまとめて読めるキーのもとの項目を持ちます(aws dynamodb create-table、put-item、get-item、query)。生徒は返事を読み、ないキーのエラー、S3 の NoSuchKey も読み、サービスのあいだの違いのひとつを知ります。ない DynamoDB の項目はエラーではなく空の返事です。エミュレーターとは何か、つまり本物ではない練習用の複製だということも見ます。クラウドコンピューティングの入門や、ソフトウェア工学の授業の保存とメッセージの部分に向いています。
ブラウザーで実行する
ラボはサービスをひとつ、cloud だけ起動し、答えるまで待ちます。ターミナルには AWS コマンドラインがありますが、スタック用のキーはないので、レッスンはまず作り物のキー、リージョン、スタックのアドレス http://cloud:4566 を設定します。スタックはパスワードを確かめず、本物の AWS ではアドレスは設定しません。
- コンテナーのページを開く. バーの「つくる」を開き、「コンテナーを実行」を選びます。ページは誰でも開けて、Git ラボと SQL ラボはアカウントなしで起動できます。ほかのラボには無料アカウントが必要です。アカウントを作成してサインインし、「起動」を押します。
- ラボを探す. 「サンプルラボ」のカードにすべてのサンプルが並んでいます。Cloud (MiniStack)を探します。
- 「起動」を押す. 「起動」はそのまま1回の操作で実行します。「先にファイルを編集」は compose ファイルを開くので、起動する前に変更できます。
- 開く. ラボのページで「ターミナルを開く」を押します。スタックには Web ページがないので、「ブラウザーで」の下にリンクはありません。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 と入力すると、ターミナルは make_bucket: lab-bucket と答えます。aws s3 ls でそれを一覧できます。
生徒に提出させるもの
自分の短いセッションの返事です。オブジェクトを送って一覧して読んだバケット、メッセージを送って受け取って削除したキュー、項目を保存して読んで問い合わせたテーブル、そしてないキーのエラー。そのあとに、MiniStack が何ではないかを一文で書きます。よい答えは、AWS ではなくエミュレーター、つまり練習用の複製だと述べています。
A basic lesson on this lab
Cloud Services Basics は、このラボで進める小さなレッスンです。生徒はキーとアドレスを設定し、バケットを作ってオブジェクトを保存して読み、ないキーをたずね、キューを作ってメッセージを送って受け取って削除し、テーブルを作って項目を保存して読んで問い合わせ、レッスンはまた、有効なのは3つのサービスだけであることと、作ったものはラボを停止して起動しなおしても残ることを伝えます。
無料の個人アカウントは、ホームにある Basics モジュールでこれを使えます。どの学校もライブラリーの Basics フォルダーからコピーでき、新しい学校には DevOps Labs (Sample) というモジュールに入っています。わざと小さくしてあり、ラボで進めるレッスンとは何かを先生に見せ、あとはラボが担います。変更するには、ご自分のモジュールにコピーしてください。
GitHub のコード
compose ファイルに Dockerfile はありません。公開されている標準イメージ ministackorg/ministack を、バージョンを固定して、メモリ 256 MB と名前つきボリュームの状態で動かします。MiniStack のライセンスは MIT で、私たちは配布していません。ファイルの設定は S3、SQS、DynamoDB だけを有効にし、Lambda を含むほかのサービスへの要求は、エラーで拒否されます。ほかにスタックへ届くものはないので、ラボはインターネットへの出口もパスワードも持ちません。サービスはひとつで、エミュレーターなので、キューのアドレスにあるアカウント番号のように、本物のサービスとは違う細部があります。
課題にする
何を提出するかを、課題に書いてください。
- ラボを作る. モジュールで課題を追加し、「コンテナーラボ」のカードを選んでから「GitHub リポジトリ」を選びます。https://github.com/mitsurutech/lab-cloud とブランチ main を指定します。compose ファイルは既定の compose.yaml です。変更したい場合は、先にリポジトリをフォークしてください。
- 公開して試す. 「公開」すると、確認したコミットに固定されるので、あとでリポジトリを変更しても、すでに出したラボは変わりません。まず自分のコピーを起動してください。
- 配布する. ほかの課題と同じように配布します。期限を付けることもでき、課題には何をするか、何を提出するかを書いておきます。
- 提出物を採点する. 生徒のコピーを開いて提出された内容を確認し、採点します。足りない場合は理由を書いて差し戻します。
このラボを試す、そして費用
無料の個人アカウントで、このラボの基本レッスンに取り組めます。毎月、ほとんどのレッスンに足りる無料クレジットがあり、カードは要りません。クラスで使う場合、学校は最初の365日間、生徒50人まで無料で、その後は生徒1人あたりの年額です。すべてのラボが含まれ、教職員は無料です。
よくある質問
- これは AWS ですか。
- いいえ。S3、SQS、DynamoDB について同じ要求に答えるエミュレーター、MiniStack です。料金はかからず、コピーの外には何も出ず、パスワードも確かめません。AWS コマンドラインは本物なので、生徒が入力するものは自分のアカウントでも役に立ちます。
- なぜ Lambda は止めてあるのですか。
- Lambda の関数は生徒が書くコードで、エミュレーターはそれをスタックのコンテナの中で実行してしまいます。サービスを止めれば実行する手段がなくなり、Lambda への要求はエラーで拒否されます。このラボが教える保存、キュー、テーブルには Lambda は要りません。
- なぜレッスンは最初にキーとアドレスを設定するのですか。
- ラボのターミナルには AWS コマンドラインがありますが、スタック用のキーはありません。レッスンは、エミュレーターが確かめない作り物のキーと、本物の AWS なら要らないスタックのアドレスを設定します。
- ラボを停止して起動したあと、何が残りますか。
- 作ったバケット、オブジェクト、キュー、テーブルです。スタックは状態を名前つきボリュームに保存し、プラットフォームがそれを保管して、起動時に読み込みます。ターミナルはキーとアドレスを忘れるので、レッスンの最初のコマンドをもう一度実行します。