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

無料レッスン

クラウドが売るもの、サービスとリージョン

このレッスンのあとで: リージョン、サービス、API 呼び出しが何かを説明できる。

50分のレッスンコマンドなし

フリマの写真は1回の要求

フリマアプリで、出品する品物の写真をアップロードします。写真は、クラウドの S3 バケットに保存されます。バケットとは、ファイルを入れる、名前のついた入れ物です。

プログラムは、保存先のコンピューターにログインしません。ウェブで要求を送り、答えを読みます。このレッスンでは、クラウドのサービスとは何か、どこで動くか、だれが何を守るかを学びます。

このレッスンのゴール

メモ

リージョン、サービス、API 呼び出しが何かを説明できる。

キーワード

ことばいみれい
サービスウェブ越しに使う、できあいの道具
API 呼び出しサービスへの1回の要求と、その答え
リージョンサービスが動いている、世界の地域ap-northeast-1
バケットS3 で、ファイルを入れる名前つきの入れ物
責任共有モデル提供者と利用者が、それぞれ守る範囲を持つこと

学生が入力するセルは、このプレビューでは空白です。

このモジュールがしないこと

メモ

AWS のアカウントは要りません。何もデプロイしません。本物の鍵、パスワード、アカウント番号は、決して入力しません。費用や請求の学習でもありません。本物と同じ形の答えを、オフラインで読み、それを扱う Python を書きます。

サービスは呼び出す API

クラウドの会社は、大きなコンピューターを持ち、その働きを貸し出します。貸し出される道具がサービスです。S3 はファイルを保存し、SQS はメッセージの列を保ち、DynamoDB は表にデータを入れます。

API 呼び出しは、サービスの使い方です。list_objects_v2 のような呼び出しの名前と、必要な情報を送ります。答えはデータで返ります。

実行: 呼び出しと答え

コード: python
call = {"service": "s3", "operation": "list_objects_v2", "Bucket": "flea-photos"}
answer = {
    "Name": "flea-photos",
    "KeyCount": 2,
    "IsTruncated": False,
    "Contents": [
        {"Key": "items/kettle.png", "Size": 2048, "StorageClass": "STANDARD"},
        {"Key": "items/toaster.png", "Size": 3072, "StorageClass": "STANDARD"},
    ],
}
print("サービス:", call["service"])
print("呼び出し:", call["operation"])
print("キーの数:", answer["KeyCount"])
for item in answer["Contents"]:
    print(item["Key"], item["Size"])
# toaster の Size を 5000 に変えて、もう一度実行しましょう。

失敗した呼び出しも答え

呼び出しは、いつも成功するとは限りません。キーがなかったり、バケットがなかったりします。そのときサービスは、問題を表す Code と、HTTP の状態を、エラーとして返します。

コードは、まずエラーを調べます。"Contents" in answer は、成功したときにしか使えません。

実行: 成功とエラーの見分け

コード: python
good = {"KeyCount": 1, "Contents": [{"Key": "readme.txt", "Size": 5}]}
bad = {"error": {"Code": "NoSuchBucket", "HTTPStatusCode": 404}}
for answer in [good, bad]:
    if "error" in answer:
        print("失敗:", answer["error"]["Code"], answer["error"]["HTTPStatusCode"])
    else:
        print("成功、キーの数:", answer["KeyCount"])
# "NoSuchBucket" を "NoSuchKey" に変えて、もう一度実行しましょう。

よくある間違い

注意

答えが空なら、エラーだと考える人が多いです。そうではありません。DynamoDB に、ない項目を求めると、{} と正常な状態が返ります。error の項目と Code を探し、空の答えは「何も見つからなかった」と考えましょう。

リージョンはサービスの場所

クラウドの会社は、世界中にデータセンターを持っています。リージョンは、その一つの地域です。たとえば ap-northeast-1 は東京で、eu-west-2 はロンドンです。

リージョンはバケットを作るときに選び、ファイルはそこに置かれます。利用者に近いリージョンを選ぶと、答えが速く届きます。

実行: バケットのリージョン

コード: python
answer = {
    "Buckets": [
        {"Name": "flea-photos", "BucketRegion": "ap-northeast-1", "BucketArn": "arn:aws:s3:::flea-photos"},
        {"Name": "flea-backups", "BucketRegion": "us-east-1", "BucketArn": "arn:aws:s3:::flea-backups"},
    ],
    "Owner": {"DisplayName": "flea", "ID": "owner-id"},
}
for bucket in answer["Buckets"]:
    print(bucket["Name"], "のリージョンは", bucket["BucketRegion"])
# ap-northeast-1 のバケットだけ表示しましょう。ループの中に if を足します。

提供者と利用者で分担する

提供者は、建物、機械、サービスのソフトを守ります。利用者は、入れるデータと、使える人を守ります。

これが責任共有モデルです。バケットをだれでも読める設定にしたのは、利用者の選択です。データセンターが停電したときは、提供者が対応します。

だれが何を守るか

もの守る人
建物と電気提供者
S3 のソフトそのもの提供者
どのファイルを上げるか利用者
だれがバケットを読めるか利用者
サービスを呼び出すコード利用者

学生が入力するセルは、このプレビューでは空白です。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。