投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。
はじめに
昨年(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
セキュリティグループのCidrIPを手動で変更する
テンプレートファイルの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
手動で既存のルールを編集してるため新規にルールが作成されいる。cfnの管理するリソース自体はテンプレート通りに変更されている。
注意: 既存のルールを編集すると、編集したルールが削除されて、新しい詳細を含む新しいルールが作成されます。これにより、そのルールに依存するトラフィックは、新しいルールが作成されるまで短時間切断されます。
Drift Detectionする
セキュリティグループを選択してView drift detailsをクリック
手動で追加した変更が差分として出力される。
手動で追加したルールを削除する
Detect drift for resourceをクリック
IN_SYNCになることを確認する。
まとめ
実際の運用では、Update stackを実施するまえにDrift Detectionを実施し差分がないか確認することが想定される。cFn用のパイプラインを実装している場合は、update stack前にDrift Detectionを実施するフェーズを付け加えるんどのユースケースがあるかと思います。