形式手法と AWS のおいしい関係。- モデル検査器 Alloy...
-
Upload
ytaka23 -
Category
Technology
-
view
2.820 -
download
2
Transcript of 形式手法と AWS のおいしい関係。- モデル検査器 Alloy...
![Page 1: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/1.jpg)
形式手法と AWS のおいしい関係。
チェシャ猫 (@y_taka_23)
JAWS Festa 東海道 2016 (2016/10/22)
モデル検査器 Alloy によるインフラ設計技法
![Page 2: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/2.jpg)
AWS で「やっちまった」こと
ありませんか?
![Page 3: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/3.jpg)
本日の目次
1. インフラ設計、この厄介なるもの
2. 形式手法、この深淵なるもの
3. Alloy、この強力なるもの
4. モデリング・ケーススタディ
5. まとめ
![Page 4: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/4.jpg)
1インフラ設計、この厄介なるもの
問題を複雑にしている要因はそもそもどこにあるのか?
![Page 5: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/5.jpg)
インフラ設計の難しさ
▪ 長期間に渡って使用される
▫ 当初の想定に反する事態になりやすい
▫ 設計意図が引き継がれにくい
▪ 変更時の影響範囲が大きい
▫ 一部分のみの再設計が困難
▪ 構成要素が多く、系として複雑
▫ 全体を正しく把握しないと動かせない
![Page 6: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/6.jpg)
AWS をテストする手法たち
▪ awspec
▫ RSpec 形式で AWS リソースをテスト
▫ API にアクセスしてリソースの情報を取得
▪ AWS Config Rules
▫ 設定の変更履歴を追跡
▫ 条件を満たさないリソースを監視
▫ Lambda でカスタムルール作成可能
![Page 7: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/7.jpg)
実物に依存せず
「設計」に対して試行錯誤したい
![Page 8: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/8.jpg)
形式手法Formal Methods
![Page 9: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/9.jpg)
2形式手法、この深淵なるもの
数理的手法を応用することで何が得られるのか?
![Page 10: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/10.jpg)
形式手法とは
▪ システムを数学的対象として表現
▫ 選んだ対象によって特性が変わる
▪ 数学的対象に関する理論を用いて検証
▪ いわゆるテストと比較して
▫ より抽象的な設計を検証できる
▫ テストケースの漏れが生じない
▫ 一般的には学習コストが高い(なじみがない)
![Page 11: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/11.jpg)
様々な形式手法ツール
▪ 形式仕様記述 : Z、VDM++
▪ 定理証明 : Coq、Agda、Isabelle
▪ モデル検査 : Alloy、TLA+、SPIN
▫ 列挙可能な数学的対象でシステムを定義
▫ システムが満たすべき制約を記述
▫ 全探索で制約が満たされることを確認
![Page 12: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/12.jpg)
AWS でも使われた形式手法
▪ 分散アルゴリズムの検証
▫ DynamoDB、S3 に適用
▫ 意図せずしてデータが壊れないことを保証
▪ ツールは TLA+ を使用
▫ 当初 Alloy を検討するも頓挫
▫ 原因は「表現力が足りなかった」こと
▪ 普通の開発者が数週間で習得
http://cacm.acm.org/magazines/2015/4/184701-how-amazon-web-services-uses-formal-methods
![Page 13: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/13.jpg)
re:Invent 2016 でもセッションが
https://www.portal.reinvent.awsevents.com/connect/sessionDetail.ww?SESSION_ID=8311
![Page 14: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/14.jpg)
3Alloy、この強力なるもの
「関係」によってシステムを記述するとはどういうことか?
![Page 15: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/15.jpg)
Alloy はどんなツールなのか?
▪ 関係論理でシステムを定義
▫ データモデル的な表現に向く
▪ SAT ソルバにより具体例を発見
▫ 制約を満たす(満たさない)例を自動で列挙
▪ 発見した例を可視化
▫ 検証結果が読み取りやすい
▫ Lightweight を標榜、試行錯誤を支援
![Page 16: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/16.jpg)
初めての Alloy モデル
sig Subnet {}
sig Instance {
subnet : Subnet,
}
run {}
![Page 17: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/17.jpg)
初めての具体例その 1
![Page 18: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/18.jpg)
初めての具体例その 2
![Page 19: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/19.jpg)
初めての具体例その 3
![Page 20: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/20.jpg)
関係論理へのマッピング
▪ シグニチャ
▫ 有限集合を表す
▫ Subnet、Instance
▪ フィールド
▫ シグニチャ (= 集合) 上の関係を表す
▫ 実体は直積集合の部分集合
▫ subnet ⊆ Instance × Subnet
![Page 21: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/21.jpg)
フィールド = 部分集合
subnet0
instance0
instance1
instance2
subnet1 subnet2
(i0, s0) (i0, s1) (i0, s2)
(i1, s0) (i1, s1) (i1, s2)
(i2, s0) (i2, s1) (i2, s2)
![Page 22: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/22.jpg)
フィールド = 部分集合
subnet0
instance0
instance1
instance2
subnet1 subnet2
(i0, s0) (i0, s1) (i0, s2)
(i1, s0) (i1, s1) (i1, s2)
(i2, s0) (i2, s1) (i2, s2)
![Page 23: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/23.jpg)
フィールド = 部分集合 : 具体例その 1
![Page 24: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/24.jpg)
フィールド = 部分集合
subnet0
instance0
instance1
instance2
subnet1 subnet2
(i0, s0) (i0, s1) (i0, s2)
(i1, s0) (i1, s1) (i1, s2)
(i2, s0) (i2, s1) (i2, s2)
![Page 25: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/25.jpg)
フィールド = 部分集合 : 具体例その 2
![Page 26: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/26.jpg)
フィールド = 部分集合
subnet0
instance0
instance1
instance2
subnet1 subnet2
(i0, s0) (i0, s1) (i0, s2)
(i1, s0) (i1, s1) (i1, s2)
(i2, s0) (i2, s1) (i2, s2)
![Page 27: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/27.jpg)
初めての具体例その 3
![Page 28: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/28.jpg)
セキュリティグループを追加してみる
sig Subnet {}
sig Instance {
subnet : Subnet,
}
run {}
![Page 29: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/29.jpg)
セキュリティグループを追加してみる
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : Subnet,
securityGroup : SecurityGroup,
}
run {}
![Page 30: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/30.jpg)
インスタンスにつきセキュリティグループは常にひとつ?
![Page 31: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/31.jpg)
多重度の表現
▪ 対応する集合の要素の数を指定
▫ one : ちょうど 1 個
▫ lone : 0 個または 1 個
▫ set : 0 個以上
▫ some : 1 個以上
▪ ER 図における 1..* などに相当
![Page 32: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/32.jpg)
関係に多重度を指定する
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : Subnet,
securityGroup : SecurityGroup,
}
run {}
![Page 33: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/33.jpg)
関係に多重度を指定する
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : one Subnet,
securityGroups : some SecurityGroup,
}
run {}
![Page 34: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/34.jpg)
セキュリティグループを複数持つインスタンスが出現
![Page 35: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/35.jpg)
サブネット内には常に
インスタンスが存在するだろうか?
![Page 36: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/36.jpg)
2 種類の検査コマンド
▪ pred
▫ 条件が成り立つ具体例を探索
▫ run コマンドで検査
▪ assert
▫ 条件が成り立たない反例を探索
▫ check コマンドで検査
![Page 37: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/37.jpg)
具体例を探索する
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : one Subnet,
securityGroup : some SecurityGroup,
}
run {}
![Page 38: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/38.jpg)
具体例を探索する
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : one Subnet,
securityGroup : some SecurityGroup,
}
pred subnetShouldNotBeEmpty {
all s : Subnet | some subnet.s
}
run subnetShouldNotBeEmpty
![Page 39: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/39.jpg)
具体例 : すべてのサブネットがインスタンスを持つ
![Page 40: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/40.jpg)
反例を探索する
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : one Subnet,
securityGroup : some SecurityGroup,
}
pred subnetShouldNotBeEmpty {
all s : Subnet | some subnet.s
}
run subnetShouldNotBeEmpty
![Page 41: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/41.jpg)
反例を探索する
sig Subnet {}
sig SecurityGroup {}
sig Instance {
subnet : one Subnet,
securityGroup : some SecurityGroup,
}
assert subnetShouldNotBeEmpty {
all s : Subnet | some subnet.s
}
check subnetShouldNotBeEmpty
![Page 42: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/42.jpg)
反例 : インスタンスを持たないサブネットが存在する
![Page 43: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/43.jpg)
Alloy によるモデル検査の流れ
▪ シグニチャとフィールドでモデルを定義
▪ 検査したい性質を記述
▫ pred + run : 性質を満たす具体例を探す
▫ assert + check : 反例を探す
▪ 結果を見て、必要ならモデルを修正
▫ テスト駆動開発に似た使用感
▫ 繰り返す過程で設計が洗練される
![Page 44: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/44.jpg)
4モデリング・ケーススタディ
システムをモデル化する際頭の中では何が起きるのか?
![Page 45: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/45.jpg)
Alloy によるモデル記述のコツ
▪ 最初から完璧を目指さない
▫ 可視化機能をうまく利用、TDD をイメージ
▫ 行き詰ったら定義の仕方を変えてみる
▫ 関係の方向を逆にするとうまくいったりする
▪ 必要な要素を見極める
▪ パーツごとに分割して考える
▫ システムの中で、分割しやすいラインを考える
![Page 46: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/46.jpg)
サンプル : 単一のパブリックサブネットを持つ VPC
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Scenario1.html
![Page 47: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/47.jpg)
サンプルの構成要素
▪ AWS 上のリソースに関する条件
▫ EC2 インスタンス
▫ VPC、サブネット、インターネットゲートウェイ、
EIP
▫ ルートテーブル
▫ セキュリティグループ
▪ AWS 以外の一般論に関する条件
▫ CIDR、プロトコル、ポート番号など
![Page 48: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/48.jpg)
パーツ 1 : CIDR に関する部分
▪ CIDR ブロック
▫ 含む / 含まれるを関係で定義
▫ 制約を与えて木構造(ループがない)にする
▪ プロトコル
▫ TCP、UDP、ICMP
▪ ポート番号
▫ ICMP のとき、かつそのときに限り空集合
![Page 49: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/49.jpg)
パーツ 1 の正しくない例
![Page 50: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/50.jpg)
パーツ 1 の正しい例
![Page 51: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/51.jpg)
パーツ 2 : EC2 インスタンスに関する部分
▪ EC2 インスタンス
▫ ちょうど 1 個のサブネットに属する
▫ 1 個以上のセキュリティグループを持つ
▪ サブネット、VPC
▫ ちょうど 1 個の CIDR ブロックを持つ
▪ インターネットゲートウェイ
▪ Elastic IP アドレス
![Page 52: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/52.jpg)
パーツ 3 : ルートテーブルに関する部分
▪ ルートテーブル
▫ 0 個以上のルート設定を持つ
▪ ルート
▫ Destination となる CIDR ブロック
▫ Target は以下のいずれか(= 和集合の要素)
■ EC2 インスタンス
■ インターネットゲートウェイ
![Page 53: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/53.jpg)
パーツ 4 : セキュリティグループに関する部分
▪ 構造はルートテーブルと似ている
▪ セキュリティグループ
▫ 0 個以上のイン / アウトバウンドルールを持つ
▪ ルール
▫ プロトコル、ポート番号
▫ Source / Destination
■ CIDR ブロックとセキュリティグループの和集合
![Page 54: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/54.jpg)
仕様から設計を発見したい
![Page 55: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/55.jpg)
具体例を見つけたい仕様を記述する
▪ Web サーバのインスタンスが 1 つ存在
▫ インターネットから HTTPS 接続可能
▫ 管理用のネットワークから SSH 接続可能
▫ その他の場所からは接続不可能
▪ 「接続可能」の条件を定式化
▫ ルーティングが正しく設定されている
▫ セキュリティーグループが解放されている
![Page 56: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/56.jpg)
サンプルと同じ構成を自動で設計!
![Page 57: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/57.jpg)
5まとめ
結局、この 25 分間で我々は何を得たのか?
![Page 58: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/58.jpg)
本日のまとめ
▪ 形式手法で設計を検証できる
▪ ツールは使い方が肝心
▪ インフラ設計に Alloy がおすすめ
![Page 59: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/59.jpg)
AWS での「やっちまった」が
減ることを祈って
Presented by
チェシャ猫 (@y_taka_23)
![Page 60: 形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta](https://reader034.fdocument.pub/reader034/viewer/2022042520/586f715c1a28ab10258b4f03/html5/thumbnails/60.jpg)
CREDITS
Special thanks to all the people who made and released
these awesome resources for free:
▪ Presentation template by SlidesCarnival
▪ Photographs by Unsplash