Slide 1

Slide 1 text

『Amazon Web Services パターン別 構築・運用ガイド』 輪読会 ~Chapter3 パターン別構築例 3.6節~ meow (id: meow_noisy) 2019/11/29(金)

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

今回の内容  3-6 CloudFormationによるテンプレートを利用した自動構 築  3-7 SESによるメール送信システムの構築  3-8 AWS上に開発環境を構築する  3-9 モバイルアプリからAWS上のリソースを利用する

Slide 5

Slide 5 text

3-6 CloudFormationによる テンプレートを利用した自動構築

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

テンプレート(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アドレスを出力させる

Slide 8

Slide 8 text

テンプレートの注意点  .template拡張子がデフォルトの探索ファイルになってい るため、jsonにすると表示されない  ファイル名に日本語が含まれると、受付けない。

Slide 9

Slide 9 text

ネットワークの構築(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

Slide 10

Slide 10 text

CloudFormationによる構築(p.312)  03-06¥cloudformation_vpc.templateを登録

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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" ]] } }

Slide 14

Slide 14 text

入れ子のテンプレートを実行する(p.318)  IDなどの値をテンプレートに埋め込むのは不都合  毎回書き換えないといけない。  そこで、テンプレートの出力を受け取って、後段の処理を 続けるようにする。  “Outputs”の中に指定する

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

入れ子のテンプレートを実行する(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" } } } }

Slide 17

Slide 17 text

3-7 SESによるメール送信システムの構築

Slide 18

Slide 18 text

SESを使ってメールを送信する(p.322)  メールサービスは欠かせない  アカウント作成  パスワード変更  メルマガ  メール送信方式 1. SES(Simple Email Service) 2. EC2インスタンスにメールサーバを構築 3. サードパーティ製のツールを利用

Slide 19

Slide 19 text

SES(Simple Email Service)の設定 (p.324)  東京リージョンでは使うことができない  バージニア北部を選択  Verify a New Email Addressで、お手持ちのメールアドレ スを登録  登録したメルアドに、確認の通知がくるので、URLをクリックして activate  ためしに自分の別のメアド(登録したものでもOK)に投げる  迷惑メールフォルダに分類されているかもしれない Amazon Simple Email Service

Slide 20

Slide 20 text

正式利用に向けた申請(p.328)  Sending Statistics > Request a Sending Limit Increase  p.329 表3-7-1の設定に極力合わせる  UIが変わっているので、無いものもある  申請すると1日程度おいて受理される

Slide 21

Slide 21 text

EC2インスタンスにメールサーバを 構築する(p.337)  あまりおすすめしていない(p.340 l.5)  適当なスペックのインスタンスを用意する  ディストリビューションはAmazaon Linux  Elastic IPを取得しこのインスタンスに付与  メールサーバとしてPostfixをインストール(p.338)  メールサーバのホスト名をDNSに登録  メール不正中継のテストをする  AWSのWebサイトでメール送信制限の解除申請を行う (p.339)

Slide 22

Slide 22 text

外部のメール送信サービスを利用する(p.340)  Sendgrid  携帯キャリアアドレス向けにも対応  サポートが充実  マーケティング配信においてはSESよりもサービスが充実  Mandrill  Mailgun

Slide 23

Slide 23 text

3-8 AWS上に開発環境を構築する

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

環境のコード化のサービス(p.343)  Terraform  Infrastructure as a CodeをAWS以外でも実現可能  kumogata  Rubyをサポート  JSON,ymlにない、柔軟なロジック設計が可能  変数が利用できるだけでも助かる  Chef: 機能が豊富  Ansible: 学習コスト低め  Itamae: 著者の推し構成管理サービス 追記: AWSにもCDKという スクリプトで環境を構築できる フレームワークがある

Slide 26

Slide 26 text

EC2インスタンスの自動起動・停止(p.346)  AWS Insatance Schedulerを使う

Slide 27

Slide 27 text

開発環境を構築する上での注意点(p.347)  VPCの振り分け  VPCは1アカウントあたり最大5つ  別々の開発環境をVPC無いに同居させる  RDS  マネジドされていて、テストできない項目が一部存在

Slide 28

Slide 28 text

継続的インテグレーション(CI)を実 施する(p.348)  コードを変更するごとに、全体として動作するかをテスト する  バグの早期発見  EC2にリポジトリサーバ、ビルドサーバを立てる  リポジトリサーバ  AWS CodeCommit  GitLab,SVN  GitHubは、他社サービスに上げることに抵抗がないならアリ (p.349)  ビルドサーバ  Jenkins  AWSだと、CodeBuild, CodePipeline,CodeDeploy

Slide 29

Slide 29 text

3-9 モバイルアプリからAWS上の リソースを利用する

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

3Tierアーキテクチャ(p.351)  プレゼンテーション層(モバイル端末)、アプリケーション (EC2インスタンス)、DB(データ層)  EC2がアクセスをさばく  リソースへのアクセスも全部EC2  EC2の負担が重い Amazon RDS instance Amazon EC2

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

サーバレスアーキテクチャによる 3Tier(p.353)  サーバレスにすることで、イベントに応じてプロセスが呼 び出せる Amazon Cognito User Pool Amazon API Gateway AWS Lambda (認証) Amazon DynamoDB AWS Lambda (処理)

Slide 34

Slide 34 text

Cognitoを中心としたユーザ認証とア クセス認可(p.354)  認証プロバイダによる認証  CognitoによるCredentialの発行  IAMロールによる権限の付与 Amazon Cognito IAMロール AWSの リソース credential tokenの発行

Slide 35

Slide 35 text

p.355 CognitoのIDプールの作成  アイデンティティ管理はIDプールという単位で管理

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

ご清聴ありがとうございました