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

新卒が感じたCFnによる環境構築の ありがたみと苦労

R.Goto
February 24, 2022

新卒が感じたCFnによる環境構築の ありがたみと苦労

R.Goto

February 24, 2022
Tweet

Other Decks in Technology

Transcript

  1. 札幌オフィス 〒060-0004 北海道札幌市中央区北4条西6-1 毎日札幌会館9F ベトナムオフィス 7th Floor, Mercury Building, No.444

    Hoang Hoa Tham Street, Thuy Khue ward, Tay Ho District, Hanoi city 西日本オフィス 〒530-0001 大阪府大阪市北区梅田2-2-2 ヒルトンプラザウエストオフィスタワー19F シリコンバレーインキュベーションセンター 3350 Scott Blvd. #29 Santa Clara, CA 95054 東京オフィス(本社) 〒108-0073 東京都港区三田3-13-16 三田43MTビル12F 株式会社ビッグツリーテクノロジー&コンサルティング 新卒が感じたCFnによる環境構築の ありがたみと苦労 BTC後藤 2022年2月24日
  2. 2 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    新卒1年目 ◼ プロジェクトではインフラ周りを担当 ◼ AWS勉強中 自己紹介
  3. 3 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    YAMLやJsonで設定を記載したテンプレートファイルを用いた、リソースの自動展開が可能なサー ビス。 ◼ CloudFormation自体の料金は無料。 CloudFormationとは ◼ 値をべた書きせずにパラメータ化することで、 スタック作成時に柔軟に選択することが可能。 ◼ 値をSystems Managerから取得すること で、機密情報をテンプレートに含めずに管理 することも可能。
  4. 4 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    一番は使いまわし ◼ 1つのテンプレートファイルで複数の環境用のリソースを展開出来たり ◼ 複数の用途のリソースを展開出来たり ◼ 他プロジェクトで使用しているテンプレートファイルも利用出来たり。 CFnに感じたありがたみ
  5. 5 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    1つのテンプレートファイルに、関連性のある複数のリソースをまとめることで管理が楽。 ◼ 例えば、Pipeline関連のテンプレートファイルには以下のリソースをまとめる ◼ CodePipeline ◼ CodeBuild ◼ CodePipelineに付与するIAMロール ◼ CodeBuildに付与するIAMロール ◼ CodeBuildに付与するSecurityGroup ◼ Pipelineのアーティファクトを格納するS3バケット ◼ などなど ◼ 各リソースの更新をする際には、このCFnスタックを通して更新。 ◼ リソースが不要になった場合は、スタックを削除することで紐づくリソースを一括削除可能。 CFnに感じたありがたみ
  6. 6 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    デグレート ◼ 俗に言う、デグレったってやつ ◼ これに尽きます。。。 ◼ デグレ = 変更を加えたことで、これまで動いていた部分が動かなくなるなどの品質低下が起きること。 ◼ CFnで作成したリソースの手動変更がきっかけで発生してしまった。 CFnの利用で感じた苦労 この設定を変更しただけなのに ここの設定も変わってし まって、エラーが発生 例
  7. 7 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    状況 ◼ CodeBuildに環境変数を追加したかったので、テンプレートファイルのCodeBuild部分のみを変更。 ◼ (ただし、過去にコンソールから手動でCodeBuildへの特権付与設定が行われていた模様。。。) ◼ 変更したテンプレートファイルでCFnスタックを更新。 ◼ 手動で設定した特権付与が外れてしまい、エラーが発生してしまった。 ◼ CFnテンプレートでは、CodeBuildの特権付与設定のプロパティは必須項目ではなく、デフォルト値はFalse。 CFnの利用で感じた苦労 Environment: EnvironmentVariables: - Name: Key_1 Value: Value_1 - Name: Key_2 Value: Value_2 ・CodeBuildに環境変数を追加 ・それ以外の変更はなし ・スタック更新 • 環境変数が追加された (想定通り) • CodeBuildの特権付与 設定が外れた (想定外)
  8. 8 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    このような事故を防ぐためには? ◼ そもそも極力CFnで作成したリソースの手動変更は行わない。 ◼ 変更を行った場合も、すぐにCFnテンプレートに取り込む。 ◼ 変更セットを活用する。 ◼ CFnスタックの更新を行う前に、リソースに対する変更を確認できる。 ◼ 意図しないリソースへの変更が発生しないか、事前に確認できる。 ◼ ↓の場合は、スタック更新によってSecurityGroupが変更されることがわかる。 CFnの利用で感じた苦労
  9. 9 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    このような事故を防ぐためには? ◼ ドリフト検出を活用する。 ◼ CFnテンプレートで定義したリソースの内容と、現在のリソースの設定 が乖離していないかをチェックできる。 ◼ これにより、CFnのスタック更新以外で変更された箇所を検出できる ◼ ↓の場合は、IAMロールにドリフトが検出されている (サポートされていないサービスもある。。。) CFnの利用で感じた苦労
  10. 10 Copyright © 2022 BTC Corporation All Rights Reserved. ◼

    CFnはインフラ構築の効率化にはとても有用なサービス。 ◼ 一方で、リソースの削除や置換などが発生する場合もあるため、事故が発生しないように様々な機能を活用 する必要がある。 ◼ AWS Configのマネージドルールに、CFnスタックのドリフト検出ルールがあるため、ドリフト検出時に開発者に通知するなど。 ◼ また、「既存リソース→CFnテンプレート化」を実施するためのOSSツール(former2など)もあるため、このあた りもCFnのスキルアップに役立ちそう。 ◼ (完璧にYAMLに落とし込めるわけではないけど) まとめ