Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraform Tips

Takaaki FURUKAWA
August 05, 2015
8.4k

Terraform Tips

Terraform Tips #hashi_wantedly

Takaaki FURUKAWA

August 05, 2015
Tweet

Transcript

  1. 自己紹介 1985 年 福島生まれ 2010 年 新卒入社 2012 年 Chef

    を始める 2014 年 Terraform を始める サー バー のプロビジョニングをひたすらやりまくる仕事。
  2. r e s o u r c e " d

    i g i t a l o c e a n _ d r o p l e t " " w e b " { n a m e = " t f - w e b " s i z e = " 5 1 2 m b " i m a g e = " c e n t o s - 5 - 8 - x 3 2 " r e g i o n = " s f o 1 " } r e s o u r c e " d n s i m p l e _ r e c o r d " " h e l l o " { d o m a i n = " e x a m p l e . c o m " n a m e = " t e s t " v a l u e = " $ { d i g i t a l o c e a n _ d r o p l e t . w e b . i p v 4 _ a d d r e s s } " t y p e = " A " }
  3. $ t e r r a f o r m

    p l a n $ t e r r a f o r m a p p l y $ t e r r a f o r m s h o w $ t e r r a f o r m d e s t r o y
  4. Terraform を導入した動機 社内に、DNS 設定、VM 作成、 バランサ設定、 モニタリング設定の内製 GUI ツー ルがそれぞれ存在。

    GUI をぽちぽち操作するの辛い。 サー バ内部の設定は Chef でコー ド管理できていたが、 サー バ外部の設 定のコー ド管理が課題。
  5. Module とは p r o v i d e r

    やr e s o u r c e をまとめて抽象化するもの。 m o d u l e " h o g e " { s o u r c e = " g i t h u b . c o m / t e r r a f o r m - c o m m u n i t y - m o d u l e s / t f _ a w s _ a s g " l c _ n a m e = " h o g e " . . . }
  6. 例えば outputs.tf o u t p u t " i

    p v 4 _ a d d r e s s " { v a l u e = " $ { o p e n s t a c k _ c o m p u t e _ i n s t a n c e _ v 2 . d e f a u l t . a c c e s s _ i p _ v 4 } " } test.tf m o d u l e " o p e n s t a c k " { s o u r c e = " . / m o d u l e / o p e n s t a c k " v m _ n a m e = " h o g e " . . . } r e s o u r c e " t e m p l a t e _ f i l e " " h o g e " { f i l e n a m e = " s e r v e r s p e c . t p l " v a r s { t a r g e t = " $ { m o d u l e . o p e n s t a c k . i p v 4 _ a d d r e s s } " } }
  7. Terraform 実行時 - m o d u l e -

    d e p t h = 1 オプションをつける module の中身の情報を出力することができる。
  8. $ t e r r a f o r m

    p l a n R e f r e s h i n g T e r r a f o r m s t a t e p r i o r t o p l a n . . . T h e T e r r a f o r m e x e c u t i o n p l a n h a s b e e n g e n e r a t e d a n d i s s h o w n b e l o w . R e s o u r c e s a r e s h o w n i n a l p h a b e t i c a l o r d e r f o r q u i c k s c a n n i n g . G r e e n r e s o u r c e s w i l l b e c r e a t e d ( o r d e s t r o y e d a n d t h e n c r e a t e d i f a n e x i s t i n g r e s o u r c e e x i s t s ) , y e l l o w r e s o u r c e s a r e b e i n g c h a n g e d i n - p l a c e , a n d r e d r e s o u r c e s w i l l b e d e s t r o y e d . N o t e : Y o u d i d n ' t s p e c i f y a n " - o u t " p a r a m e t e r t o s a v e t h i s p l a n , s o w h e n " a p p l y " i s c a l l e d , T e r r a f o r m c a n ' t g u a r a n t e e t h i s i s w h a t w i l l e x e c u t e . + m o d u l e . h o g e 2 r e s o u r c e ( s ) P l a n : 2 t o a d d , 0 t o c h a n g e , 0 t o d e s t r o y .
  9. $ t e r r a f o r m

    p l a n - m o d u l e - d e p t h = 1 R e f r e s h i n g T e r r a f o r m s t a t e p r i o r t o p l a n . . . T h e T e r r a f o r m e x e c u t i o n p l a n h a s b e e n g e n e r a t e d a n d i s s h o w n b e l o w . R e s o u r c e s a r e s h o w n i n a l p h a b e t i c a l o r d e r f o r q u i c k s c a n n i n g . G r e e n r e s o u r c e s w i l l b e c r e a t e d ( o r d e s t r o y e d a n d t h e n c r e a t e d i f a n e x i s t i n g r e s o u r c e e x i s t s ) , y e l l o w r e s o u r c e s a r e b e i n g c h a n g e d i n - p l a c e , a n d r e d r e s o u r c e s w i l l b e d e s t r o y e d . N o t e : Y o u d i d n ' t s p e c i f y a n " - o u t " p a r a m e t e r t o s a v e t h i s p l a n , s o w h e n " a p p l y " i s c a l l e d , T e r r a f o r m c a n ' t g u a r a n t e e t h i s i s w h a t w i l l e x e c u t e . + m o d u l e . h o g e . c o m p a s s _ r d n s . d e f a u l t . 0 d n s _ t y p e : " " = > " < c o m p u t e d > " e n v i r o n m e n t : " " = > " d e v e l o p m e n t " l o c a t i o n : " " = > " l o c a t i o n - 1 " n a m e : " " = > " h o g e - 1 "
  10. T F _ L O G and T F _

    L O G _ P A T H terraform コマンド実行時の詳細なログを出力させることができる。 T F _ L O G : 実行時の Debug Log の on/off 切り替え T F _ L O G _ P A T H : Debug Log の出力先
  11. $ e x p o r t T F _

    L O G = 1 $ t e r r a f o r m p l a n 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ I N F O ] T e r r a f o r m v e r s i o n : 0 . 6 . 2 d e v 3 8 c e 9 5 0 b 4 c d a 0 b f 5 3 8 a 2 b 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 D e t e c t e d h o m e d i r e c t o r y f r o m e n v v a r : / U s e r s / t a k a a k i . f u r u 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : a t l a s = / U s e r s / t a k a a k i . f u r u k a w 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : a w s = / U s e r s / t a k a a k i . f u r u k a w a / 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : a z u r e = / U s e r s / t a k a a k i . f u r u k a w 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : c l o u d f l a r e = / U s e r s / t a k a a k i . f u 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : c l o u d s t a c k = / U s e r s / t a k a a k i . f u 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : c o n s u l = / U s e r s / t a k a a k i . f u r u k a 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : d i g i t a l o c e a n = / U s e r s / t a k a a k i . . . . ( 省略)
  12. $ e x p o r t T F _

    L O G _ P A T H = . / d e b u g . l o g $ t e r r a f o r m p l a n R e f r e s h i n g T e r r a f o r m s t a t e p r i o r t o p l a n . . . T h e T e r r a f o r m e x e c u t i o n p l a n h a s b e e n g e n e r a t e d a n d i s s h o w n b e l o w . . . . ( 省略) $ l e s s . / d e b u g . l o g 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ I N F O ] T e r r a f o r m v e r s i o n : 0 . 6 . 2 d e v 3 8 c e 9 5 0 b 4 c d a 0 b f 5 3 8 a 2 b 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 D e t e c t e d h o m e d i r e c t o r y f r o m e n v v a r : / U s e r s / t a k a a k i . f u r u 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : a t l a s = / U s e r s / t a k a a k i . f u r u k a w 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : a w s = / U s e r s / t a k a a k i . f u r u k a w a / 2 0 1 5 / 0 8 / 0 4 1 7 : 5 1 : 3 1 [ D E B U G ] D i s c o v e r e d p l u g i n : a z u r e = / U s e r s / t a k a a k i . f u r u k a w . . . ( 省略)
  13. Resource 定義 最低限、Create, Read, Delete の実装が必要。 f u n c

    r e s o u r c e A w s E i p ( ) * s c h e m a . R e s o u r c e { r e t u r n & s c h e m a . R e s o u r c e { C r e a t e : r e s o u r c e A w s E i p C r e a t e , R e a d : r e s o u r c e A w s E i p R e a d , U p d a t e : r e s o u r c e A w s E i p U p d a t e , D e l e t e : r e s o u r c e A w s E i p D e l e t e , . . .
  14. Schema 定義 R e q u i r e d

    : 必須の argument O p t i o n a l : 必須ではない argument C o m p u t e d : apply 実行後ストアされる argument F o r c e N e w : もし true の設定だとこの argument が変更されたら、 リソー スを新規作成する。 f u n c r e s o u r c e A w s D b S e c u r i t y G r o u p ( ) * s c h e m a . R e s o u r c e { r e t u r n & s c h e m a . R e s o u r c e { C r e a t e : r e s o u r c e A w s D b S e c u r i t y G r o u p C r e a t e , R e a d : r e s o u r c e A w s D b S e c u r i t y G r o u p R e a d , D e l e t e : r e s o u r c e A w s D b S e c u r i t y G r o u p D e l e t e , S c h e m a : m a p [ s t r i n g ] * s c h e m a . S c h e m a { " n a m e " : & s c h e m a . S c h e m a { T y p e : s c h e m a . T y p e S t r i n g , R e q u i r e d : t r u e , F o r c e N e w : t r u e , } , . . .