ようへいの日々精進XP

よかろうもん

2018 年 08 月 25 日 (土)

ジョギング

  • 香椎浜 x 2 周
  • 右足の太腿に強い張り
  • んー, 暑さが堪える...

日課

  • そろそろ始めなきゃな...と思ってるところ

星野源のアイデア

www.youtube.com

新しい感じがしたり, 色々とアイデアが詰まったミュージック・ビデオで良かった. 特に 2 番以降, ガラッと雰囲気が変わったと思ったら, いきなりアコースティック・ギターでの弾き語りがあったりして, そんなに音楽を真剣に聞かない自分だけどすごく印象深い作品だと思う.

今日の AWS ~ AWS 認定デベロッパー – アソシエイトレベルサンプル試験を解く (5) ~

公開されているサンプル試験問題を解く. なぜ, その答えになるのかをちゃんと理解する必要がある. 尚, 今回は英語版のサンプル問題である為, 翻訳には Google 翻訳を利用している.

Q4. 一貫性の無い結果を返す操作

設問

Which operation could return temporarily inconsistent results?

  • 一時的に一貫性のない結果を返す操作はどれか
A) Getting an object from Amazon S3 after it was initially created
B) Selecting a row from an Amazon RDS database after it was inserted
C) Selecting a row from an Amazon RDS database after it was deleted
D) Getting an object from Amazon S3 after it was deleted

どれか.

A) Amazon S3 において, 初めてオブジェクトを作成した直後にオブジェクトを取得する
B) Amazon RDS において, データベースを挿入した後にその行を選択する
C) Amazon RDS において, 行を削除した直後に行を選択する
D) Amazon S3 において, オブジェクトを削除した直後にオブジェクトを取得する

正答

D) Getting an object from Amazon S3 after it was deleted (Amazon S3 において, オブジェクトを削除した直後にオブジェクトを取得する)

メモ

解答のコメントより引用.

S3 has eventual consistency for overwrite PUTS and DELETES.

S3 の PUT と DELETE は結果整合性となる.

Q5. DynamoDB の実装

設問

You are creating a DynamoDB table with the following attributes:

* PurchaseOrderNumber (partition key)
* CustomerID
* PurchaseDate
* TotalPurchaseValue

One of your applications must retrieve items from the table to calculate the total value of purchases for a particular customer over a date range.

以下のような属性を持った DynamoDB テーブルを作成しようとしている.

  • PurchaseOrderNumber (partition key)
  • CustomerID
  • PurchaseDate
  • TotalPurchaseValue

アプリケーションでは, テーブルから項目を取得して, 特定の顧客を特定の期間にわたって特定する. (ちょっと日本語がアレ)

What secondary index do you need to add to the table?

A) Local secondary index with a partition key of CustomerID and sort key of PurchaseDate; project the TotalPurchaseValue attribute
B) Local secondary index with a partition key of PurchaseDate and sort key of CustomerID; project the TotalPurchaseValue attribute
C) Global secondary index with a partition key of CustomerID and sort key of PurchaseDate; project the TotalPurchaseValue attribute
D) Global secondary index with a partition key of PurchaseDate and sort key of CustomerID; project the TotalPurchaseValue attribute

テーブルに追加するセカンダリインデックスはどれか?

A) CustomerID のパーティションキーと PurchaseDate のソートキーを持つローカルのセカンダリインデックス. TotalPurchaseValue 属性を投影する.
B) PurchaseDate のパーティションキーと CustomerID のソートキーを持つローカルのセカンダリインデックス. TotalPurchaseValue 属性を投影する.
C) CustomerID のパーティションキーと PurchaseDate のソートキーを持つグローバルセカンダリインデックス. TotalPurchaseValue 属性を投影する.
D) PurchaseDate のパーティションキーと CustomerID のソートキーを持つグローバルセカンダリインデックス. TotalPurchaseValue 属性を投影する.

正答

C) Global secondary index with a partition key of CustomerID and sort key of PurchaseDate; project the TotalPurchaseValue attribute (CustomerID のパーティションキーと PurchaseDate のソートキーを持つグローバルセカンダリインデックス. TotalPurchaseValue 属性を投影する.)

メモ

The query is for a particular CustomerID, so a Global Secondary Index is needed for a different partition key. To retrieve only the desired date range, the PurchaseDate must be the sort key. Projecting the TotalPurchaseValue into the index provides all the data needed to satisfy the use case.

  • クエリは特定のCustomerIDのため, 別のパーティションキーにはグローバルセカンダリインデックスが必要
  • 目的の日付範囲のみを取得するには, PurchaseDate がソートキーでなければならない
  • TotalPurchaseValue をインデックスに投影すると, ユースケースを満たすために必要なすべてのデータが提供される

Q6. CloudFormation の実装

設問

Your CloudFormation template has the following Mappings section:

あんたの CloudFormation テンプレートにおいて, Mappings セクションは以下の通りである.

"Mappings" : {
 "RegionMap" : {
 "us-east-1" : { "32" : "ami-6411e20d"},
 "us-west-1" : { "32" : "ami-c9c7978c"}
 }
}

Which JSON snippet will result in the value "ami-6411e20d" when a stack is launched in us-east-1?

us-east-1 でスタックを起動した場合, JSON スニペットの値が ami-6411e20d になるのはなぜか.

A) { "Fn::FindInMap" : [ "Mappings", { "RegionMap" : ["us-east-1", "us-west-1"] }, "32"]}
B) { "Fn::FindInMap" : [ "Mappings", { "Ref" : "AWS::Region" }, "32"]}
C) { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "32"]}
D) { "Fn::FindInMap" : [ "RegionMap", { "RegionMap" : "AWS::Region" }, "32"]}

正答

C) { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "32"]}

メモ

以下, ドキュメントより引用.

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Mappings" : {
    "RegionMap" : {
      "us-east-1" : { "32" : "ami-6411e20d", "64" : "ami-7a11e213" },
      "us-west-1" : { "32" : "ami-c9c7978c", "64" : "ami-cfc7978a" },
      "eu-west-1" : { "32" : "ami-37c2f643", "64" : "ami-31c2f645" },
      "ap-southeast-1" : { "32" : "ami-66f28c34", "64" : "ami-60f28c32" },
      "ap-northeast-1" : { "32" : "ami-9c03a89d", "64" : "ami-a003a8a1" }
    }
  },

  "Resources" : {
    "myEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "32"]},
        "InstanceType" : "m1.small"
      }
    }
  }
}

上記の例だと, FindInMap 関数 (AWS::Region 擬似パラメーターを使用して) を用いて, スタックの作成先となるリージョンとしてキーを指定し, 対応付ける値の名前として 32 を指定している.

フムフム.