SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
アマゾンウェブサービスジャパン株式会社
ソリューションアーキテクト
⼤村 幸敬
2017/11/14 JAWS-UG アーキテクチャ専⾨⽀部
CloudFormation
Getting Started with YAML
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Who am I ?
⼤村 幸敬(おおむら ゆきたか)
Amazon Web Services Japan
Solution Architect
好きなサービス: AWS CLI
運⽤の現場をもっと楽にしたい
興味のある領域:
ITインフラ×アジャイル
B
&
E
2
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
今回検討したいこと
• エンジニアが気軽にテンプレートを書きはじめるための
情報を整理する
• ある運⽤を⾏うために適切な
テンプレート設計(分割)の指針を考える
• CFnによる運⽤が適合する
アーキテクチャおよび利⽤シーンを考える
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Agenda
1. CloudFormation YAMLテンプレート作成の基礎
2. CloudFormationによる環境構築の例
1. 100⼈ハンズオン⽤に環境を作る
2. 継続運⽤可能なWeb3階層アーキテクチャを作る
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CloudFormationとは
• BlackBelt(オンラインセミナー)の資料を参照のこと
https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-aws-cloudformation
参考:他のサービスの資料も多数あります→ https://aws.amazon.com/jp/aws-jp-introduction/
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CloudFormation
YAMLテンプレート作成の基礎
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
テンプレートを書く
1. YAMLおさらい
2. エディタによるサポート
3. テンプレートの基本構造
4. テンプレートの作りかた
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
1. YAMLおさらい
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
YAMLおさらい
• オフィシャルドキュメントではJSONも併記されているが
ここでは書きやすさを重視して
徹底的にYAMLを使うことを考える
• YAML書式のポイント
• 配列とハッシュ
• フロースタイルとブロックスタイル
• 型
• 複数⾏の⽂字列
より多くの仕様はあるが、CFnで使うならここで⽰した内容を理解すれば⼗分
YAMLの詳しい情報→ http://magazine.rubyist.net/?0009-YAML
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
配列とハッシュ
配列
ハッシュ
- aaa
- bbb
- ccc
配列のハッシュ
abc: value1
def: value2
ghi: value3
abc:
- aaa
- bbb
- ccc
def:
- eee
- fff
- ggg
ハッシュの配列
- abc: value1
def: value2
- ghi: value3
jkl: value4
[
{"abc": "value1",
"def": "value2" },
{"ghi": "value3",
"jkl": "value4" }
]
• インデントでデータ構造を表す
{ "abc": "value1",
"def": "value2",
"ghi": "value3”}
[ "aaa", "bbb", "ccc"]
{ "abc": [ "aaa", "bbb", "ccc" ],
"def": [ "eee", "fff", "ggg" ]}
※枠外はJSON表記
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
ブロックスタイルとフロースタイル
ブロックスタイル
- aaa
- bbb
- ccc
abc: value1
def: value2
ghi: value3
• 複数⾏表記と1⾏表記
• 通常はブロックスタイルを使う
• 1⾏にまとめたい部分のみフロースタイルがおすすめ
[aaa, bbb, ccc]
{abc: value1, def: value2, ghi: value3
フロースタイル
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
型
• YAMLは次のデータ型を⾃動的に判断する
• 整数 / 浮動⼩数点 / 真偽値 (true, false)
⽇付 / タイムスタンプ
• 上記以外は⽂字列として認識
• ⽂字列を明⽰するにはダブルクォートやシングルクォート
• 型指定の使い⽅
• 書きやすくするには極⼒クォートを使わない
• テンプレートバージョン指定くらい
• JSONからツール変換するとクォートの有無がまちまちなので注意
• オフィシャルドキュメントのサンプルでは
必ずしもクォートが必要でないものにも付いている場合がある
CFnはこれでも問題なし
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
複数⾏の⽂字列の扱い
• ⽂字列にもブロックスタイルがある
• UserDataを書く場合に便利
text1:
hogera
hogehoge
foobar
パイプがないと改⾏が
削除される
text1: |
hogera
hogehoge
foobar
パイプを書くことで
改⾏が保持される
hogera
hogehoge
foobar
hogera hogehoge foobar
※枠外に実際に得られる⽂字列を⽰した
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
2. エディタによるサポート
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
エディタによるサポート
• YAMLは書きやすいがツールによる書式チェックは必要
• 加えてaws cloudformation validate-templateも
• お好きなエディタで
• ハイライト
• フォーマッティング
• ⽂法チェック
• ⾃動補完
• 参考:CloudFormation Designerでは
• JSONでプロパティを書く際に
Ctrl-Spaceで属性をサジェスト可能
例:emacsの場合、以下のような機能を使っています
yaml-mode, fly-check, highlight-indentation, auto-complete
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html
会場では vim、VS Code等を使っていると意⾒あり
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
3. テンプレートの基本構造
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
テンプレートの基本構造(全体)
テンプレートバージョン(固定)
説明 (Description)
AWSリソース (Resource)
出⼒ (Outputs)個々のリソース
※左記テンプレートから作られる環境
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
テンプレートの基本構造(リソース)
リソース論理名
テンプレート内で参照する情報
実際に作られるリソースの名前は
これと異なるもの(物理名)が設定される
(別途指定が可能)
タイプ (Type)
どのAWSリソースを作るか
プロパティ (Properties)
リソースの設定値
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
テンプレートの基本構造(Outputs)
スタックの外へ情報を出すために使う
(Exportについては後ほど説明)
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
テンプレートの基本構造
(Parameter)
パラメータ(Parameter)
スタック作成時に指定可能な変数を定義
個々のパラメータ定義
!Ref 関数を使⽤して参照(後述)
aws cloudformation create-stack
--stack-name yaml-stack-aurora
--template-body file://yaml-aurora.yaml
--capabilities CAPABILITY_IAM
--parameters
ParameterKey=SecStackName,ParameterValue=yaml-stack2-nw
ParameterKey=BaseStackName,ParameterValue=yaml-stack2
ParameterKey=DBPassword,ParameterValue=dbpassword
ParameterKey=DBUser,ParameterValue=dbuser
パラメータ付きでスタックを作るCLIコマンドの例
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
スタック間の情報連携
(Cross Stack Reference)
②別のスタックから参照可能な値が
エクスポートされる
①Exportを使って他のスタックから
参照したい値をエクスポート
例:セキュリティグループID
③ImportValue関数を使って
値を参照する
会場から、NestedStackもあるが、各スタックが独⽴してい
るCrossStackReferenceのほうが運⽤しやすいと意⾒あり
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
組み込み関数
• テンプレートの記述に使える関数
• 全15種
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html
• 記法は 完全名の「Fn::xxx」と短縮形の「!xxx」の2つ
• 短縮形を使う⽅が記述がシンプルになる
• 短縮型呼び出しに短縮形引数を指定できないため
⼀部では完全名のほうがよく使われる
• よく使う関数
• 値を参照する !Ref, !GetAtt
• ⽂字列を加⼯する !Sub
• AZを取得する !GetAZs
• エクスポート値取得 Fn::ImportValue
• Base64エンコード Fn::Base64
会場から、!FindInMap や !If などの条件分岐もよく
使うと意⾒あり。ここではテンプレートを複雑にしな
いという⽅針で関数を紹介しました。テンプレートを
どこまで汎⽤的にするかは多様な考え⽅があります。
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
組み込み関数の使⽤例
!Ref
• テンプレート内の論理名から物理名(ID)を参照する
• 返る値はリソースによって異なる
リソースのリファレンスで確認
!GetAtt
• リソースが持つ属性値を取得する
• 属性値はリソースによって異なる
• リソースのリファレンスで確認
!Sub
• 本来は⽂字列内の変数を指定した値で置き換える関数
• ${xxx}で指定した変数(パラメータ、論理名、属性)の
展開を⾏う⽤途でもよく使われる
!Select
• 配列内の要素を選択する
• 例: !Select [ 1, [ apples, grapes, oranges, mangoes] ] は grapes を返す
!GetAZs
• AZ名を取得する
• 引数がない場合はすべてのAZの配列を返す
会場から、⽂字列⽣成は !Join もよく使うという意⾒あり。
プログラマにはこちらのほうが馴染み深いとのこと。
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
4. テンプレートの作りかた
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
どうやってテンプレートを書くか
• マネジメントコンソールで作った環境からバックポート
• CloudFormerを使⽤して構成済み環境からテンプレートを⽣成→YAMLへ変換
• YAMLへの変換には cfn-flip がオススメ( https://github.com/awslabs/aws-cfn-template-flip )
• 即値を含むため⼿で直さなければいけないところが多い / CloudFormerが未対応リソースもある
• →リファレンスを⾒ることになる
• CLIで出⼒→YAMLへ変換
• 例: aws rds describe-db-instances | ruby -ryaml -rjson -e 'puts YAML.dump(JSON.parse(STDIN.read))'
• →必要な部分だけを抽出するためにリファレンスを⾒ることになる
• サンプルコード&スニペットから使える部分を抽出する
• https://aws.amazon.com/jp/cloudformation/aws-cloudformation-templates/
• awslabs (https://github.com/awslabs ) や ソリューションテンプレート もお
すすめ
• →⾃分⽤に加⼯するためにリファレンスを⾒ることになる
• リファレンスを⾒ながら⼿で書く
• 試⾏錯誤はあるが結局これが⼀番書きやすい
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CFnテンプレート作成のリファレンス
• AWSリソース(まずはここ 作成可能なすべてのリソースの情報)
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
• リソースプロパティ(リソースの中で指定できる特定の情報の集まり)
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-product-property-reference.html
• 組み込み関数
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html
• 疑似パラメータ(テンプレートの中で利⽤可能な定義済み変数)
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html
• 属性(⼀部のリソースにのみ設定可能な更新、削除時の挙動設定)
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-product-attribute-reference.html
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CFnテンプレート作成のリファレンス
• AWSリソース(作成可能なすべてのリソースの情報)
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
• 構⽂ / プロパティ / 戻り値 / 例 が記載されている
構⽂ プロパティ 戻り値
!Ref 論理名 で参照できる値
!GetAtt 論理名.xxx で参照できる値
Propertiesに指定する値の詳細Resource内に記載する内容
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CFnスタックを作る
• テンプレート作成中はスタック作成とRollbackの繰り返し
→C L I ! C L I !
• マネジメントコンソールでもよいが都度パラメータ指定が⾯倒
• とはいえコマンドが⻑いのも⼊⼒が⼤変
• 簡単なヘルパースクリプトを作ることをオススメします
aws cloudformation validate-template --template-body file://yaml-aurora.yaml
aws cloudformation create-stack --stack-name yaml-stack-aurora --template-body file://yaml-aurora.yaml
--capabilities CAPABILITY_IAM --parameters ParameterKey=SecStackName,ParameterValue=yaml-stack2-nw
ParameterKey=BaseStackName,ParameterValue=yaml-stack2 ParameterKey=DBPassword,ParameterValue=dbpassword
ParameterKey=DBUser,ParameterValue=dbuser
aws cloudformation describe-stack-events --stack-name yaml-stack-aurora –query 'reverse(StackEvents[])’
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CFnスタック管理⽤ヘルパースクリプトを作る
• よく使うコマンドを簡単に使えるようにしておく
• 作成 / 更新 / 削除 / 状態確認 / validation
例: cfn-update.sh
#!/bin/sh
mode=$1; shift
stack_name=$1; shift
template=$1; shift
if [ "$mode" != "create" -a "$mode" != "update" ]; then
echo "$0 (create|update) stack-name template-name [param1=val2 param2=val2 ...]”; exit 1
fi
params=$(echo $* | perl -np -e "s/([^= ]+)=([^ ]+)/ParameterKey=¥1,ParameterValue=¥2/g")
if [ "$params" != "" ]; then
params="--parameters ${params}”
fi
cmd="aws cloudformation ${mode}-stack --stack-name ${stack_name} --template-body file://${template} --capabilities CAPABILITY_IAM $params”
echo ${cmd}
eval ${cmd}
使用例
./cfn-validate.sh yaml-eip.yaml
./cfn-update.sh create yaml-stack-r53 yaml-r53.yaml
./cfn-update.sh create yaml-stack-eip yaml-eip.yaml R53StackName=yaml-stack-r53
./cfn-status.sh yaml-stack-eip -v
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
テンプレートを書く(まとめ)
1. YAMLおさらい
2. エディタによるサポート
3. テンプレートの基本構造
4. テンプレートの作りかた
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CloudFormationテンプレートの例
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CloudFormationテンプレートの例
• 100⼈ハンズオン⽤に環境を作る
• 継続運⽤可能なWeb3階層アーキテクチャを作る
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
100⼈ハンズオン⽤に環境を作る
要件
• 100名同時にAWSのハンズオンをしたい
• AWSのマネジメントコンソールに⾃分だけのIDでアクセス
• VPC環境が⾃分専⽤にあらかじめ⽤意される
• VPC上にEC2インスタンス等を構築する
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
100⼈ハンズオン⽤に環境を作る(例)
親アカウント
⼦アカウント
(10個)
us-east-1
ap-northeast-1
…
各リージョンの
EC2のみ操作可能な
IAMユーザ
10のアカウントの
10のRegionに
それぞれ
VPC環境を⽤意
CLIを使ってシェルスクリプトで実装
・Organizationsで⼦アカウントを作成
・⼩アカウントにはAssumeRoleでのみアクセス
・⼦アカウントにStackSet実⾏⽤のRoleを作成
Cloudformation StackSetを使⽤
・各アカウント作成する10のIAMユーザと
IAMポリシーはスクリプトで⾃動⽣成
・全アカウントのus-east-1に対しStackSetで展開
Cloudformation StackSetを使⽤
・VPC作成テンプレートを
全アカウントの全リージョンに対し
StackSetで展開
・OrganizationsはCFn未対応
・StackSet実⾏のため各アカウントに以下のRole作成が必要
- AWSCloudFormationStackSetAdministrationRole
- AWSCloudFormationStackSetExecutionRole
user001〜10を作成 & pw設定
CFn Template内ではLoopを書けないため
10⼈分のyamlを⽣成し各リージョンに設定
EC2のみIAMポリシーのConditionで操作可能
なリソースのリージョンを制限
当時はStackSet内のStack数制限が50であり、3つのStackSet
に分けて構築。
現在は200まで拡張されたので⼀発で構築可能
余談:ハンズオンで作成したVPC上のリソースはCFn管理下で
ないため、別途全環境を操作可能なシェルスクリプトを使って
状態確認&クリーンナップを実施
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
継続運⽤可能なWeb3階層アーキテクチャを作る(例)
BasionAP AP
• 本番環境以外に同様の構成の
開発・ステージング環境を作る
• サービス提供ホスト名とBasion
(踏み台)ホスト名はバックエンド
を変えた場合でも維持する
• APサーバ(アプリケーション)
更新時もDBは変更しない(ステート
レス・ステートフル分離)
• セキュリティ設定(アクセス制御)
は別の専⾨チームが⾏う
• 踏み台ホストには作業データを残す
ためのDataVolume(EBS)をつける
• RDS、DataVolumeは削除の際ス
ナップショットを作成するSecurity Group
ALB
サービス提供公開ホスト名
EIP&公開ホスト名
Public
Subet1
Private
Subet1
Private
Subet2
Public
Subet2
Auto
Scaling
Group
IAM Role & Policy
Hosted
Zone
DataVolume
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
継続運⽤可能なWeb3階層アーキテクチャを作る
• 分割⽅針
• ステートレス / ステートフルは別スタックとする
• 外部インターフェースと内部コンポーネントは別スタックと
する
• ライフサイクルが異なるものは別スタックとする
• 管理主体が異なるものは別スタックとする
• スタック間の連携はCrossStack Referenceを使⽤する
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
継続運⽤可能なWeb3階層アーキテクチャを作る(例)
Basion
AP
ALB
サービス提供公開ホスト名
EIP&公開ホスト名
Public
Subet1
Private
Subet1
Private
Subet2
Public
Subet2
Auto
Scaling
Group
LB⽤
SG
AP⽤
SG
DB⽤
SG
Basion⽤
SG
HostedZone
テンプレート(=スタック)分割例
・CrossStack Reference変数名は スタック名-xxx とし、
複数の環境を構築した場合もコンフリクトしないよう設定
・スタック作成時の依存関係はシェルスクリプトで記載
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
継続運⽤可能なWeb3階層アーキテクチャを作る(例)
Basion
AP
ALB
サービス提供公開ホスト名
EIP&公開ホスト名
Public
Subet1
Private
Subet1
Private
Subet2
Public
Subet2
Auto
Scaling
Group
LB⽤
SG
AP⽤
SG
DB⽤
SG
Basion⽤
SG
HostedZone
考えられる検討事項(参考として)
スタック間の依存関係やスタック作成時に指定するパラメータをどこ
かに記述しなければいけない。シェルスクリプト?
HostedZoneを⼀度消してしまうとレジストラへNSの登録変
更が必要になるので注意。通常消すことはまず無い。
この構成の場合、開発・ステージング・本番それぞれにドメイ
ンを取得することになる。⼀⽅でドメインを1つにする場合は
HostedZoneは1つだけ作成し、それぞれの環境で異なるホス
ト名を使う必要がある。
ベースネットワークスタックを作るのはよくある構成
各システムごとに環境を払い出す場合に使われる。
セキュリティポリシーを統⼀的に管理したい場合や専⾨チームによる統制を⾏う場合はスタックを分ける
⼀⽅で開発および運⽤中の細かな⽳あけに部⾨間の調整が発⽣することの対応は検討が必要。
ホスト名の情報は⼀元管理したほうがよいが、実際はリソースに紐
づく情報である。⼀元管理を優先してレコードセット管理⽤スタッ
クとするか、このようにリソースに紐付けた形とするか。
IAMロールはサーバの役割に強く依存し、変更トリガは開発側
にあるので同じスタックとした。別環境で同じ内容のロールが
作られることになるが、削除の際の依存関係を無くしたいため
この構成としている。⼀⽅でセキュリティ統制上は別スタック
としたほうが管理主体を別にしやすい。
ステートフルなDBとステートレスなAPはライフサイ
クルが異なりスタックを分ける⽅がよい。アプリケー
ションのデプロイ⼿法がインプレースアップデートで
あればこのスタック内の設定変更でよいが、
BlueGreenデプロイを⾏いALBも変更するような場合
はスタック間の参照に不整合がでないよう対応が必要
DBのログイン情報をスタック作成時にどのように安全に渡
すか?別途SSM Parameter Storeにデータを⼊れ、CLIから
渡す⽅法がある。CFnのParametersで⾒えてしまうことに
ついては「NoEcho」プロパティを設定することでCLIやマ
ネジメントコンソールから⾒えなくなる。
作成したリソースをどこまで使いまわすか?IAMRoleや
SecurityGroupは使い回しも可能だが、環境(システム)を跨いで利
⽤すると想定外の依存関係が発⽣して削除で困ることもある。
EC2にDeletionPolicyを設定できないため、削除時に
⾃動的にスナップショットは取得できない。EBSの
データを保全する場合は別途データディスクをつけ、
DeletionPolicyの設定が必要。
RDSにDeletionPolicyの設定は必須。snapshotかretain。
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
まとめ
1. CloudFormation YAMLテンプレート作成の基礎
2. CloudFormationによる環境構築の例
1. 100⼈ハンズオン⽤に環境を作る
2. 継続運⽤可能なWeb3階層アーキテクチャを作る
ここで紹介したのは検討のためのサンプルです。
みなさんの環境、体制、ポリシー、アーキテクチャによって最適な⽅
法は変わります。運⽤におけるツールはCloudFormationだけではな
く、またCloudFormationの使い⽅に唯⼀のベストな解はありません。
まずはご⾃⾝でお試しいただき、よりよいCloudFormationの活⽤ノ
ウハウを検討してみてください。
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Thank You!

Contenu connexe

Tendances

Tendances (20)

20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
 
20200526 AWS Black Belt Online Seminar AWS X-Ray
20200526 AWS Black Belt Online Seminar AWS X-Ray20200526 AWS Black Belt Online Seminar AWS X-Ray
20200526 AWS Black Belt Online Seminar AWS X-Ray
 
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMailAWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
 
AWS Black Belt Online Seminar 2016 Amazon ElastiCache
AWS Black Belt Online Seminar 2016 Amazon ElastiCacheAWS Black Belt Online Seminar 2016 Amazon ElastiCache
AWS Black Belt Online Seminar 2016 Amazon ElastiCache
 
20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 ...
20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 ...20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 ...
20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 ...
 
AWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct Connect
 
週末趣味のAWS Transit Gatewayでの経路制御
週末趣味のAWS Transit Gatewayでの経路制御週末趣味のAWS Transit Gatewayでの経路制御
週末趣味のAWS Transit Gatewayでの経路制御
 
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
 
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
 
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
 
20200811 AWS Black Belt Online Seminar CloudEndure
20200811 AWS Black Belt Online Seminar CloudEndure20200811 AWS Black Belt Online Seminar CloudEndure
20200811 AWS Black Belt Online Seminar CloudEndure
 
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage GatewayAWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
 
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic BeanstalkAWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
 
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
 
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
 

Similaire à CloudFormation Getting Started with YAML

2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76
2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76 2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76
2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76
Yasuhiro Horiuchi
 

Similaire à CloudFormation Getting Started with YAML (20)

[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
 
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
 
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
 
【JAWS-UG AI/ML支部 第14回勉強会】Amazon EC2 Trn1 GA ! ~ AWSが提供するML向けインスタンスの豊富な品揃えと 専...
【JAWS-UG AI/ML支部 第14回勉強会】Amazon EC2 Trn1 GA !  ~ AWSが提供するML向けインスタンスの豊富な品揃えと 専...【JAWS-UG AI/ML支部 第14回勉強会】Amazon EC2 Trn1 GA !  ~ AWSが提供するML向けインスタンスの豊富な品揃えと 専...
【JAWS-UG AI/ML支部 第14回勉強会】Amazon EC2 Trn1 GA ! ~ AWSが提供するML向けインスタンスの豊富な品揃えと 専...
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
 
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
 
2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76
2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76 2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76
2013年 AWSサービスアップデート 一気ふりかえり at BP Study #76
 
成長していくサービスとAWS
成長していくサービスとAWS成長していくサービスとAWS
成長していくサービスとAWS
 
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
 
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
 
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみましたJAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
 
Modernizing Big Data Workload Using Amazon EMR & AWS Glue
Modernizing Big Data Workload Using Amazon EMR & AWS GlueModernizing Big Data Workload Using Amazon EMR & AWS Glue
Modernizing Big Data Workload Using Amazon EMR & AWS Glue
 
コスト削減から考えるAWSの効果的な利用方法
コスト削減から考えるAWSの効果的な利用方法コスト削減から考えるAWSの効果的な利用方法
コスト削減から考えるAWSの効果的な利用方法
 
SAP on AWS 実際の導入例と導入効果
SAP on AWS 実際の導入例と導入効果SAP on AWS 実際の導入例と導入効果
SAP on AWS 実際の導入例と導入効果
 
aws blackbelt amazon elasticsearch service
aws blackbelt amazon elasticsearch service aws blackbelt amazon elasticsearch service
aws blackbelt amazon elasticsearch service
 
Xamarinとmvvm crossとf#と
Xamarinとmvvm crossとf#とXamarinとmvvm crossとf#と
Xamarinとmvvm crossとf#と
 
はじめての SAP on AWS
はじめての SAP on AWSはじめての SAP on AWS
はじめての SAP on AWS
 
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
 
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
 

Plus de Yukitaka Ohmura

20140419【qpstudy】OSとNW設計の勘所
20140419【qpstudy】OSとNW設計の勘所20140419【qpstudy】OSとNW設計の勘所
20140419【qpstudy】OSとNW設計の勘所
Yukitaka Ohmura
 
20110722【odstudy01】SIerでやってるDevOps
20110722【odstudy01】SIerでやってるDevOps20110722【odstudy01】SIerでやってるDevOps
20110722【odstudy01】SIerでやってるDevOps
Yukitaka Ohmura
 
もし新人のインフラエンジニアがKPTで振り返りをしたら
もし新人のインフラエンジニアがKPTで振り返りをしたらもし新人のインフラエンジニアがKPTで振り返りをしたら
もし新人のインフラエンジニアがKPTで振り返りをしたら
Yukitaka Ohmura
 
20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ
20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ
20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ
Yukitaka Ohmura
 

Plus de Yukitaka Ohmura (11)

20190223 JAWSDAYS 2019 AWS の Management Tools を使ったハイブリッドアーキテクチャ
20190223 JAWSDAYS 2019 AWS の Management Tools を使ったハイブリッドアーキテクチャ20190223 JAWSDAYS 2019 AWS の Management Tools を使ったハイブリッドアーキテクチャ
20190223 JAWSDAYS 2019 AWS の Management Tools を使ったハイブリッドアーキテクチャ
 
JAWS-UG アーキテクチャ専門支部 re:Invent Management Tools ダイジェスト
JAWS-UG アーキテクチャ専門支部 re:Invent  Management Tools ダイジェストJAWS-UG アーキテクチャ専門支部 re:Invent  Management Tools ダイジェスト
JAWS-UG アーキテクチャ専門支部 re:Invent Management Tools ダイジェスト
 
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介
(AWS DevOps祭り 2018) AWS Management Toolsサービスアプデートのご紹介
 
20180310 jawsdays SA LT いまCloudFormationで知るべき10のこと
20180310 jawsdays SA LT いまCloudFormationで知るべき10のこと20180310 jawsdays SA LT いまCloudFormationで知るべき10のこと
20180310 jawsdays SA LT いまCloudFormationで知るべき10のこと
 
20160720 aws development-tools-and_hybrid_cdp
20160720 aws development-tools-and_hybrid_cdp20160720 aws development-tools-and_hybrid_cdp
20160720 aws development-tools-and_hybrid_cdp
 
20160423【qpstudy201604】グループディスカッション
20160423【qpstudy201604】グループディスカッション20160423【qpstudy201604】グループディスカッション
20160423【qpstudy201604】グループディスカッション
 
20140419【qpstudy】OSとNW設計の勘所
20140419【qpstudy】OSとNW設計の勘所20140419【qpstudy】OSとNW設計の勘所
20140419【qpstudy】OSとNW設計の勘所
 
20130413 qpstudy Chef邪道編
20130413 qpstudy Chef邪道編20130413 qpstudy Chef邪道編
20130413 qpstudy Chef邪道編
 
20110722【odstudy01】SIerでやってるDevOps
20110722【odstudy01】SIerでやってるDevOps20110722【odstudy01】SIerでやってるDevOps
20110722【odstudy01】SIerでやってるDevOps
 
もし新人のインフラエンジニアがKPTで振り返りをしたら
もし新人のインフラエンジニアがKPTで振り返りをしたらもし新人のインフラエンジニアがKPTで振り返りをしたら
もし新人のインフラエンジニアがKPTで振り返りをしたら
 
20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ
20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ
20100520 【qpstudy01】 チームでトライ!インフラ構築のススメ
 

Dernier

Dernier (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

CloudFormation Getting Started with YAML

  • 1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト ⼤村 幸敬 2017/11/14 JAWS-UG アーキテクチャ専⾨⽀部 CloudFormation Getting Started with YAML
  • 2. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Who am I ? ⼤村 幸敬(おおむら ゆきたか) Amazon Web Services Japan Solution Architect 好きなサービス: AWS CLI 運⽤の現場をもっと楽にしたい 興味のある領域: ITインフラ×アジャイル B & E 2
  • 3. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 今回検討したいこと • エンジニアが気軽にテンプレートを書きはじめるための 情報を整理する • ある運⽤を⾏うために適切な テンプレート設計(分割)の指針を考える • CFnによる運⽤が適合する アーキテクチャおよび利⽤シーンを考える
  • 4. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Agenda 1. CloudFormation YAMLテンプレート作成の基礎 2. CloudFormationによる環境構築の例 1. 100⼈ハンズオン⽤に環境を作る 2. 継続運⽤可能なWeb3階層アーキテクチャを作る
  • 5. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CloudFormationとは • BlackBelt(オンラインセミナー)の資料を参照のこと https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-aws-cloudformation 参考:他のサービスの資料も多数あります→ https://aws.amazon.com/jp/aws-jp-introduction/
  • 6. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CloudFormation YAMLテンプレート作成の基礎
  • 7. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. テンプレートを書く 1. YAMLおさらい 2. エディタによるサポート 3. テンプレートの基本構造 4. テンプレートの作りかた
  • 8. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 1. YAMLおさらい
  • 9. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. YAMLおさらい • オフィシャルドキュメントではJSONも併記されているが ここでは書きやすさを重視して 徹底的にYAMLを使うことを考える • YAML書式のポイント • 配列とハッシュ • フロースタイルとブロックスタイル • 型 • 複数⾏の⽂字列 より多くの仕様はあるが、CFnで使うならここで⽰した内容を理解すれば⼗分 YAMLの詳しい情報→ http://magazine.rubyist.net/?0009-YAML
  • 10. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 配列とハッシュ 配列 ハッシュ - aaa - bbb - ccc 配列のハッシュ abc: value1 def: value2 ghi: value3 abc: - aaa - bbb - ccc def: - eee - fff - ggg ハッシュの配列 - abc: value1 def: value2 - ghi: value3 jkl: value4 [ {"abc": "value1", "def": "value2" }, {"ghi": "value3", "jkl": "value4" } ] • インデントでデータ構造を表す { "abc": "value1", "def": "value2", "ghi": "value3”} [ "aaa", "bbb", "ccc"] { "abc": [ "aaa", "bbb", "ccc" ], "def": [ "eee", "fff", "ggg" ]} ※枠外はJSON表記
  • 11. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. ブロックスタイルとフロースタイル ブロックスタイル - aaa - bbb - ccc abc: value1 def: value2 ghi: value3 • 複数⾏表記と1⾏表記 • 通常はブロックスタイルを使う • 1⾏にまとめたい部分のみフロースタイルがおすすめ [aaa, bbb, ccc] {abc: value1, def: value2, ghi: value3 フロースタイル
  • 12. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 型 • YAMLは次のデータ型を⾃動的に判断する • 整数 / 浮動⼩数点 / 真偽値 (true, false) ⽇付 / タイムスタンプ • 上記以外は⽂字列として認識 • ⽂字列を明⽰するにはダブルクォートやシングルクォート • 型指定の使い⽅ • 書きやすくするには極⼒クォートを使わない • テンプレートバージョン指定くらい • JSONからツール変換するとクォートの有無がまちまちなので注意 • オフィシャルドキュメントのサンプルでは 必ずしもクォートが必要でないものにも付いている場合がある CFnはこれでも問題なし
  • 13. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 複数⾏の⽂字列の扱い • ⽂字列にもブロックスタイルがある • UserDataを書く場合に便利 text1: hogera hogehoge foobar パイプがないと改⾏が 削除される text1: | hogera hogehoge foobar パイプを書くことで 改⾏が保持される hogera hogehoge foobar hogera hogehoge foobar ※枠外に実際に得られる⽂字列を⽰した
  • 14. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 2. エディタによるサポート
  • 15. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. エディタによるサポート • YAMLは書きやすいがツールによる書式チェックは必要 • 加えてaws cloudformation validate-templateも • お好きなエディタで • ハイライト • フォーマッティング • ⽂法チェック • ⾃動補完 • 参考:CloudFormation Designerでは • JSONでプロパティを書く際に Ctrl-Spaceで属性をサジェスト可能 例:emacsの場合、以下のような機能を使っています yaml-mode, fly-check, highlight-indentation, auto-complete http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html 会場では vim、VS Code等を使っていると意⾒あり
  • 16. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 3. テンプレートの基本構造
  • 17. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. テンプレートの基本構造(全体) テンプレートバージョン(固定) 説明 (Description) AWSリソース (Resource) 出⼒ (Outputs)個々のリソース ※左記テンプレートから作られる環境
  • 18. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. テンプレートの基本構造(リソース) リソース論理名 テンプレート内で参照する情報 実際に作られるリソースの名前は これと異なるもの(物理名)が設定される (別途指定が可能) タイプ (Type) どのAWSリソースを作るか プロパティ (Properties) リソースの設定値
  • 19. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. テンプレートの基本構造(Outputs) スタックの外へ情報を出すために使う (Exportについては後ほど説明)
  • 20. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. テンプレートの基本構造 (Parameter) パラメータ(Parameter) スタック作成時に指定可能な変数を定義 個々のパラメータ定義 !Ref 関数を使⽤して参照(後述) aws cloudformation create-stack --stack-name yaml-stack-aurora --template-body file://yaml-aurora.yaml --capabilities CAPABILITY_IAM --parameters ParameterKey=SecStackName,ParameterValue=yaml-stack2-nw ParameterKey=BaseStackName,ParameterValue=yaml-stack2 ParameterKey=DBPassword,ParameterValue=dbpassword ParameterKey=DBUser,ParameterValue=dbuser パラメータ付きでスタックを作るCLIコマンドの例
  • 21. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. スタック間の情報連携 (Cross Stack Reference) ②別のスタックから参照可能な値が エクスポートされる ①Exportを使って他のスタックから 参照したい値をエクスポート 例:セキュリティグループID ③ImportValue関数を使って 値を参照する 会場から、NestedStackもあるが、各スタックが独⽴してい るCrossStackReferenceのほうが運⽤しやすいと意⾒あり
  • 22. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 組み込み関数 • テンプレートの記述に使える関数 • 全15種 http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html • 記法は 完全名の「Fn::xxx」と短縮形の「!xxx」の2つ • 短縮形を使う⽅が記述がシンプルになる • 短縮型呼び出しに短縮形引数を指定できないため ⼀部では完全名のほうがよく使われる • よく使う関数 • 値を参照する !Ref, !GetAtt • ⽂字列を加⼯する !Sub • AZを取得する !GetAZs • エクスポート値取得 Fn::ImportValue • Base64エンコード Fn::Base64 会場から、!FindInMap や !If などの条件分岐もよく 使うと意⾒あり。ここではテンプレートを複雑にしな いという⽅針で関数を紹介しました。テンプレートを どこまで汎⽤的にするかは多様な考え⽅があります。
  • 23. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 組み込み関数の使⽤例 !Ref • テンプレート内の論理名から物理名(ID)を参照する • 返る値はリソースによって異なる リソースのリファレンスで確認 !GetAtt • リソースが持つ属性値を取得する • 属性値はリソースによって異なる • リソースのリファレンスで確認 !Sub • 本来は⽂字列内の変数を指定した値で置き換える関数 • ${xxx}で指定した変数(パラメータ、論理名、属性)の 展開を⾏う⽤途でもよく使われる !Select • 配列内の要素を選択する • 例: !Select [ 1, [ apples, grapes, oranges, mangoes] ] は grapes を返す !GetAZs • AZ名を取得する • 引数がない場合はすべてのAZの配列を返す 会場から、⽂字列⽣成は !Join もよく使うという意⾒あり。 プログラマにはこちらのほうが馴染み深いとのこと。
  • 24. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 4. テンプレートの作りかた
  • 25. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. どうやってテンプレートを書くか • マネジメントコンソールで作った環境からバックポート • CloudFormerを使⽤して構成済み環境からテンプレートを⽣成→YAMLへ変換 • YAMLへの変換には cfn-flip がオススメ( https://github.com/awslabs/aws-cfn-template-flip ) • 即値を含むため⼿で直さなければいけないところが多い / CloudFormerが未対応リソースもある • →リファレンスを⾒ることになる • CLIで出⼒→YAMLへ変換 • 例: aws rds describe-db-instances | ruby -ryaml -rjson -e 'puts YAML.dump(JSON.parse(STDIN.read))' • →必要な部分だけを抽出するためにリファレンスを⾒ることになる • サンプルコード&スニペットから使える部分を抽出する • https://aws.amazon.com/jp/cloudformation/aws-cloudformation-templates/ • awslabs (https://github.com/awslabs ) や ソリューションテンプレート もお すすめ • →⾃分⽤に加⼯するためにリファレンスを⾒ることになる • リファレンスを⾒ながら⼿で書く • 試⾏錯誤はあるが結局これが⼀番書きやすい
  • 26. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CFnテンプレート作成のリファレンス • AWSリソース(まずはここ 作成可能なすべてのリソースの情報) http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html • リソースプロパティ(リソースの中で指定できる特定の情報の集まり) http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-product-property-reference.html • 組み込み関数 http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html • 疑似パラメータ(テンプレートの中で利⽤可能な定義済み変数) http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html • 属性(⼀部のリソースにのみ設定可能な更新、削除時の挙動設定) http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-product-attribute-reference.html
  • 27. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CFnテンプレート作成のリファレンス • AWSリソース(作成可能なすべてのリソースの情報) http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html • 構⽂ / プロパティ / 戻り値 / 例 が記載されている 構⽂ プロパティ 戻り値 !Ref 論理名 で参照できる値 !GetAtt 論理名.xxx で参照できる値 Propertiesに指定する値の詳細Resource内に記載する内容
  • 28. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CFnスタックを作る • テンプレート作成中はスタック作成とRollbackの繰り返し →C L I ! C L I ! • マネジメントコンソールでもよいが都度パラメータ指定が⾯倒 • とはいえコマンドが⻑いのも⼊⼒が⼤変 • 簡単なヘルパースクリプトを作ることをオススメします aws cloudformation validate-template --template-body file://yaml-aurora.yaml aws cloudformation create-stack --stack-name yaml-stack-aurora --template-body file://yaml-aurora.yaml --capabilities CAPABILITY_IAM --parameters ParameterKey=SecStackName,ParameterValue=yaml-stack2-nw ParameterKey=BaseStackName,ParameterValue=yaml-stack2 ParameterKey=DBPassword,ParameterValue=dbpassword ParameterKey=DBUser,ParameterValue=dbuser aws cloudformation describe-stack-events --stack-name yaml-stack-aurora –query 'reverse(StackEvents[])’
  • 29. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CFnスタック管理⽤ヘルパースクリプトを作る • よく使うコマンドを簡単に使えるようにしておく • 作成 / 更新 / 削除 / 状態確認 / validation 例: cfn-update.sh #!/bin/sh mode=$1; shift stack_name=$1; shift template=$1; shift if [ "$mode" != "create" -a "$mode" != "update" ]; then echo "$0 (create|update) stack-name template-name [param1=val2 param2=val2 ...]”; exit 1 fi params=$(echo $* | perl -np -e "s/([^= ]+)=([^ ]+)/ParameterKey=¥1,ParameterValue=¥2/g") if [ "$params" != "" ]; then params="--parameters ${params}” fi cmd="aws cloudformation ${mode}-stack --stack-name ${stack_name} --template-body file://${template} --capabilities CAPABILITY_IAM $params” echo ${cmd} eval ${cmd} 使用例 ./cfn-validate.sh yaml-eip.yaml ./cfn-update.sh create yaml-stack-r53 yaml-r53.yaml ./cfn-update.sh create yaml-stack-eip yaml-eip.yaml R53StackName=yaml-stack-r53 ./cfn-status.sh yaml-stack-eip -v
  • 30. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. テンプレートを書く(まとめ) 1. YAMLおさらい 2. エディタによるサポート 3. テンプレートの基本構造 4. テンプレートの作りかた
  • 31. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CloudFormationテンプレートの例
  • 32. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CloudFormationテンプレートの例 • 100⼈ハンズオン⽤に環境を作る • 継続運⽤可能なWeb3階層アーキテクチャを作る
  • 33. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 100⼈ハンズオン⽤に環境を作る 要件 • 100名同時にAWSのハンズオンをしたい • AWSのマネジメントコンソールに⾃分だけのIDでアクセス • VPC環境が⾃分専⽤にあらかじめ⽤意される • VPC上にEC2インスタンス等を構築する
  • 34. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 100⼈ハンズオン⽤に環境を作る(例) 親アカウント ⼦アカウント (10個) us-east-1 ap-northeast-1 … 各リージョンの EC2のみ操作可能な IAMユーザ 10のアカウントの 10のRegionに それぞれ VPC環境を⽤意 CLIを使ってシェルスクリプトで実装 ・Organizationsで⼦アカウントを作成 ・⼩アカウントにはAssumeRoleでのみアクセス ・⼦アカウントにStackSet実⾏⽤のRoleを作成 Cloudformation StackSetを使⽤ ・各アカウント作成する10のIAMユーザと IAMポリシーはスクリプトで⾃動⽣成 ・全アカウントのus-east-1に対しStackSetで展開 Cloudformation StackSetを使⽤ ・VPC作成テンプレートを 全アカウントの全リージョンに対し StackSetで展開 ・OrganizationsはCFn未対応 ・StackSet実⾏のため各アカウントに以下のRole作成が必要 - AWSCloudFormationStackSetAdministrationRole - AWSCloudFormationStackSetExecutionRole user001〜10を作成 & pw設定 CFn Template内ではLoopを書けないため 10⼈分のyamlを⽣成し各リージョンに設定 EC2のみIAMポリシーのConditionで操作可能 なリソースのリージョンを制限 当時はStackSet内のStack数制限が50であり、3つのStackSet に分けて構築。 現在は200まで拡張されたので⼀発で構築可能 余談:ハンズオンで作成したVPC上のリソースはCFn管理下で ないため、別途全環境を操作可能なシェルスクリプトを使って 状態確認&クリーンナップを実施
  • 35. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 継続運⽤可能なWeb3階層アーキテクチャを作る(例) BasionAP AP • 本番環境以外に同様の構成の 開発・ステージング環境を作る • サービス提供ホスト名とBasion (踏み台)ホスト名はバックエンド を変えた場合でも維持する • APサーバ(アプリケーション) 更新時もDBは変更しない(ステート レス・ステートフル分離) • セキュリティ設定(アクセス制御) は別の専⾨チームが⾏う • 踏み台ホストには作業データを残す ためのDataVolume(EBS)をつける • RDS、DataVolumeは削除の際ス ナップショットを作成するSecurity Group ALB サービス提供公開ホスト名 EIP&公開ホスト名 Public Subet1 Private Subet1 Private Subet2 Public Subet2 Auto Scaling Group IAM Role & Policy Hosted Zone DataVolume
  • 36. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 継続運⽤可能なWeb3階層アーキテクチャを作る • 分割⽅針 • ステートレス / ステートフルは別スタックとする • 外部インターフェースと内部コンポーネントは別スタックと する • ライフサイクルが異なるものは別スタックとする • 管理主体が異なるものは別スタックとする • スタック間の連携はCrossStack Referenceを使⽤する
  • 37. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 継続運⽤可能なWeb3階層アーキテクチャを作る(例) Basion AP ALB サービス提供公開ホスト名 EIP&公開ホスト名 Public Subet1 Private Subet1 Private Subet2 Public Subet2 Auto Scaling Group LB⽤ SG AP⽤ SG DB⽤ SG Basion⽤ SG HostedZone テンプレート(=スタック)分割例 ・CrossStack Reference変数名は スタック名-xxx とし、 複数の環境を構築した場合もコンフリクトしないよう設定 ・スタック作成時の依存関係はシェルスクリプトで記載
  • 38. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 継続運⽤可能なWeb3階層アーキテクチャを作る(例) Basion AP ALB サービス提供公開ホスト名 EIP&公開ホスト名 Public Subet1 Private Subet1 Private Subet2 Public Subet2 Auto Scaling Group LB⽤ SG AP⽤ SG DB⽤ SG Basion⽤ SG HostedZone 考えられる検討事項(参考として) スタック間の依存関係やスタック作成時に指定するパラメータをどこ かに記述しなければいけない。シェルスクリプト? HostedZoneを⼀度消してしまうとレジストラへNSの登録変 更が必要になるので注意。通常消すことはまず無い。 この構成の場合、開発・ステージング・本番それぞれにドメイ ンを取得することになる。⼀⽅でドメインを1つにする場合は HostedZoneは1つだけ作成し、それぞれの環境で異なるホス ト名を使う必要がある。 ベースネットワークスタックを作るのはよくある構成 各システムごとに環境を払い出す場合に使われる。 セキュリティポリシーを統⼀的に管理したい場合や専⾨チームによる統制を⾏う場合はスタックを分ける ⼀⽅で開発および運⽤中の細かな⽳あけに部⾨間の調整が発⽣することの対応は検討が必要。 ホスト名の情報は⼀元管理したほうがよいが、実際はリソースに紐 づく情報である。⼀元管理を優先してレコードセット管理⽤スタッ クとするか、このようにリソースに紐付けた形とするか。 IAMロールはサーバの役割に強く依存し、変更トリガは開発側 にあるので同じスタックとした。別環境で同じ内容のロールが 作られることになるが、削除の際の依存関係を無くしたいため この構成としている。⼀⽅でセキュリティ統制上は別スタック としたほうが管理主体を別にしやすい。 ステートフルなDBとステートレスなAPはライフサイ クルが異なりスタックを分ける⽅がよい。アプリケー ションのデプロイ⼿法がインプレースアップデートで あればこのスタック内の設定変更でよいが、 BlueGreenデプロイを⾏いALBも変更するような場合 はスタック間の参照に不整合がでないよう対応が必要 DBのログイン情報をスタック作成時にどのように安全に渡 すか?別途SSM Parameter Storeにデータを⼊れ、CLIから 渡す⽅法がある。CFnのParametersで⾒えてしまうことに ついては「NoEcho」プロパティを設定することでCLIやマ ネジメントコンソールから⾒えなくなる。 作成したリソースをどこまで使いまわすか?IAMRoleや SecurityGroupは使い回しも可能だが、環境(システム)を跨いで利 ⽤すると想定外の依存関係が発⽣して削除で困ることもある。 EC2にDeletionPolicyを設定できないため、削除時に ⾃動的にスナップショットは取得できない。EBSの データを保全する場合は別途データディスクをつけ、 DeletionPolicyの設定が必要。 RDSにDeletionPolicyの設定は必須。snapshotかretain。
  • 39. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. まとめ 1. CloudFormation YAMLテンプレート作成の基礎 2. CloudFormationによる環境構築の例 1. 100⼈ハンズオン⽤に環境を作る 2. 継続運⽤可能なWeb3階層アーキテクチャを作る ここで紹介したのは検討のためのサンプルです。 みなさんの環境、体制、ポリシー、アーキテクチャによって最適な⽅ 法は変わります。運⽤におけるツールはCloudFormationだけではな く、またCloudFormationの使い⽅に唯⼀のベストな解はありません。 まずはご⾃⾝でお試しいただき、よりよいCloudFormationの活⽤ノ ウハウを検討してみてください。
  • 40. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Thank You!