AWS CloudFormation

公開日時:2020年12月31日 / 最終更新日時:2021年11月28日

■AWS CloudFormation の特徴

 

■AWS CloudFormation ベストプラクティス

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/best-practices.html#organizingstacks

 

 

テンプレートセクション

テンプレートには以下のセクションがあります。

 

形式バージョン (任意)

テンプレートが準拠している AWS CloudFormation テンプレートバージョンを記載します。

 

Description (オプション)

テンプレートを説明するテキスト文字列を記載します。。

 

メタデータ (オプション)

テンプレートに関する追加情報を提供するオブジェクトを記載します。

 

パラメータ (任意)

実行時に (スタックを作成または更新するとき)、テンプレートに渡すことができる値を記載します。

 

ルール (オプション)

スタックの作成またはスタックの更新時に、テンプレートに渡されたパラメータまたはパラメータの組み合わせを検証します。

 

マッピング (任意)

条件パラメータ値の指定に使用できる、キーと関連する値のマッピングを記載します。

 

条件 (オプション)

特定のリソースが作成されるかどうかや、スタックの作成または更新中に特定のリソースプロパティが値を割り当てられるかどうかを制御する条件を記載します。

 

変換 (オプション)

サーバーレスアプリケーションの場合は、使用する AWS Serverless Application Model (AWS SAM)のバージョンを指定します。

 

 

リソース (必須)

EC2 や S3 バケットなどのリソースとそのプロパティを指定します。テンプレートの Resources および Outputs セクションのリソースを参照できます。

 

 

出力(Outputs、アウトプット)(任意)

アウトプットセクションは、作成されたリソースのプロパティを返すのに役⽴ちます。

 

スタックポリシーについて

スタックポリシーを設定することでスタックを更新する際の動作を定義できます。

スタックを更新した際に、意図しない更新から保護するリソースを定義できます。

デフォルトでは、スタックの更新時にすべてのリソースを更新できます。

 

 

CloudFormation はリソースのプロビジョニングには適しているがサーバレスのプロビジョニングには適していない

CloudFormation はリソースのプロビジョニングには適しているがサーバレスアプリケーション(Lmabda、API Gateway、DynamoDB 等)のプロビジョニングには適していません。

サーバーレスアプリケーションのプロビジョニングには AWS SAM(AWS Serverless Application Model、サーバレスアプリケーションモデル)を利用します。

 

 

テンプレートの構文チェックをする方法

テンプレートファイルの構文チェックをする場合は aws cloudformation validate-template コマンドを実行します。

 

※注意点

aws cloudformation validate-template コマンドは、テンプレートの構文を確認するためのもので、リソースに対して指定したプロパティの値がリソースで有効であることを確認するためのものではありません。

 

デフォルトではスタックを削除するとリソースも削除されるので注意

CloudFormation のデフォルト設定ではスタックを削除すると、スタックによって構築されたリソース(VPC、サブネット、EC2インスタンス、RDS等)も削除されます。

 

ただし CoudFormation では 空でない S3 バケットを削除できないので注意

スタックを削除すると EC2 や VPC やサブネットなどは問答無用に削除されますが、オブジェクト(ファイルとかフォルダとか)が残っている S3 バケットは削除できません。 

CloudFormation のスタックを削除する前に S3 バケットを空にしておく必要があります。

ただし、以下の DeletionPolicy を設定することでスタックが削除された際にリソースを保持できます。

 

 

DeletionPolicy 属性を使用するとスタックが削除されてもリソースを保持またはバックアップができる

DeletionPolicy 属性(削除ポリシー)を使用すると、スタックが削除された際にリソースを保持または (場合によっては) バックアップできます。

制御する各リソースに対して DeletionPolicy 属性を指定できます。

DeletionPolicy(削除ポリシー)を「Retain」にすると、CloudFormation のスタックを削除しても S3 バケットや EC2 インスタンスや RDS のリソース削除を防げます。

DeletionPolicy 属性が設定されていない場合、スタックを削除するとデフォルトでリソースが削除されます。

 

■DeletionPolicy 属性の種類

 

DeletionPolicy 属性

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

サンプル CloudFormation テンプレート

参考

https://aws.amazon.com/jp/premiumsupport/knowledge-center/delete-cf-stack-retain-resources/

Description: AWS CloudFormation DeletionPolicy demo 
Resources: 
  SGroup1: 
    Type: 'AWS::EC2::SecurityGroup' 
    DeletionPolicy: Retain ← セキュリティグループにも設定できます。 
    Properties: 
      GroupDescription: EC2 Instance access 
  SGroup2: 
    Type: 'AWS::EC2::SecurityGroup' 
    DeletionPolicy: Retain 
    Properties: 
      GroupDescription: EC2 Instance access 
  SGroup1Ingress: 
    Type: 'AWS::EC2::SecurityGroupIngress' 
    DeletionPolicy: Retain ← セキュリティグループのルールにも設定できます。  
    Properties: 
      GroupName: !Ref SGroup1 
      IpProtocol: tcp 
      ToPort: '80' 
      FromPort: '80' 
      CidrIp: 0.0.0.0/0 
  SGroup2Ingress: 
    Type: 'AWS::EC2::SecurityGroupIngress' 
    DeletionPolicy: Retain 
    Properties: 
      GroupName: !Ref SGroup2 
      IpProtocol: tcp 
      ToPort: '80' 
      FromPort: '80' 
      CidrIp: 0.0.0.0/0

 

 

 

DeletionPolicy 属性が Snapshot の場合

DeletionPolicy 属性が Snapshot の場合はどうなるのでしょうか。

スナップショットをサポートするリソースについては、AWS CloudFormation は削除前に、リソースのスナップショットを作成します。

 

■スナップショットをサポートするリソース一覧

 

 

 

最初は1つのスタックでも範囲が広がったらスタックを分ける

最初は1つのスタックでもいいですが、徐々にスタックで構築・設定する範囲が広がったらスタックを分けていきます。

 

CloudFormationのベストプラクティス

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html

 

CloudFormation のベストプラクティスにも記載がありますが、分ける観点としては「ライフサイクル」「所有権」の2点になります。

 

例えば Web サーバと DB サーバで構成されるウェブサイトがあるとします。

WebサーバはWebサーバ独自のライフサイクル(ApacheのバージョンとかNginxのバージョンとかパッチとか)がありますし、DBサーバにはDBサーバ独自のライフサイクル(DBのバージョンアップやパッチなど)があります。

また、Webサーバはインフラチームが所有しているが、DBサーバはDBチームが所有していることがあります。

このような観点で「ライフサイクル」「所有権」でスタックを分けていきます。

 

 

 

変更セットを使用したスタックの更新

変更セットを使用すると、スタックが更新された場合の影響を確認することができます。

スタックを更新する必要がある場合は、変更の実装前に実行中のリソースに与える影響を理解することで、安心してスタックを更新できます。

変更セットの実行を確定したときのみ AWS CloudFormation によってスタックが変更されるため、変更案のまま続行するか別の変更セットを作成して他の変更を検討するかを決定できます。

 

 

カスタムリソースとは

カスタムリソースを使用すると、テンプレートにカスタムのプロビジョニングロジックを記述し、ユーザーがスタックを作成、更新、削除するたびに AWS CloudFormation がそれを実行します。

たとえば、AWS CloudFormation のリソースタイプとして使用できないリソースを含める必要があるとします。

リソースタイプの例

それらのリソースは、カスタム リソースを使用して含めることができます。

この方法により、すべての関連リソースを 1 つのスタックで管理できます。

 

カスタムリソース

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/template-custom-resources.html

 

要は「AWS::EC2::Instance」などデフォルトで用意されていないリソースを独自に作成するということです。もちろんサポートはされないので自己責任になります。

 

 

カスタムリソースで実行されるアクションには、3 者が関係します。

 

 

 

cfn-signal ヘルパースクリプト

cfn-signal ヘルパースクリプトは、Amazon EC2 インスタンスが正常に作成または更新されたかどうかを示すシグナルを AWS CloudFormation に送信します。

インスタンスにソフトウェアアプリケーションをインストールして設定する場合、ソフトウェアアプリケーションが使用できる状態になった時に AWS CloudFormation にシグナルを送信できます。

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Secured By miniOrange