スポンサーリンク

AWS CloudFormation デプロイ(CD/CI)

AWS CloudFormationの基礎知識

投稿日:2022年3月10日 更新日:

AWS CloudFormationとは?

AWS CloudFormationとはEC2やS3などのAWSリソースを、yamlファイルを元に作成できるサービスです。

AWS CloudFormationを使用するメリット

AWS CloudFormationは非常に重要なサービスで、使用することで3つの大きなメリットがあります。

yamlファイルなのでGit管理できる

Infrastracture as Code と呼ばれる、コードベースでインフラ管理するのが現在の主流です。
コンソールの操作をキャプチャを撮り、手順書に貼り付けるのではなくて、
コードとしてインフラ構成を記述できるため、Githubなどでバージョン管理できるようになります。
それにより、変更箇所の把握が容易になります。

AWSの利用コストがわかりやすい

CloudFormationでyamlを元にAWSリソースを作成するときに、
予想コストが表示されます。
それによって、このインフラ構成ではどれぐらいの料金がかかるのか把握しやすくなります。

リソース群を作成・削除しやすい

yamlファイルを記述しておけば、そのファイルを元にいつでも何度でもリソース群を作成することができます。
逆もまた然りで、リソース群の一括削除もできます。

同じリソース群を複数環境作りたい場合、何度もコンソールからポチポチ作成するのは大変です。
ですが、AWS CloudFormationを使えば、その大変さが省けます。

どれも大きなメリットです。
強いてデメリットをあげれば、記述方式を覚える必要があることです。
ですが、勉強する価値は大きいです。

AWS CloudFormationの基本用語

スタック

AWS CloudFormationでは、1つのyamlを元に作成されるAWSリソース群をまとめて「スタック」を呼びます。

テンプレート

AWS CloudFormationでは、リソース群をyamlファイルに記述します。
そのyamlファイルのことを「テンプレート」と呼びます。

テンプレートは、テキストファイルにJSON形式またはYAML形式で記述します。

コメントが付与できたり、文法が緩いことからYAML形式で記述するのが一般的です。

AWS CloudFormationの利用の流れ

例として、EC2-RDSという構成をAWS CloudFormationを使用して作成します。

テンプレートを書く

ローカルで任意の名前のyamlファイルを作成します。
下記はVPCのみ作成する最低限の記述内容です。

AWSTemplateFormatVersion: 2010-09-09
Description:
  "This create only VPC."
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/24
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
    DeletionPolicy: Retain

各リソースごとに設定可能なプロパティは下記で調べて書きます。
AWS リソースおよびプロパティタイプのリファレンス

AWS CloudFormationでスタックを作成する

AWSのマネコンからCloudFormationを開きます。

スタックの作成ボタンから開始します。

ステップ 1 テンプレートの指定

テンプレートは記述済みなので、テンプレートの指定>テンプレートファイルのアップロードからローカルのymlを選択します。

ステップ 2 スタックの詳細を指定

スタックの名前は、任意の名前を入力します。
例えば、sample-vpc-stackなど。
(このスタックの名前で、VPCなどのリソースにタグ付けされます。)

ステップ3 スタックオプションの設定

特にありませんので、そのまま次へを押します。

ステップ 4 レビュー

入力内容を確認して、スタックの作成ボタンを押します。

予想コストリンク から、概算コストを見ることができます。

しばらくすると、テンプレートの内容に基づいてAWSリソースが作成されています。

AWS CloudFormationのテンプレートの記法

AWS CloudFormationのテンプレートにパラメータを埋め込む!Refと!Sub

パラメータだけそのまま使うときは、!Ref パラメータ名で埋め込みます。

パラメータを任意の文字と連結させるには、!Sub "xxx-${パラメータ名}-yyy"の要領で埋め込みます。
サンプルは次の項目で併せてお見せしています。

AWS CloudFormationのテンプレートにスタック名を埋め込む

テンプレート

AWSTemplateFormatVersion: 2010-09-09
Description:
  "This create only VPC."

Parameters:
  ProjectName:
    Type: String

Resources:
  VPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: "10.0.0.0/24"
      EnableDnsSupport: "true"
      EnableDnsHostnames: "true"
      InstanceTenancy: default
      Tags:
        - Key: "Name1"
          Value: !Sub "${ProjectName}-vpc"
        - Key: "Name2"
          Value: !Sub "${AWS::StackName}-vpc"
        - Key: "genarated by"
          Value: "vpc-only-vpc"
    DeletionPolicy: Retain

Tags:- Key: "Name1"- Key: "Name2"にパラメータとスタック名を埋め込みます。

スタック作成画面

ymlで定義した独自パラメータは、このようにスタック作成画面に入力欄が作られます。

今回はスタックの名前にfoo、パラメータのProjectNameにbarと入力したので、次のようになるはずです。

  Tags:
    - Key: "Name1"
      Value: !Sub "${ProjectName}-vpc" >bar-vpc
    - Key: "Name2"
      Value: !Sub "${AWS::StackName}-vpc" >foo-vpc

動作確認

できたVPCのタグ名を確認します。

期待通りに埋め込まれていますね。

AWS CloudFormationとTerraformの違いは?

CloudFormationの類似サービスとして、HashiCorp社のTeraformがあります。

TeraformもInfrastructure as Code を実現するサービスで、AWSのほか、Microsoft AzureやGoogle Coludにも対応していることが大きな違いです。

Teraformの他にも、IaCを実現するサービスはありますので、違いをまとめます。

CloudFormationTeraform
対応クラウドAWSAWS/Azure/GoogleCloud
記述方法yaml or json

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-AWS CloudFormation, デプロイ(CD/CI)

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.