AWSパターン別構築・運用ガイド 輪読会 3.6節~/aws_book_3_6

C422cc033079e005fd1aa1b845b099da?s=47 meow
November 28, 2019

AWSパターン別構築・運用ガイド 輪読会 3.6節~/aws_book_3_6

2019年11月29日(金)にコワーキングスペース秋葉原Weeybleにて開催された、『AWSパターン別構築・運用ガイド 輪読会』で発表した資料です。

https://weeyble-infrastructure.connpass.com/event/156293/

C422cc033079e005fd1aa1b845b099da?s=128

meow

November 28, 2019
Tweet

Transcript

  1. 『Amazon Web Services パターン別 構築・運用ガイド』 輪読会 ~Chapter3 パターン別構築例 3.6節~ meow

    (id: meow_noisy) 2019/11/29(金)
  2. このスライド  作りかけです  ちなみに、私の本のバージョンは改定2版の初版第3刷です  本の表記に違いがあるかもしれないので、予めご承知おきください

  3. はじめる前に 1. サンプルコードの入手  テキストを打ち込むので、typoが怖い所。  書籍公式サイトから、サンプルファイル(テキストデータ)を入手し、 コピペして動作させましょう  https://www.sbcr.jp/support/14480/

  4. 今回の内容  3-6 CloudFormationによるテンプレートを利用した自動構 築  3-7 SESによるメール送信システムの構築  3-8

    AWS上に開発環境を構築する  3-9 モバイルアプリからAWS上のリソースを利用する
  5. 3-6 CloudFormationによる テンプレートを利用した自動構築

  6. CloudFormationとは(p.301)  インフラの構成管理のためのサービス  インフラ構成をソースコードで管理することができる  テンプレートとして再利用できる AWS CloudFormation

  7. テンプレート(p.302) JSONの例(データ: 03-06¥3-6-1.txt) { "AWSTemplateFormatVersion" : "version date", "Description" :

    "JSON string", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, "Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } ←テンプレートのバージョン。2010年から変更なし ← メモの記入欄 ← スタック作成時に、パラメータとして任意の値を渡せる ← キーと値を設定 ← 条件判断を行い、満たした場合のみ実行されるリソースを指定 ← EC2やセキュリティグループのようなリソースと設定値 ←VPCやセキュリティグループのID、IPアドレスを出力させる
  8. テンプレートの注意点  .template拡張子がデフォルトの探索ファイルになってい るため、jsonにすると表示されない  ファイル名に日本語が含まれると、受付けない。

  9. ネットワークの構築(p.304)  データ: 03-06¥cloudformation_vpc.template VPC Internet gateway Availability Zone(DMZ) Availability

    Zone(Trust) Public subnet Private subnet Private subnet Public subnet 172.30.11.0/24 172.30.12.0/24 172.30.51.0/24 172.30.52.0/24 ネットワーク ACL
  10. CloudFormationによる構築(p.312)  03-06¥cloudformation_vpc.templateを登録

  11. UpdateStackによるネットワークの更新(p.314)  後からテンプレートを改造したくなっても大丈夫  差分更新に対応している  03-06¥cloudformation_vpc_update.template  「スタックの更新」からテンプレートを差し替える

  12. CloudFormationによるサーバ構築(p.316)  CloudFormationとシェルスクリプトを組み合わせることで、 起動後に自動カスタマイズ可能  03-06¥cloudformation_instance.template  “KeyName” キーペアを自分の持ってる名前に変えておく 

    "SubnetId“  "GroupSet"
  13. CloudFormationからサーバにデータ を渡す仕組み(p.317)  EC2のプロパティに、UserDataを追加し、シェルスクリプ トを埋め込む。  3-6-6.txt "UserData" : {

    "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash¥n", "yum update -y¥n", "yum install -y httpd¥n", "service httpd start¥n", "chkconfig httpd on¥n" ]] } }
  14. 入れ子のテンプレートを実行する(p.318)  IDなどの値をテンプレートに埋め込むのは不都合  毎回書き換えないといけない。  そこで、テンプレートの出力を受け取って、後段の処理を 続けるようにする。  “Outputs”の中に指定する

  15. 入れ子のテンプレートを実行する(p.319)  出力を受け取る時は、”Parameters”を利用する  cloudformation_instance_parameters.template

  16. 入れ子のテンプレートを実行する(p.320)  ネットワーク作成テンプレートから、インスタンス作成用 のテンプレートを呼び出すように変更する  3-6-10.txt "InstanceCreate" : { "Type"

    : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : "https://s3-ap-northeast-1.amazonaws.com/******** cloudformation_instance_parameters.template", "Parameters" : { "InstanceSubnetId" : { "Ref" : "SubnetTrustAZd" }, "SecurityGroupDefault" : { "Ref" : "SecurityGroupDefault" } } } }
  17. 3-7 SESによるメール送信システムの構築

  18. SESを使ってメールを送信する(p.322)  メールサービスは欠かせない  アカウント作成  パスワード変更  メルマガ 

    メール送信方式 1. SES(Simple Email Service) 2. EC2インスタンスにメールサーバを構築 3. サードパーティ製のツールを利用
  19. SES(Simple Email Service)の設定 (p.324)  東京リージョンでは使うことができない  バージニア北部を選択  Verify

    a New Email Addressで、お手持ちのメールアドレ スを登録  登録したメルアドに、確認の通知がくるので、URLをクリックして activate  ためしに自分の別のメアド(登録したものでもOK)に投げる  迷惑メールフォルダに分類されているかもしれない Amazon Simple Email Service
  20. 正式利用に向けた申請(p.328)  Sending Statistics > Request a Sending Limit Increase

     p.329 表3-7-1の設定に極力合わせる  UIが変わっているので、無いものもある  申請すると1日程度おいて受理される
  21. EC2インスタンスにメールサーバを 構築する(p.337)  あまりおすすめしていない(p.340 l.5)  適当なスペックのインスタンスを用意する  ディストリビューションはAmazaon Linux

     Elastic IPを取得しこのインスタンスに付与  メールサーバとしてPostfixをインストール(p.338)  メールサーバのホスト名をDNSに登録  メール不正中継のテストをする  AWSのWebサイトでメール送信制限の解除申請を行う (p.339)
  22. 外部のメール送信サービスを利用する(p.340)  Sendgrid  携帯キャリアアドレス向けにも対応  サポートが充実  マーケティング配信においてはSESよりもサービスが充実 

    Mandrill  Mailgun
  23. 3-8 AWS上に開発環境を構築する

  24. 開発環境の構築と運用(p.342)  使うときだけサービスを起動したい  開発環境を再現可能な状態にしておく  CloudFormation  テンプレート化が強力

  25. 環境のコード化のサービス(p.343)  Terraform  Infrastructure as a CodeをAWS以外でも実現可能  kumogata

     Rubyをサポート  JSON,ymlにない、柔軟なロジック設計が可能  変数が利用できるだけでも助かる  Chef: 機能が豊富  Ansible: 学習コスト低め  Itamae: 著者の推し構成管理サービス 追記: AWSにもCDKという スクリプトで環境を構築できる フレームワークがある
  26. EC2インスタンスの自動起動・停止(p.346)  AWS Insatance Schedulerを使う

  27. 開発環境を構築する上での注意点(p.347)  VPCの振り分け  VPCは1アカウントあたり最大5つ  別々の開発環境をVPC無いに同居させる  RDS 

    マネジドされていて、テストできない項目が一部存在
  28. 継続的インテグレーション(CI)を実 施する(p.348)  コードを変更するごとに、全体として動作するかをテスト する  バグの早期発見  EC2にリポジトリサーバ、ビルドサーバを立てる 

    リポジトリサーバ  AWS CodeCommit  GitLab,SVN  GitHubは、他社サービスに上げることに抵抗がないならアリ (p.349)  ビルドサーバ  Jenkins  AWSだと、CodeBuild, CodePipeline,CodeDeploy
  29. 3-9 モバイルアプリからAWS上の リソースを利用する

  30. Cognitoによるユーザ認証(p.351)  認証・認可のサービス  アクセスキーとシークレットアクセスキーを利用しない認 証の仕組みを実現できる  モバイル端末向けアプリ上での認証で、キーを抜かれるリスクが無 い 

    同一ユーザの複数端末間でのデータ同期機能も存在(p.355)
  31. 3Tierアーキテクチャ(p.351)  プレゼンテーション層(モバイル端末)、アプリケーション (EC2インスタンス)、DB(データ層)  EC2がアクセスをさばく  リソースへのアクセスも全部EC2  EC2の負担が重い

    Amazon RDS instance Amazon EC2
  32. 2Tierアーキテクチャ(p.352)  Cognitoで利用者のアイデンティティを確立  そして、IAMロールで権限を付与  メリット: 構成がシンプル。中間にEC2がいらないので、 フルマネジドにできる可能性 Amazon

    RDS instance Amazon EC2 Amazon Cognito 直接操作
  33. サーバレスアーキテクチャによる 3Tier(p.353)  サーバレスにすることで、イベントに応じてプロセスが呼 び出せる Amazon Cognito User Pool Amazon

    API Gateway AWS Lambda (認証) Amazon DynamoDB AWS Lambda (処理)
  34. Cognitoを中心としたユーザ認証とア クセス認可(p.354)  認証プロバイダによる認証  CognitoによるCredentialの発行  IAMロールによる権限の付与 Amazon Cognito

    IAMロール AWSの リソース credential tokenの発行
  35. p.355 CognitoのIDプールの作成  アイデンティティ管理はIDプールという単位で管理

  36. AWSのモバイル開発プラットフォー ム(p.357)  モバイル開発プラットフォームとして、Mobile SDKが用意 されている。  iOSアプリ開発の例が簡単に載っている

  37. SNS(Simple Notification Service)に よるモバイルプッシュ通知(p.361)  AWSのプッシュ通知機能  iOS、Androidなどのマルチプラットフォームへの一斉配信 に対応 Amazon

    Simple Notification Service
  38. ご清聴ありがとうございました