血と汗となみだを流す

クラウドエンジニアになるための修業の場

多分日刊IT問題(DynamoDBの制限)

問題

  • 皆大好きDynamoDBの説明で、誤っているものはどれか?!

選択肢

  1. 読込/書込キャパシティの変更は無制限にできる
  2. AutoScaleを使ってScaleUpした後、リクエストがないとScaleDownしないまま同じキャパシティを保った状態になる
  3. 読込/書込キャパシティ/ストレージ容量/データ転送量で課金される
  4. 開発用のローカルバージョンがある

解答

  • 誤っているものは「1.読込/書込キャパシティの変更は無制限にできる」でした!

解説

1. 読込/書込キャパシティの「減少」には制限があります

  • なんと、増加は無制限なのですが、減少は1日に実行できる回数が決まっているんですよね・・・
  • 参考
  • AutoScalingを設定しているときも同じ制限が適用されるようです。
  • AutoScaleするから安心!とか思っていると、減少の制限に引っかかってキャパシティが下がらないまま!というのがあり得るよ!
  • キャパシティ管理は別途CloudWatch Alertを設定しておいたほうが良いかと思います。

2. AutoScaleを使ってScaleUpした後、リクエストがないとScaleDownしないまま同じキャパシティを保った状態になる

  • これも注意ポイントなのですが、ScaleInは、リクエストがトリガーとなって行われます。
  • つまり、ScaleUpしたあと、全然アクセスがないとUpしたキャパシティを維持し続けるので料金やべぇ!ってなるわけです。
  • Lambdaなどを使って定期的にping/pongさせてキャパシティをDownさせる仕組みが必要かも・・・

3. 読込/書込キャパシティ/ストレージ容量/データ転送量で課金される

  • 「キャパシティだけに料金がかかる」とずっと思っていましたが、テーブルが使用するディスク容量でも課金されるようです。(知らなかった)
  • 東京リージョンだと月額「1 GB あたり最低 0.25 USD」のため、そこまで気にしなくてもよいかもしれません。

4. 開発用のローカルバージョンがある

  • ローカル開発用のものがあります!
  • これを使えば、開発時の課金を気にしなくて済みますね!
  • ちなみに俺はローカル環境は常に読込/書込キャパシティを10000(MAX)にしていましたが、ローカルのキャパシティは設定しても無意味っぽいです。(速度は変わらず)

まとめ

  • 今回はDynamoDBでハマったポイントについて出題してみました!
  • マネージドサービスで便利は便利なのですが、いろいろと制限があるので、利用用途によっては使えなくなる可能性があります。
  • 用法・容量を守って使いましょう。

多分日刊IT問題(Private Subnetからインターネットへの通信)

問題

  • VPC内に図のような構成を作り、EC2(bastion)経由でEC2(application)にSSHログインし、yum installを行ったところインターネットとの通信ができませんでした。
  • EC2(application)からインターネットに通信するために修正が必要な箇所はどれか?!

構成図

f:id:Anorlondo448:20180622054125p:plain

選択肢

  1. InternetGateway
  2. EC2(bastion)
  3. ELB(CLB)
  4. NatGateway

解答

  • 修正が必要な箇所は「4.NatGateway」になります。

解説

  • 正解の構成は「NatGatewayをPublic Subnetに配置する」形になります。
  • VPCの外(インターネット)と通信するためにはInternetGatewayを経由する必要があります。
  • 構成図を見ると、EC2(application)はPrivate Subnetにいるため、InternetGatewayと直接通信することができません。
    • (Route Tableの通信先にInternetGatewayが指定されているSubnetをPublic Subnetと呼びます)
  • そのためPrivate Subnet外に通信する方法としてNatGatewayを経由する必要があります。
  • ですが、この構成図だとNatGateway自体もPrivate SubnetにいるためPrivate Subnetから外にでれません。
  • NatGatewayをPublic Subnetに配置し、Private SubnetのRoute TableにNatGatewayへの経路を指定するとEC2(application)→NatGateway→InternetGatewayという経路でインターネットへアクセスすることが可能になります。
    • (NatGatewayはPublic SunetのRoute Tableを見てInternetGatewayを外部への通信先として認識する)
  • NatGatewayをつい通信元と同じPrivate Subnetに置いてしまいがちですが、NatGatewayはPublic Subnetに配置しましょう!

構成図(正解)

f:id:Anorlondo448:20180622053955p:plain

まとめ

  • ということで、今回も俺(とチームメンバーほぼ全員)がハマったポイントを問題にさせて頂きました。
  • みなさん俺達と同じ落とし穴にはこれでもう落ちませんね!

参考リンク

【10 分間チュートリアル】仮想マシンへコードをデプロイするをやってみる

概要

やったやつ

内容

  • Get Start f:id:Anorlondo448:20180621065845p:plain

  • サンプルデプロイ選択 f:id:Anorlondo448:20180621070100p:plain

  • サンプルなのでインプレースデプロイを選択

  • ELB配下に複数EC2がついているときはBlue/Greenがよいのかな f:id:Anorlondo448:20180621070133p:plain

  • デプロイ先のEC2インスタンスを作成 f:id:Anorlondo448:20180621070536p:plain f:id:Anorlondo448:20180621070608p:plain f:id:Anorlondo448:20180621070627p:plain

  • デプロイするアプリケーションの設定 f:id:Anorlondo448:20180621070640p:plain f:id:Anorlondo448:20180621070717p:plain

  • デプロイグループの設定

  • デプロイ先のEC2の設定っぽい f:id:Anorlondo448:20180621070732p:plain

  • CodeDeploy用のIAMロール作成 f:id:Anorlondo448:20180621070811p:plain

  • デプロイ設定

  • デプロイグループに対して、どのような状態になれば成功かを定義 f:id:Anorlondo448:20180621070837p:plain f:id:Anorlondo448:20180621070912p:plain

  • デプロイ開始 f:id:Anorlondo448:20180621070927p:plain f:id:Anorlondo448:20180621070948p:plain f:id:Anorlondo448:20180621071001p:plain

  • チュートリアルはここまでで、あとは「EC2インスタンス消しとけよ」という手順のみ。

まとめ

  • ほんと触りをやるだけ
  • 10分じゃ終わらなかった
  • EC2のどこにデプロイされんの?
    • デプロイするリビジョンのルートに、設定ファイル(yml?)をおいておくっぽい?
  • 一部最新のリソースに対応していない箇所があった
    • デプロイ方法の洗濯など
  • 正直、「理解した!」とまで行かないかも。
  • 中身までしっかりやるにはDevelopers. IOを見たほうが良さそう。

AWS Certified Developer - Associateへの道①(リソース上限)

Q5. リソース上限

AWS Certified Developer - Associateへの道①(Amazon S3)

Q4. S3へのオブジェクトの格納

  • 参考ページ
  • 全てのリージョンで新しいオブジェクトのPUT/DELETEは結果整合性を提供する
  • 結果整合性
    • 結果的に一貫性が保たれればよい、みたいな
    • なのでPUTしたあとすぐGETしてもオブジェクトが取れないことがあるというやつ

AWS Certified Developer - Associateへの道①(Amazon Machine Image)

Q2. パブリックAMI

  • 参考ページ
  • AMIはリージョンのリソース
  • 他リージョンで利用する場合は、AMIをそのリージョンにコピーする
    • EBS-Backed AMI、instance store-backed AMI両方をコピーできる
    • AMIのコピーは課金されない。標準のストレージ料金とデータ転送料金が適用される
  • AMIの全てのコンテンツが、異なるリージョンでも実行できる必要がある
    • データベース接続など
  • AWSアカウント間でもコピー可能
    • billingProductコードと関連付いたAMIを、別アカウントから共有した場合はコピーすることはできない。

多分日刊IT問題(EC2の制限緩和リクエストについて)

問題

AWSは、初期で使えるリソース数に制限が付いています。 その中でEC2はインスタンスタイプ毎に上限があり、別途EC2インスタンス自体の上限数も制限があります。 (m5.largeは5まで、t2.largeは20まで、トータルEC2は200まで) この「トータルEC2の上限数」を緩和する方法はどれか?!

※問題中にある「インスタンスタイプごとの上限数や、トータルEC2の上限数に使われている数字」は適当なので気にしないでください。

選択肢

  1. AWSサポートに電話する
  2. トータルEC2の制限緩和リクエストを出す
  3. そもそも緩和できない
  4. インスタンスタイプ毎の制限値のMAX値に自動で緩和

回答

  • 「2.」が大多数でしたが、「2.」は不正解です!
  • 正解は「4.インスタンスタイプ毎の制限値のMAX値に自動で緩和」になります。
    • 俺が現場で実際に試した結果です。
    • どれかのMAX値の上限緩和をすると、それに引きづられて上限があがりました。
    • これは本当にわからなくて「とりあえずあげてみようぜ」で、インスタンスタイプ別の上限数のMAX値を上げてみたところ引きづられてトータルEC2の数も上がることを確認しました!

解説

  • 「2.」のトータルEC2の制限緩和リクエストはありません。(どこかにあったら教えてください)
    • 実際、AWSコンソールのEC2の「制限」から「実行中のオンデマンドインスタンスの数:EC2」の制限緩和リクエストのリンクがあるのですが、このリンクの先にはインスタンスタイプ別の制限緩和しかありません・・・ f:id:Anorlondo448:20180621060737p:plain f:id:Anorlondo448:20180621060748p:plain f:id:Anorlondo448:20180621060755p:plain
  • 「3.」については緩和できるので不正解です。
  • 「1.」については試していないですがおそらく無理かと思います(AWSコンソールのサポートからやってくださいと言われるかと)

まとめ

  • ということで、実際に俺がハマった「あれ、EC2のトータル数の制限緩和リクエスト送れねぇんだけどどうすんの?!?!スケールアウトできんやべぇ!!!」という経験からの問題でした!