AWS CloudFormation による恩恵を体感してみる

CloudFormation

フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの Saki@猫好き です。AWS 活用していますか?

いくら AWS 認定資格 6 冠を達成していても、基本は大事。今日は、私が特に好きなサービスである、CloudFormation について学習しなおしてみようと思います。

前回、IaC(Infrastructure as Code)を体感してみる学習をしました。テキスト化されたコードから EC2 インスタンスを立ち上げられることを確認しました。

しかし、あまり IaC の恩恵を感じることができなかったと思います。

今回は、前回のコードに簡単なコードを追加して、IaC の恩恵を体感できたらいいなと思います。

おさらい

前回作成したコードは、次のようなとても簡単なものでした。

Resources:
    MyEC2Test:
        Type: AWS::EC2::Instance
        Properties:
            ImageId: ami-0bba69335379e17f8
            InstanceType: t2.micro
  • Resources:
    これは、CloudFormation でプロビジョニングするリソースを列挙します。
  • MyEC2Test:(プロビジョニングするリソースに対して自由に名前を設定します)
    後でこのリソースを利用する場合を考えると、できるだけわかりやすく名前を設定した方が良いと思います。
  • Type: AWS::EC2::Instance
    MyEC2Test は、EC2 インスタンスタイプであることを示しています。
  • Properties:
    Type で指定したリソースに対するプロパティーを設定します。
  • ImageId: ami-0bba69335379e17f8
    EC2 インスタンスを立ち上げる際に利用する AMI ID を指定します。
  • InstanceType: t2.micro
    立ち上げる EC2 インスタンスのインスタンスタイプを指定します。

これでは、いつも Amazon Linux 2 がインストールされた状態の t2.micro インスタンスが立ち上がるだけです。これで CloudFormation って凄い! とはなかなかならないでしょう。・・・私は思いましたけれど。

コードを追加する

もし、t2.micro のインスタンス以外を利用することになった場合、Properties の InstanceType を探して修正する必要があります。先ほどの短いコードであれば問題ないですが、コードが長くなると修正作業が大変になります。

そのような場合を想定して、変更の可能性のある Properties を Parameters セクションで管理する方法が便利です。

インスタンスタイプを選択できるようにする

まずは、インスタンスタイプを選択できる設定です。

Parameters:
    ParamInstanceType:
        Type: String
        Default: t2.micro
        AllowedValues:
            - t2.micro
            - t3.nano
            - m1.small
        Description: Select Instance Type!
Resources:
    MyEC2Test:
        Type: AWS::EC2::Instance
        Properties:
            ImageId: ami-0bba69335379e17f8
            InstanceType: !Ref ParamInstanceType
  • ParamInstanceType:(設定するパラメータに対して自由に名前を設定します)
    ここで設定した名前を Resources で参照します。
  • Type:
    CloudFormation でサポートされているパラメータタイプを割り当てます。今回は「t2.micro」や「t3.nano」といった文字列で受け取るので String としています。
  • Default:
    デフォルトで選択されるものを指定できます。
  • AllowedValues:
    選択可能なインスタンスタイプを列挙します。
  • Description:
    このパラメータについての説明です。マネジメントコンソールで表示されます(後述)。
  • InstanceType: !Ref ParamInstanceType
    組み込み関数 !Ref を利用すると、!Ref に続いて指定したパラメータまたはリソースの値を返すことができます。

ネームタグをつけてみる

このまま複数のインスタンスを立ち上げても、どのインスタンスがどのプロジェクトのインスタンスであるか判別するのが困難です。そこで、ネームタグをつけるようにしてみます。

Parameters:
    ParamInstanceType:
        Type: String
        Default: t2.micro
        AllowedValues:
            - t2.micro
            - t3.nano
            - m1.small
        Description: Select Instance Type!
    ParamProjectName:
        Type: String
        Description: Enter Project Name!
Resources:
    MyEC2Test:
        Type: AWS::EC2::Instance
        Properties:
            ImageId: ami-0bba69335379e17f8
            InstanceType: !Ref ParamInstanceType
            Tags:
              - Key: Name
                Value: !Ref ParamProjectName
  • ParamProjectName:(設定するパラメータに対して自由に名前を設定します)
    ここで設定した名前を Resources で参照します。
  • Type:
    CloudFormation でサポートされているパラメータタイプを割り当てます。
  • Description:
    このパラメータについての説明です。マネジメントコンソールで表示されます(後述)。
  • Value: !Ref ParamProjectName
    組み込み関数 !Ref を利用すると、!Ref に続いて指定したパラメータまたはリソースの値を返すことができます。

CloudFormation でテンプレートを利用する

CloudFormation コンソールから作成した YAML ファイルをアップロードします

「スタックの詳細を指定」画面に「パラメータ」の項目が増えていることが確認できます

それぞれに Description が表示されているのが確認できます。

AllowedValues で設定したインスタンスのみが選択可能です

プロジェクトネームを入力します

これで、スタックの作成を実行します。

同様に、再度スタックの作成を実行して、先ほどとは異なるスタック名とパラメータを設定しました。

MyEC2Test-1 プロジェクトでは、m1.small インスタンスを利用します。
MyEC2Test-2 プロジェクトでは、t3.nano インスタンスを利用します。

スタックの作成が実行されています

EC2 インスタンスのコンソール画面での確認

MyEC2Test-1 プロジェクトでは、m1.small インスタンスが、MyEC2Test-2 プロジェクトでは、t3.nano インスタンスが利用されていることが確認できました!

お片づけ

CloudFormation でプロビジョニングされたリソースは、「スタックの削除」で簡単に削除することができます。EC2 インスタンスの終了だけであれば、それほど恩恵を感じることができないかもしれませんが、1 つのテンプレートで複数のリソースをプロビジョニングしている場合に大きな効果を発揮します。

最後に

パラメータを渡すことで、1 つのテンプレートから複数のリソースをプロビジョニングすることができることを確認しました。

プロビジョニングするリソースの範囲が広がると、この恩恵は大きいものとなります。
VPC、EC2 インスタンス、セキュリティグループ、RDS等を 1 つのテンプレートから、開発環境、テスト環境、本番環境にプロビジョニングする。開発環境で問題が発生した場合、現在のスタックを削除し、テンプレートから新たにスタックを作成すれば良い。

以上、Saki@猫好き がお送りしました。

引き続き、よろしくお願いいたします!

プロフィール
この記事を書いた人
saki@猫好き

フェイス・ソリューション・テクノロジーズ株式会社オペレーションサービスユニットのユニット長。
とにかく猫が好き。そして、キャンプが好き。休みの日は結構な割合でキャンプ場に出没します。
AWS 6 冠達成しています。
ITパスポート、基本情報技術者、応用情報技術者、取得済み。

saki@猫好きをフォローする
フェイスでは一緒に働く仲間を募集しています

フェイス・ソリューション・テクノロジーズ株式会社では、一緒に働いてくれる仲間を募集しています。
いろいろな案件があるので、いろいろなことに挑戦できる会社です。
「面白いこと」に積極的なので、あなたの「面白そうなことだからやってみたい」を形にできるチャンスがあります!

CloudFormation
フェイススタッフブログ

コメント

タイトルとURLをコピーしました