J-DAP JSOL Data Acceleration Program

JSOL Data
Acceleration Program

データ活用
アクセラレーション
プログラム

  • データ活用
    コンサルティング
  • データ活用・AI基盤
  • データ活用
    プロフェッショナル
    サポート
  • データ活用
    自走化支援
  • 生成AI導入
    ・活用促進
  • 業界別
    ソリューション /
    導入事例
  • コラム

お問い合わせ

ホワイトペーパー

ホーム > データ活用アクセラレーションプログラムの記事集 > CloudFormationを使用する際のポイント

2024年09月11日

CloudFormationを使用する際のポイント

今回のブログではAWS CloudFormationを取り上げます。

例えば、社内のシステム管理を行う方で、業務部門からクラウド環境の払い出しを依頼されて、環境を構築する場合を考えてみましょう。何度も依頼を受ける中で、その際の作業時間を短縮したい、構築ミスを減らしたい、作業を誰でもできるようにしたいという考えることはありませんか。

このような場合に使用いただきたいサービスがAWS CloudFormationです。AWS CloudFormationは、インフラストラクチャをテンプレートと呼ばれるものでコード化することで、環境構築を自動化できます。テンプレートを使用することで誰が実行してもミスなく環境構築ができ、作業時間の短縮も実現できます。今回は便利なCloudFormationのテンプレートを作成する際のポイントをご紹介します。

  • 著者情報

    白方 達也、坪内 進史

    ソーシャルトランスフォーメーション事業本部
    白方 達也
    複数案件にてAWSを使用した連携基盤に関わるサービス提供に携わっている。AWSに対応できるように日々研鑽中である。
    機械学習にも興味を持っており、AWS Certified Machine Learning - SpecialtyやE資格を保持している。

    坪内 進史
    クラウドやアジャイル、データ活用技術の専門性を活かし、ソリューションの企画・推進やプロダクトマネジメントを担当。直近は、組織におけるデータ活用の自走化を目的とした、データ活用支援を実行中

作成の度に変更される可能性があるものはパラメータ化する

例えばEC2を作成する場合を考えてみましょう。セキュリティグループやIAMロールは同じでも、用途に応じてインスタンスタイプを変更する必要があるという場合に、インスタンスタイプをテンプレートにハードコーディングしているとしましょう。
すると、こちらのテンプレートは固定のインスタンスタイプにしか対応できないものとなってしまい、テンプレートとしての機能を十分に生かしきれません。このようなことにならないために、テンプレートを実行する際に変更する可能性があるものはパラメータセクションに定義し、実行する際にユーザが指定できるようにします。こうすることで実行する度に必要な箇所を変更しつつ、リソース作成が可能な汎用的なテンプレートとなります。

パラメータはテキストボックスとして定義することはもちろんのこと、デフォルト値を設定することや、リストから選択させることが可能ですので、入力値にあった形で設定することでユーザに優しいテンプレートを作成することができます。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

適切な単位で作成する

対象リソース数多くある場合に全て1つにまとめたテンプレートを作成すると、可読性が低下することや修正があった場合に全体に影響する可能性があること等、テンプレートのメンテナンス性が著しく落ちます。
どのリソース単位でテンプレート作成するのかということも考慮することで、修正があった際に必要最低限のリソースを変更することができ、関係ないリソースに影響を及ぼすことがなくなります。

一般的な分割例としては以下のようなものがあります。

①リソースのライフサイクル毎
②処理に必要なサービスのまとまり毎
③リソースの所有者毎
④リージョン毎

テンプレートはリージョン毎に実行する必要があるため、複数リージョンを対応とする場合は「④リージョン毎」は必須となることにご注意ください。"

依存関係を考慮する

実際にリソースを作成する際には複数のリソースを組み合わせることになります。作成するものによっては依存関係を持っていることがあるため、リソースが作成される順番を考慮してテンプレートを作成する必要があります。例えば、先ほどと同様にEC2を作成する場合を考えた時にEC2にIAMロールをアタッチさせるためには、EC2の作成よりもIAMロールが作成されている必要があります。テンプレートを実行する際は、テンプレート内に記述された順番でリソースが必ずしも作成されるわけではありません。AWS CloudFormationでは依存関係を定義するものが用意されており、例として2つ挙げます。

1つ目は「Ref」や「Fn::GetAtt」のような組み込み関数で、こちらを使用することでテンプレート内の値を指定することができ、暗黙的に依存関係を定義することができます。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html

2つ目はDependsOn 属性で、組み込み関数を使用しない場合に使用することにより明示的に依存関係を定義することができます。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html

また、あるテンプレート内で作成したリソースのIDなどの値を別のテンプレートに渡したい場合には、提供元のテンプレート内でOutputsオプションのExportで定義し、提供先のテンプレート内でFn::ImportValueの組み込み関数を使用することで値の受け渡しが可能になります。こちらは複数リージョンをまたいで行うことはできないということにご注意ください。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html

まとめ

汎用的なテンプレートを作成する際のポイントをご紹介させていただきました。対象とするリソースが少ない場合や構成が単純な場合はテンプレート作成は容易に行うことができますが、リソースが多い場合や構成が複雑な場合はテンプレート自体が複雑になるため作成が困難になることがあります。

また、要件に合うリソースの構成を検討する必要もあります。JSOLはこのような場合にもリソースの構成検討から効果的なテンプレート作成まで支援することが可能です。こういった課題をお持ちの場合は、ぜひJSOLにお気軽にお問い合わせください。

お問い合わせ・資料ダウンロードはこちら

お問い合わせ

  • J-DAP関連資料ダウンロード
  • J-DAP導入支援お問合せ
株式会社JSOL
  • 企業概要
  • 個人情報保護方針
  • クッキーポリシー
© JSOL CORPORATION
  • NTT DATA Trusted Global Innovator NTT DATA Group
  • 日本総研 The Japan Research Institute, Limited
  • SMBC