LoginSignup
6
2

More than 5 years have passed since last update.

CloudFormation Drift Detectionを試してみた

Last updated at Posted at 2018-11-14

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

はじめに

昨年(2017年)のRe:Inventで発表されたCloudFormation Drift Detectionがリリースされました。
https://aws.amazon.com/jp/blogs/aws/new-cloudformation-drift-detection/

CloudFormation Drift Detectionは、CloudFormationで作成したStackのリソースに対して手動で変更したものを検出して表示する機能です。

手動で変更してしまった後で、変更箇所とは別の箇所を変更するためテンプレートを修正してupdate stackをした場合は、手動で変更した箇所が元に戻ってしまうといったことが起こります。

今回リリースされたCloudFormation Drift Detectionは、変更内容を検知することにより、事前にテンプレートに手動変更の内容を反映することで、意図しない挙動を防ぐことが可能になります。

サポートしているリソースは、以下の通り
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift-resource-list.html?icmpid=docs_cfn_console

雰囲気を掴むために動かしてみる

流れ

CloudFormation(以降はcFnと表記)でセキュリティグループを作成する
セキュリティグループのCidrIPを手動で変更する
テンプレートファイルのPortを変えてUpdate Stackする
Drift Detectionする

CloudFormation(以降はcFnと表記)でセキュリティグループ作成する

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: vpc-26505643
      GroupDescription: SecurityGroup
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '80'
        ToPort: '80'
        CidrIp: 0.0.0.0/0

image.png

セキュリティグループのCidrIPを手動で変更する

image.png

テンプレートファイルのPortを変えてUpdate Stackする

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: vpc-26505643
      GroupDescription: SecurityGroup
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '443'
        ToPort: '443'
        CidrIp: 0.0.0.0/0

image.png

image.png

手動で既存のルールを編集してるため新規にルールが作成されいる。cfnの管理するリソース自体はテンプレート通りに変更されている。

注意: 既存のルールを編集すると、編集したルールが削除されて、新しい詳細を含む新しいルールが作成されます。これにより、そのルールに依存するトラフィックは、新しいルールが作成されるまで短時間切断されます。

Drift Detectionする

image.png

左のペインからDriftsを選択する
image.png

セキュリティグループを選択してView drift detailsをクリック
image.png

手動で追加した変更が差分として出力される。
手動で追加したルールを削除する
Detect drift for resourceをクリック
image.png
IN_SYNCになることを確認する。

まとめ

実際の運用では、Update stackを実施するまえにDrift Detectionを実施し差分がないか確認することが想定される。cFn用のパイプラインを実装している場合は、update stack前にDrift Detectionを実施するフェーズを付け加えるんどのユースケースがあるかと思います。

6
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2