jtk

AWS(クラウド)周りの聞き慣れない用語(クラウドプラクティショナーレベル)

AWSクラウド)周りの聞き慣れない用語

AWS 認定試験(クラウドラクティショナー)勉強の際に、ネットワークやサーバー周りに疎い自分からすると理解が難しい単語によく出くわしました。
カテゴリーばらばらで適切でないかもですが、サービス名以前に用語の理解が必要だなと感じたので、最初に理解しづらかった単語と意味を並べていきます。

共通/基礎部分

マネージド

直訳すると「管理する」なので、
マネージドサービス = システム側での管理がされたサービス = ユーザー側での管理があまり必要のないサービス
のように考えました。

さらに「フルマネージド」となると、一括で管理されたサービスという意味合いになるので、
さらにユーザー側での管理が必要のないサービスという認識。

デプロイ

日本語訳的には配置する、展開すること。
主にネットワークを通じて提供されるWebアプリケーションなどのシステム開発工程において、システムを利用可能な状態にすること。
参照元: https://www.weblio.jp/content/%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4

レイテンシー

データ転送の「遅延」のこと。
「低レイテンシー」とは、遅延が少なくデータ処理が行われることを指す。(ポジティブな意味)
CloudFrontは最寄りのエッジロケーションにあるキャッシュを使用してコンテンツを配信しているので低レイテンシーの実現ができる。

スケールメリット

規模の拡大によって得られるメリット。
AWSは数十万単位の多くのユーザーがクラウドを使用するため、スケールメリットを活かして従量課金制の料金も低く提供できる。

EC2/RDS/S3関連

インスタンス

EC2で立てるサーバーのひとつを指す。
例)インスタンスをひとつ立てる = サーバーをひとつ立てる
EC2には、さまざまな種類(スペック)のEC2インスタンスが用意されている。

データベースインスタンスは、AWSではRDSで使われるまた別のもの。
こちらも様々なタイプが用意されている。

レプリケート(レプリケーション

コピー(複製)すること。
RDSはMulti-AZ配置をするとAZ間でレプリケートされる。
S3でもレプリケート先パケットを指定すると異なるリージョンにあるパケットにレプリケートできる。
EBSはアベイラビリティゾーン内の複数のサーバーで自動的にレプリゲートされている。

リードレプリカ

更新用データベース(マスター)からレプリケーションされた参照専用のデータベースのこと。
参照元: https://www.iij.ad.jp/svcsol/category/cloud/bp/db002.html

バケット(パケット)

バケツ(入れ物)のこと。
S3ではバケットを作成して、その中にオブジェクト(ファイル)を格納する。
バケット名はユニークである必要がある。

オブジェクト

データ(アップロードするファイル)のこと。

障害/負荷関連

フォールトトレランス

障害発生時にサービス全体を止めずにシステムを動かし続けること。
参照元: https://dev.classmethod.jp/cloud/amazon-rds-replication/

フェイルオーバー

稼働中のシステムで問題が生じてシステムやサーバーが停止してしまった際に、自動的に待機システムに切り替える仕組み。
参照元: https://www.idcf.jp/words/failover.html

スナップショット

バックアップ。
ある時点でのソースコードや、ファイル、ディレクトリ、データベースファイルなどの状態を抜き出したもののこと。
参照元: https://www.idcf.jp/words/snapshot.html

ヘルスチェック

システムなどが正常に稼働しているかを外部の別の機器などから監視あるいは検査すること。
http://e-words.jp/w/%E3%83%98%E3%83%AB%E3%82%B9%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF.html
チェック結果:ヘルシー => ヘルスチェックが良好 => 問題は起こっていない。
チェック結果:アンヘルシー => ヘルスチェックでエラー => 何かしらの問題が起こっている。

スケーラブル

増大・拡大に適応できる能力・度合いのこと。

スケールアップ / スケールダウン

サーバーなどの性能を上げる/下げること

  • アップ => 上げる
  • ダウン => 下げる ※垂直スケーリング(性能の上下)の場合に使う

スケールアウト / スケールイン

サーバーなどの台数を増やす/減らすこと。

  • アウト => 増やす(拡大する)
  • イン => 減らす(縮小する) ※水平スケーリング(台数の増減)の場合に使う

垂直スケール / 水平スケール

垂直スケール => ひとつのサーバーなどを大きくする。
水平スケール => ひとつのサーバーなどの数を増やす。並列で使う。

設計関連

Design for Failure

故障に備えた設計。
時間が経てば故障する、ということを認識し、アーキテクチャに取り入れた考えのこと。

Single Point Of Failure(SPOF)

単一障害点。
Design for Failure を実現するために SPOF をなくすという考え方をする。
障害の原因ポイントが単数だと設計的に良くないとされていて、予め複数にリソースを割り振った設計が好ましいとされる。

可用性

システムが継続して稼働できる能力のこと。

高可用性 => システムの停止時間をなるべく少なくすること。
AWSのサービスを使った高可用性の実現には、複数のAZおよびリージョンにまたがるアーキテクチャにしたり、Auto Scalingを使用するといった方法がある。
参照元: https://qiita.com/hz1_d/items/ca24e1d131bf475e23b1

冗長化

コンピューターやシステムに何らかの障害が発生したケースに備えて、予備装置を普段から配置、運用しておくこと。
参照元: https://boxil.jp/mag/a2945/ コンピュータの世界では、冗長は無駄というようなネガティブな意味ではない。
「冗長性がある設計や構成」ということは、予め何らかの障害に対して対策している良い設計や構成というポジティブな意味。

イレブン・ナイン

99.999999999%のこと。
9が11個あるので、イレブン・ナイン。

S3の耐久性(堅牢性)はイレブン・ナイン。
S3の可用性は99.99%なので注意。

プロビジョニング

必要に応じてネットワークやコンピューターの設備などのリソースを提供できるよう予測し、準備しておくこと。
参照元: https://www.idcf.jp/words/provisioning.html

ユーザー関連

MFA (Multi-Factor Authentication)

サインインする際に行う多要素認証のこと。
ユーザー名とパスワードに加えて保護のレイヤーを追加する。(PingもMFAのソリューションのひとつ)

フェデレーティッドユーザー

AWS上ではアカウントを保持していないAWS外部のユーザーを指す。
Auth認証(Twitterでログインするみたいな)のようなサービスの利用法をフェデレーションという。

AWS クラウドプラクティショナー 取得まで

職種や前提知識

Webのフロントエンドエンジニア。
過去に案件でAWSを用いたプロジェクトはいくつか担当しましたが、実際にコンソール上で設定を変更したりすることはほぼなく、よく使われるサービス(EC2/S3/ELB/CloudFrontあたり)がどのようなサービスであるかをなんとなく知っている程度。
VPCなどコーディング業務から遠いサービスは今回ほぼ初めて聞いた程度でネットワークやサーバーに関しての知識も基礎部分はかなりあやしいです。

認定資格テキストの読みこみ(本)

まずAWS認定資格試験テキスト「AWS認定 クラウドラクティショナー」 https://www.amazon.co.jp/dp/4797397403/ の読みこみを行いました。
認定試験の知識のなかで一番ベースとなる知識をつけることができ、試験のレベル感もこの本で把握していきました。

1週目は分からない部分がありながらも一通り読み進めて設問を解きました。
初めて聞くサービスや用語も多いので、

  • 資格取得の全体の雰囲気(設問の出され方など)を把握する
  • 聞いたことがない用語に関しては把握する
  • 聞いたことがあるサービスに関しては、概要を説明できる
  • 聞いたことがないサービスに関しては、どのようなサービスかをぼんやりと認識できる
  • AWSの責任共有モデルやセキュリティ、料金システムに関しては細かい仕組みや数字は覚えられず、基本的な考え方や方向性に関して認識できる程度の理解度までが1週目では限界でした。
    ※全部を覚えようとするとパンクしてしまうと思い途中で方向転換

レーニングプログラム AWS Cloud Practitioner Essentials(動画)

AWSが提供しているクラウドラクティショナー向けの動画カリキュラム。
現在配信されているパート2ではなくパート1?を見たような気がしますが、全7〜8時間くらいで長めです。

認定資格用に作られている動画と、初心者ユーザー向けのサービス紹介の動画の2タイプで構成されていましたので、有益度合いは人によるかなと思います。(聞いておいて損はしないですが)
機械翻訳的な日本語音声なのでちょっと聞きづらさを感じてしまいました。

各セクションの最後に設問があるので役に立ちます。難易度が高く感じました。(動画に出てないことも出てくる)
この時点で50%くらいの正答率だったので結構ヘコみました。
このあたりで勉強開始前までに聞いたことないサービスに関しても概要は理解できたと思いますが、まだまだ細かい所は覚えられていなかったと思います。
そのため、この段階でもう一度テキストを読みました。(2周目)

実際にAWSを触ってみる

実際にAWSのアカウント作成して無料枠で触ってみました。
参考にしたのは少し古いですが 0から始めるAWS入門:概要 - Qiita などをみながら進めて、VPC設定、インスタンスの立ち上げくらいまで行ってみました。(約2時間程度)

AWS Innovate 2019 AWSome Day セッション(動画)

AWS公式の初心者向けセッション動画を一通り見ました。(4動画)
https://aws.amazon.com/jp/about-aws/events/aws-innovate/sessions/#awsomeday02
こちらは厳密に資格対策用の教材ではないですが、内容はかなり初心者向けに作られています。
図を用いながら説明があるので、もしかすると認定資格テキストの前の最初の段階で見るほうがいいかもしれません。
スピーカーの方が2人いるのですが、掛け合いして進んでいくので、個人的には飽きずに楽しむことができました。

これまでの知識の復習など

  • よく使われる用語や試験範囲のサービス一覧を自分でまとめてみる
  • テキストの読みこみ 2回(3週目、4週目)
  • 認定資格テキストとトレーニングプログラムの設問を改めて一通りやってみる

模擬試験

試験の1週間くらい前に受けました。
正解90%程度。
本試験より難易度はやさしいとは分かっていたものの、だいたい正解だったので試験の日程を1週間後に設定できました。
解答と解説がないのであまり有益でないかもですが、試験形式に慣れるためにやっておいたほうがよいです。

試験結果

820点ほどで合格。

  • 20%:間違いなく正解
  • 60%:なんとなく正解かな
  • 10%:たぶん間違いかな
  • 10%:これ分かんないな

というくらいの感触でした。90分の持ち時間でだいたい30分で一通り回答、15〜20分でマークつけた問題の見直しを行いました。(40分余り)

勉強期間はGW明けくらいから初めて6月上旬の受験だったので1ヶ月ほど。
通勤時間に本読んだり、動画は週末に見たりしました。
はじめは他の勉強や課題と同時並行で進めれるかなと思っていましたが、本の読み込み1週目でこれ大変だなと思って5月中旬以降はほぼこれだけの勉強期間になってしまいました。

問題内容や難易度/対策

認定資格を取ること、が目的であれば直接コンソール触わらなくてもOKかなと思います。
初見のサービス名がいきなり出たり、知らない英語の用語が出てきたりして焦ってましたが、
70%正解なら合格にはなるので、簡単(素直)な問題などを落とさないように基礎固めておいたほうが安心できそうです。

  • EC2(インスタンスタイプなど)
  • RDS(データベース周り)
  • IAM(ユーザー権限)

に関してはそれぞれ3問ずつ以上は出たと思うので、しっかりおさえておいたほうがよいかなと感じます。
(IAMとかMFAとか5回以上設問や選択肢であった気もする)

自分みたいなレベル感の人はとりあえずサービス名や用語覚えるまでの段階が一苦労と思いますが、
そこを乗り越えたらそれぞれの特徴覚えて、問題の傾向やクセを理解するテクニック的なところになるので割と一気にいけちゃうと思いました。

Mac SourceTree で AWS CodeCommit のリポジトリをチェックアウト

前回もつまづきまくって2度目があったのでメモしておきます。
httpsリポジトリアクセス、IAMのロール周りも設定後の場合です。

公式で近いチュートリアルは下記が近そう
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-https-windows.html

Amazon CLI をインストール

ここは省略します
参考: AWS CodeCommit + Git (https) を OSX から SourceTreeで使う - Qiita

AWS CLI の設定

ターミナルから下記で AWS CLI の設定を行います。

$ aws configure --profile [プロジェクト名(自由につけて良い/あとで使う)]
AWS Access Key ID : [アクセスキーID]
AWS Secret Access Key : [シークレットアクセスキーID]
Default region name : [CodeCommitを使う?リージョン(ap-northeast-1 など)]
Default output format : [空欄(None)でOK]

認証情報ヘルパーを設定する

同じくターミナルで認証情報ヘルパーを設定します。

$ git config credential.helper "!aws codecommit credential-helper $@"
$ git config credential.UseHttpPath true

下記もひつようかな?

/user/.gitconfig ファイルに下記を追加

[credential]
    helper = "aws configure --profile [CLI設定のプロジェクト名] codecommit credential-helper "
    UseHttpPath = true

SorceTree からクローン

SorceTree で Git URL をクローンする。
URLにhttpsアドレスを入力して Git のユーザー名/パスワードを入力
※このときにパスワードしか出ない場合はほかプロジェクトのユーザー名が使われているかも

問題なければクローンできる。Git URL と判定されていなければ以上の設定で不備ありと思います。

slick のオプション

これまで Swiper 一択だったけど Slick のほうがカルーセルの個数など融通ききやすい気がするのでいつもググるものをメモしておきます。

slick - the last carousel you'll ever need

<ul class="js-carousel-hero">
  <li><img src="slide.png"></li>
  <li><img src="slide.png"></li>
  <li><img src="slide.png"></li>
</ul>
$(".js-carousel").slick({
  mobileFirst: true,
  centerPadding: 0,
  dots: true,
  arrows: true,
  infinite: true,
  speed: 400,
  autoplay: true,
  autoplaySpeed: 4000,
  cssEase: 'ease-in',
  responsive: [
    {
      breakpoint: 768,
      settings: {
        // for PC settings  
        centerMode: true,
        variableWidth: true
      }
    }
  ]
});

PCでスライドの横幅指定且つセンターモードにしたい場合は下記のようにcssで指定する (オプション側だとうまくいかなかった.)

ul {
  li {
    width: 1000px;
  }
}

2019年5月 振り返り

結果

ブログ

目標:月 12 回(週 3 回)更新
結果:月 13 回 更新

読書

目標:月 1 冊
結果:月 1 冊

反省点など

読書はAWSの認定本だけ。最初は他の勉強と同時並行でいけるかなと思いましたが後半難しくてそれだけになってしまった。
Vue.js でひとつ作れたのですが、JSもそれ以外の進展はなし。

月後半が少し忙しかったのでやれるときにもっとやっておかなきゃなというのと、忙しいなかでも時間作ってやる方法をもう少し考えたい。

来月に向けて

6月中旬までにAWS認定とって以降はJSの勉強をする。
案件でセマンティックなマークアップについてもっと学ばなきゃという機会があったのでどこかでまとめて学習する。
本はインターフェイスの本が途中になっているのでそれを読む。

フォーム入力バインディングを理解する その11

f:id:jotaki:20190212100544p:plain

何年か前に jQuery で作った type tester という簡易的なフォント(関連のスタイリング)のテスターツールを Vue.js で作ってみる。 その11

GitHub Pages: https://yuheijotaki.github.io/type-tester/
GitHub リポジトリhttps://github.com/yuheijotaki/type-tester

f:id:jotaki:20190523095755p:plain

改善点

まだ仕様や使い勝手的な部分で改善できる所がありそうで、メモのため書いておきます。

  • 再読込時にテキストの内容が保存されないようになっているので、localStorage使って保存できるように
  • color: / background: のカラーコード入力時、短縮形の場合は補完機能、エラー時は入力前の値に戻るなどのバリデーション機能
  • フォントのバリエーションをGoogle Fontsから取ってこれるなどバリエーションが多ければなお良い
  • ローカルストレージの削除ボタンで既存のスタイルをデフォルトにリセットする機能
  • 全体的に追加要件に対しては手書きになっている箇所ばかりなので、そこも動的だせたらなお良い

感想

↑のような改善したい点はまだあるのですが、想定していたより短期間で実装できた感触です。 jQuery 版と比べると結構コアなところも時間かからなかったので Vue と localStorage すごいなーという感じです

  • computedmethods の違いがやっと分かってきた気がする
  • Vue.js の枠内でやれることもあるが意外とやれない(もしくは複雑になる)こともあるので、そういう場合は JavaScript で書くところもあるのだなと
  • 今回のようなフォーム要素などあるものは、UIフレームワークなり使ったほうが良さそうな気がするので、そのあたりも知識必要かなと
  • localStorage も初めて触わりましたがやっぱり Cookie と同じような感じで、それでいて扱いやすいのでもっと使いこなせるようにしたい
  • Vue CLI は結局 webpack を使っているので webpack の知識もあったほうがいいなー
  • 今回のページ構成のあるサービスでないので、ルーティング周りや vue-head の使いかたも覚えないとなとか

フォーム入力バインディングを理解する その10

f:id:jotaki:20190212100544p:plain

何年か前に jQuery で作った type tester という簡易的なフォント(関連のスタイリング)のテスターツールを Vue.js で作ってみる。 その10

GitHub Pages: https://yuheijotaki.github.io/type-tester/
GitHub リポジトリhttps://github.com/yuheijotaki/type-tester


localStorage 用に vue-ls ライブラリを使ってリロード対策

これまでブラウザの再読込をした際に前回までの作業が記録されない状態だったので、localStorage を使って保存できるように実装する。
ピュアな JS でも書けそうですが、何個がライブラリがあった中で vue-ls を使用しました。

インストール

$ npm install vue-ls --save

/src/main.js(抜粋)

...
import VueLocalStorage from 'vue-ls'
Vue.use(VueLocalStorage)
...

順番的には、

  1. ローカルストレージにセットするメソッド setItem() 追加
  2. あるタイミングでセットする
  3. mounted() 時にセットされたローカルストレージを取得 getItem()
  4. 3.で取得した値で何かしらを実行

みたいな順序とイメージでつくりました

1. ローカルストレージにセットするメソッド setItem() 追加

data() で定義されている styleObject オブジェクトをセットするメソッドを追加します。

...
  methods: {
    ...
    setStylesInfo() {
      localStorage.setItem('styleObject', JSON.stringify(this.styleObject));
    }
  },
...
2. あるタイミングでセットする

ツールでカラーを変更した際にセットされるようにメソッドに追加します。

...
  methods: {
    changeColor: function (color) {
      this.styleObject['color'] = color;
      this.setStylesInfo();
    },
    ...
3. mounted() 時にセットされたローカルストレージを取得 getItem()
...
  mounted() {
    // ローカルストレージに styleObject があるかチェック
    const local_styleObject = localStorage.getItem('styleObject');
    if ( local_styleObject ) {
    }
  },
...
4. 3.で取得した値で何かしらを実行
... // 3.の if文の続き
    if ( local_styleObject ) {
      // ある場合、その styleObject を上書きする(CSS/テキストコンテンツにも適用される)
      this.styleObject = JSON.parse(local_styleObject) || []
      // color
      document.tools.colorPalette.value = this.styleObject['color'];
      document.tools.color.value = this.styleObject['color'];
      ...
    }
...

getItem() するときに JSON.parse() しないといけないなどちょっとつまづきましたが、特に styleObject の扱いはすごいやりやすかったです。

ただ子コンポーネントの各フォーム部品の値がセットされないので、

// color
document.tools.colorPalette.value = this.styleObject['color'];
document.tools.color.value = this.styleObject['color'];

のようにひとつずつセットしてあげる必要がありました。

参考リンク

次やること

結構形になってきたので次回で最後になりそうです。

  • 全体スタイリング