継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

サーバーレスシングルページアプリケーション 5章

タダです。

今回はサーバーレスシングルページアプリケーション5章で勉強したことをまとめていきます。 www.oreilly.co.jp

章立ては以下のようになっています。

  • 1章 シンプルにはじめる
  • 2章 ハッシュイベントによるビューのルーティング
  • 3章 シングルページアプリケーションに必要なもの
  • 4章 Amazon CognitoによるIdentity as a Service
  • 5章 DynamoDBにデータを格納する
  • 6章 Lambdaを使って(マイクロ)サービスを作る
  • 7章 サーバーレスのセキュリティ
  • 8章 スケールアップする

5章のまとめ

  • DynamoDBのプライマリーキーが1次元の場合、ハッシュキーという
    • プライマリーキーが2次元の場合、レンジキーという
    • DynamoDBはドキュメントデータベースとしても使える
      • アイテムのサイズは最大400KBまで
      • JSONドキュメントに使える
      • 属性には、数値、文字列、バイナリ、ブーリアンが使える
    • DynamoDBは、書き込んでもすぐに書き込んだ値が得られない場合もある(結果整合性)
      • 読み込みには2つの方法で、結果整合性、強い整合性がある
      • データの読み込みの整合性は、通常1秒以内に保たれるため、人げとのやり取りには結果整合性のある読み込みで、プログラム的には強い整合性が必要性のある読み込みを使うべき
  • DynamoDBからデータを取得するためには、クエリとスキャンの2つがある
    • テーブルの大量のデータを含んでいるのにスキャンをかけるとすごくじかんがあかかるので、代わりにセカンダリインデックスを使う
      • グローバルセカンダリインデックスは、テーブルのデータのコピーを含んでいるが高速にアクセスできるように別のプライマリキーでインデックスが貼られる
      • ローカルセカンダリインデックスは、テーブルと同じハッシュキーを使うがアイテムの属性に基づいて追加のインデックスを貼る
  • テーブル作成時にはローカルセカンダリインデックスしか作成できないが、必要があればグローバルセカンダリインデックスを追加できる
    • 今回は、スクリプトで実行してテーブルを作る ./sspa create_table conf/dynamodb/tables/learnjs cognitoのアイデンティティプール名 Waiting for table creation...........done!
  • DynamoDBのテーブルへのアクセス制御はきめ細かな制御が可能なため必要な制御ルールが何かを検討する
    • 今回は、ユーザーはlearnjsテーブルにドキュメントを作成できる必要あり
    • テーブルには、ユーザーが入力した正しい解答を書き込む
    • ユーザーは自分で作成したドキュメントを読めて自分のドキュメントだけを更新できる必要があり
  • DynamoDB二オブジェクトを書き込むとき、DyanmoDB.DocumentClientAPIを使うことでDynamoDBをドキュメントデータベースのように扱える
    • オブジェクトの属性値は配列のような複合値になり、アイテムごとに属性が違っていてもよい
  • Defferedオブジェクトをつくって、sendDbRequest関数から返すことで他の非同期リクエストとつなげることができる
    • saveAnswer関数で、Cognito IDなどの必要なフィールドを含むitemオブジェクトを作る(Cognito IDを取得してIDとユーザーが一致しなければ弾く)
    • アイテムを作成後、DocumentClient.putを実行し、sendDbRequestをに渡す
    • checkAnswerClickハンドラで関数を扱う

次は6章ではLambdaを使っていきます。

6/25~6/29 AWSブログ

タダです。

今週のAWSブログアップデートをまとめていきます。

1、トヨタ・リサーチ・インスティテュート、AWS の深層学習により安全性が高い自動運転車を世界規模で急速展開

  • トヨタ・リサーチ・インスティチュート社のAWSを使った自動運転に関する深層学習紹介記事です

2、Amazon SageMaker の因数分解機を使った、ムービーレコメンダーを構築する

  • SageMakerの因数分解機を使ったレコメンドシステムを構築する方法の紹介記事です

3、[AWS Black Belt Online Seminar] AWS Cloud9 入門 資料及び QA 公開

  • 表題のWebnar及びQ&A公開ブログです

4、[AWS Black Belt Online Seminar] データレイク入門: AWSで様々な規模のデータレイクを分析する効率的な方法 資料及び QA 公開

  • 表題のWebnar及びQ&A公開ブログです

5、AWS 機械学習ソリューションについて学べる新しいデジタルトレーニング

  • ML系の学習支援コンテンツ紹介記事です

6、Amazon QuickSightのプライベートVPC内のデータアクセスの設定方法について

  • QuickSightのプライベートVPC内のデータアクセス機能追加により、プライベートサブネットなRDS、オンプレのデータソースへのアクセスについて紹介記事です

7、XGBoost と Amazon SageMaker を使った機械学習の簡素化

  • SagaMakerとXGBoostというMLライブラリを使ったクレジットカードの債務不履行予測モデルを作成する方法の紹介記事です

8、Cloud Express Roadshow が開幕します

  • Cloud Express RoadShowというイベントの紹介記事です

9、AWS のセキュリティ動画(日本語)の公開について

  • AWSのセキュリティに関する紹介動画が公開されました
  • 以下の動画について記事では紹介されてます
    • 責任共有モデル
    • データセンターの紹介
    • GuardDuty
    • Inspector

10、Amazon SageMaker ニューラルトピックモデルのご紹介

  • SagMeker ニューラルトプックモデルの紹介記事です

11、[AWS Black Belt Online Seminar] AWS Summit Tokyo 2018 の振り返りと最新アップデート 資料及び QA 公開

  • 表題のWebnar及びQ&A公開ブログです

12、Amazon Linux WorkSpaces 提供開始のおしらせ

  • Amazon LinuxおよびAmazon Linux2でうごく、WorkSpacesが提供されました

13、大阪ローカルリージョン Snowball / Snowball Edge 提供開始

  • 大阪ローカルリージョンで AWS Snowball / Snowball Edgeが提供開始されました

14、Amazon SageMaker が PyTorch と TensorFlow 1.8 のサポートを開始

  • SageMakerでPyTorchとTensorFlow1.8がサポートされました

15、Amazon EMR のサイズ変更とオートスケーリングのベストプラクティス

  • EMRのサイズ変更とオートスケーリングのためのベストプラクティス紹介記事です

以上が今週のアップデートまとめです。

サーバーレスシングルページアプリケーション 4章

タダです。

今回はサーバーレスシングルページアプリケーション4章で勉強したことをまとめていきます。 www.oreilly.co.jp

章立ては以下のようになっています。

  • 1章 シンプルにはじめる
  • 2章 ハッシュイベントによるビューのルーティング
  • 3章 シングルページアプリケーションに必要なもの
  • 4章 Amazon CognitoによるIdentity as a Service
  • 5章 DynamoDBにデータを格納する
  • 6章 Lambdaを使って(マイクロ)サービスを作る
  • 7章 サーバーレスのセキュリティ
  • 8章 スケールアップする

4章のまとめ

Adding User Pool Sign-in Through a Third Party - Amazon Cognito

  • 書籍では、Google Devleopers Consoleと記載されているが現在はGCPAPIとサービスに統合されている模様
    • 以下の箇所にGoogleで取得したクライアントIDを埋め込む
{
    "AllowUnauthenticatedIdentities": false,
    "SupportedLoginProviders": { #SupportedLoginProvidersがIDプロバイダとCognitoのトークンを検証するIDのリストを表す
        "accounts.google.com": "<ここに転記する>"
    }
}
  • ./sspa create_pools を実行すると実行結果に応じて以下のファイルが生成される
  • Google認証を使うために、Googleが提供するJavaScriptライブラリを設定して、View側でログインボタンを追加する
<script src="https://apis.google.com/js/platform.js" async defer></script>
  • ライブラリーの設定は、head要素にmeta要素を追加する
<meta name="google-signin-client_id" content="GoogleのクライアントID">
  • Google APIがコールバックとして使う関数を定義する
    • これが認証が成功すると実行される
function googleSignIn() {
  console.log(arguments);
}
  • ログインボタンをGoogle側に連携する必要があるため、div要素を追加する
<div class='nav-container no-select fixed-top u-full-width'>
    <ul class='inline-list hover-links nav-list six columns'>
    <li><a class='text-lg' href="#">LearnJS</a></li>
    <li><a href="#problem-1">Start</a></li>
    </ul>
    <div class='four columns'>
        <span class='navbar-padding u-pull-right'>
        <span class="g-signin2" data-onsuccess="googleSignIn"></span>
        </span>
    </div>
</div>
  • デプロイすると、ログインボタンが表示されてGoogle認証ができるようになる f:id:sadayoshi_tada:20180624163828p:plain

  • Googleの認証ができるようになったからトークンを取得したのち、Cognito認証情報を生成できるようになる

    • CognitoIdentityCredentialsオブジェクトを使って、アプリケーションで認証されたユーザーはAWSサービスに直接アクセスできる
    • トークンは一時的な期間しか有効でないのでトークンを更新する処理を追加する
  • プロファイルビューを作ることで、ユーザーにアプリがどんな情報を持っているかを知らせることができる

次は5章ではDynamoDBでのデータ追加、CognitoをIAMロールで操作していきます。

『はてな・ペパボ技術大会 #4 〜DevOps〜 @京都』で各社の取り組みを聞いて色々考えた話

タダです。

今日、京都はてなさんのオフィスにて開催された、『はてな・ペパボ技術大会 #4 〜DevOps〜 @京都』に参加してきました! hatena.connpass.com

「Effective DevOps - 4本柱による持続可能な組織文化の育て方」を買って読み進めようとしているところ、ジャストフィットのイベントを開催するときき、京都まで行ってきました!

サービスを開発・運営する現場でDevOpsという言葉が使われるようになってから大分経ちますが、最近、書籍 Jennifer Davis、Ryn Daniels著「Effective DevOps - 4本柱による持続可能な組織文化の育て方」の邦訳刊行もあり、改めてDevOpsに注目が集まっているように感じます。DevOpsの概念は単なる開発者と運用者の関係性の話だけではなく、組織文化の話にも広がってきています。

ペパボ・はてな両社もそれぞれ長年サービスを継続的に開発・運営してきた中で、自然とDevOpsと言えるような活動に取り組んできました。両社のDevOpsはそれぞれ奇しくも今一つの転換期を迎えようとしています。 その中での取り組みやこれまでの歴史について、両社の事例や現在のチャレンジをご紹介します。

京都烏丸御池まで移動

今日は日中大雨で移動がしんどかったですが、、、初、はてなさんのオフィスにいける楽しみでワクワクしていました!

なんやかんやで到着してはてなさんのオフィスを発見! f:id:sadayoshi_tada:20180623142158j:plain

8階へあがり、会場を発見! f:id:sadayoshi_tada:20180623142309j:plain f:id:sadayoshi_tada:20180623175956j:plain

各セッションの感想

1、「社内横断で開発効率を上げる取り組み」

id:hitode909」さんの発表からスタート!

CTO室の活動が、インテグレーターの自分にとって刺激的でツールやペアプロをやりに行ったりする文化を作ったり、いろいろ仕掛けて面白いなー!と思いました。

詳しい資料はすでにブログに公開されておりますので、是非興味あれば見てみてください! blog.sushi.money

2、「ペパボにおけるDevOpsの遷移」

つづいて、「id:pyamax」さんの発表。

うちの福岡メンバーのツイートにもでてくる、P山さんを初めて見れてテンション上がりました!イケメンでした...!

ペポボさんが抱えるインフラの問題、コミュニケーションの問題、開発における課題をツールや仕組みを作って解決をはかっていかれたようです。

加えて組織でのエンジニアの話が興味深くてリーダーとフォロワーの関係の醸成の取り組み、エンジニアも差別化をしなきゃ生き残れないぜってメッセージが今の自分の危機感と合わさって響きました。

3、「Mackerelチームにおけるインフラオーナーシップ」

3番手は「id:itchyny」さんで、itchynyさんは、Mackerelを新卒から開発されているそうです。

ちなみに、下記のブログを書かれたのもitchynyさんでした、すげぇ。 mackerel.io

一番のメッセージは、開発者がインフラのオーナーシップを持つこと。

デプロイ、監視、サポート対応などなどを担当を回して、開発メンバーが関わってインフラのスキルもあげるし、障害振り返り会でも細かにやられているなーと思いました。

今後のMackerelの対応の話も聞けて面白かったです!

4、「プライベートクラウドではじめるDevOps」

最後は、「id:buty4649」さんです。

プライベートクラウドNyahの開発・改善していく中で、パブリッククラウドと遜色ない機能が備えていったと。

プロビジョニンングにはTerraformを使って、IaC化を実施。

インフラのコード化を行って開発がインフラを理解し、インフラへの変更にはプルリクを出して適用していくことでコラボレーションが生まれるって言葉がなるほどなと。

場合によってはプルリクの確認をしていてはおっつかないこともあるからアドホックな対応もされているそうです。

5、「トークセッション」

締めは、各社の代表の方々によるトークセッション。

モデレーター は、「id:antipop」さんと「 id:Songmu」さんで、スピーカーとして「id:rhythnn」さん、「 id:ogidow」さん、「 id:y_uuki」、「 id:itchyny」さんが登壇されました。

Effective DevOpsの4本柱にそって各社の取り組みの話や、組織の話がありました。

いろいろ聞いて、DevOpsって言葉が先行しているけど、人や組織が抱える課題に対してどうしていくのが最適なのかを探って、解決に必要なツールの1つが技術なのかな、手法がDevOpsなのかなって思いました、知らんけど。

最後に

いろいろと発見があったので、このままツイートが流れてしまうのはもったいないんでtogetterでまとめてみました。 togetter.com

ノベルティもいただきました! f:id:sadayoshi_tada:20180623230410j:plain

また、次のイベントにも行ってみたい!、そう思えた勉強会でした。

6/18~6/23 AWSブログ

タダです。

今週のAWSブログアップデートをまとめていきます。

1、VidMob がデータ主導型のクリエイティブアセット作成向けにコンピュータビジョンと言語 AI サービスを統合

  • VidMobと言うソーシャルビデオ制作プラットフォームサービスで、Recognition・Comprehend・Transcribeを利用しているという紹介記事です

2、AWS DeepLens の出荷開始 – ご注文をどうぞ!

  • DeepLensの一般発売が開始しました
  • 今の所、Amazon.comのみの販売のようです

3、AWS Step FunctionsとAWS Lambdaを使って複数のETLジョブの統合を行う

  • Step FunctionsとLambdaを使用してETLジョブを編成する方法の紹介記事です

4、新規 – Amazon ElastiCache での Redis 4.0 の互換性

  • ElastiCacheがRedis4.0互換のものをリリースしました

5、Redis セキュリティ アドバイザリ

  • セキュリティに関するElastiCacheのRedisでバージョンアップデートが発生します
  • 対象は以下のものです

    2018年6月10日以降に起動された ElastiCache クラスターには、影響はありません。既存の ElastiCache クラスターをお持ちのお客様は、メンテナンスウィンドウにて新しいバージョンへのアップデートが予定され、順次実施されます。このアップデ―トは今回の問題に完全に対処できるよう設計されており、ElastiCache はデフォルトで意図しない外部からのアクセスを防ぎます。このアップデートに関して、お客様によるアクションは必要ありません。

6、新機能: Amazon RDS for Oracle Database がvCPUの削減や最適化に対応

  • RDS for Oracleで以下のアップデートがありました

7、AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI IDを取得する

  • System Managerで最新のAmazon Linux AMI IDを取得することができるようになりました

8、Amazon EC2 アップデート – インスタンスタイプの追加、Nitro システム、CPU オプション

9、AWS Service Update 動画 (2018/06/21) が公開されました

  • 表題の動画が公開されました

10、AWS IAM ベストプラクティスのご紹介 – AWSアカウントの不正利用を防ぐために

  • IAMベストプラクティスの紹介記事です

11、Amazon RDS Performance Insights が一般利用可能に

  • Perfomance InsightsがGAしました
    • 現状は、Aurora PostgreSQL互換のみの対応です
  • これはRDSのワークロードを可視化し、SQLの遅延を見つけたり最適化の機能です

以上が今週のアップデートまとめになります。