既存リソースをCloudFormation管理に取り込む機能でいろいろ試してみた。
この記事は,マイナビ Advent Calendar 2019 2日目の記事となります.
2019年11月11日 ポッキー&プリッツの日にAWSがリリースした新機能
CloudFormation(以下CFn)管理外でAWSリソースを作成したリソースや、 CFn管理をおこなう前に作成した既存のリソースをCFn管理に取り込むことができるようになりました!
クラメソ様の記事(具体的な手順はこちらを参考にしていただければと思います。。。) dev.classmethod.jp
既存リソースを取り込めるとどんなことできるのか?
クラメソさんの記事を読み似たようなことをやってみると 確かに既存リソースが取り込めました!
ただ、以下のことをおこなうとどう動くのか気になったのでやってみました。
①ライフサイクルが同じAWSリソースごとにスタックは作成可能?
②この機能を利用しイケてないスタックを作ってしまった際切り戻しは可能なのか?
図ような環境でいろいろ試してみた。
図のテンプレートはここ
chikospescialneo.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
tapiocatapitapiVPC:
Type: 'AWS::EC2::VPC'
"DeletionPolicy" : "Retain"
Properties:
Tags:
- Key: Name
Value: tapiocatapitapiVPC
- Key: Owner
Value: chiko
CidrBlock: 10.10.10.0/24
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
tapiocatapitapiEC2:
Type: 'AWS::EC2::Instance'
"DeletionPolicy" : "Retain"
Properties:
Tags:
- Key: Name
Value: tapiocatapitapiEC2
- Key: Owner
Value: chiko
ImageId: ami-0064e711cbc7a825e
InstanceType: t2.micro
SubnetId: !Ref tapiocatapitapiVPCSubnet
SecurityGroupIds:
- !Ref tapiocatapitapiSecurityGroup
tapiocatapitapiRT:
Type: 'AWS::EC2::RouteTable'
"DeletionPolicy" : "Retain"
Properties:
Tags:
- Key: Name
Value: tapiocatapitapiRT
- Key: Owner
Value: chiko
VpcId: !Ref tapiocatapitapiVPC
tapiocatapitapiVPCSubnet:
Type: 'AWS::EC2::Subnet'
"DeletionPolicy" : "Retain"
Properties:
MapPublicIpOnLaunch: 'true'
AvailabilityZone: ap-northeast-1c
VpcId: !Ref tapiocatapitapiVPC
CidrBlock: 10.10.10.0/24
Tags:
- Key: Name
Value: tapiocatapitapiVPCSubnet
- Key: Owner
Value: chiko
tapiocatapitapiSecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
"DeletionPolicy" : "Retain"
Properties:
GroupName: tapiocatapitapiSecurityGroup
GroupDescription: Enable HTTPS access via port 443
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '443'
ToPort: '443'
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: tapiocatapitapiSecurityGroup
- Key: Owner
Value: chiko
VpcId: !Ref tapiocatapitapiVPC
tapiocatapitapiS3Bucket:
Type: AWS::S3::Bucket
"DeletionPolicy" : "Retain"
①ライフサイクルが同じAWSリソースごとにスタックは作成可能?
上記の「chikospescialneo.yml」テンプレートを三つに分けてみる
chikospescial-VPC.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
tapiocatapitapiVPC:
Type: 'AWS::EC2::VPC'
"DeletionPolicy" : "Retain"
Properties:
Tags:
- Key: Name
Value: tapiocatapitapiVPC
- Key: Owner
Value: chiko
CidrBlock: 10.10.10.0/24
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
chikospescial-NW.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
tapiocatapitapiRT:
Type: 'AWS::EC2::RouteTable'
"DeletionPolicy" : "Retain"
Properties:
Tags:
- Key: Name
Value: tapiocatapitapiRT
- Key: Owner
Value: chiko
VpcId: 対象のVPCIDを書く
tapiocatapitapiVPCSubnet:
Type: 'AWS::EC2::Subnet'
"DeletionPolicy" : "Retain"
Properties:
MapPublicIpOnLaunch: 'true'
AvailabilityZone: ap-northeast-1c
VpcId: 対象のVPCIDを書く
CidrBlock: 10.10.10.0/24
Tags:
- Key: Name
Value: tapiocatapitapiVPCSubnet
- Key: Owner
Value: chiko
tapiocatapitapiSecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
"DeletionPolicy" : "Retain"
Properties:
GroupName: tapiocatapitapiSecurityGroup
GroupDescription: Enable HTTPS access via port 443
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '443'
ToPort: '443'
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: tapiocatapitapiSecurityGroup
- Key: Owner
Value: chiko
VpcId: 対象のVPCIDを書く
chikospescial-INS.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
tapiocatapitapiEC2:
Type: 'AWS::EC2::Instance'
"DeletionPolicy" : "Retain"
Properties:
Tags:
- Key: Name
Value: tapiocatapitapiEC2
- Key: Owner
Value: chiko
ImageId: ami-0064e711cbc7a825e
InstanceType: t2.micro
SubnetId: 対象のサブネット ID
SecurityGroupIds:
- 対象のセキュリティグループID
tapiocatapitapiS3Bucket:
Type: AWS::S3::Bucket
"DeletionPolicy" : "Retain"
実際にやってみる
まずは、「chikospescial-VPC.yml」を使い既存のVPCのみスタック化
(作業手順は省きますクラメソ様の記事をご確認ください)
コンソールの指示通り進めた結果
スタック:ChikoTesttapiocatapitapiVPC完成
同じ要領で「chikospescial-NW.yml」を使い既存のNW周りをスタック化
スタック:ChikoTestTapiocatapitapiNWが同じくできた
ここまでくると残りのインスタンスたち「chikospescial-INS.yml」も問題なくスタック化が可能
スタック:ChikoTesttapiocatapitapiINS
AWSのスタック管理ポリシー通り、
ライフサイクルが同じものはまともてスタック化は可能でした!
これはいろいろ使い勝手がいい気がします!
②この機能を利用しイケてないスタックを作ってしまった際切り戻しは可能なのか?
「chikospescialneo.yml」テンプレートを使い、
一度すべての環境を1つのスタックにしてみる
スタック:ChikoTest
このスタックを削除する
ChikoTestを抹消した
各AWSリソースは無事かな?
問題なく生きてそう…
(サービス的な影響度は現状わからんが)
CloudWatchのアラートも上がってない
あとは、①で話した感じに設定していけば
無事にスタック化の切り戻しから
意図したスタック構成に変更可能ですね!
やってみた結果
テンプレートを見ていただければわかりますが、
今回のCFnの機能で既存リソースをもとに作成したスタックは
「"DeletionPolicy" : "Retain"」の設定が必須です。
これによりスタックの削除をおこなうとスタックのみの削除として
CFnの管理外に外れるってことですね…
これはいい使い道がありそうです!
過去にCFnで作成した全部一緒の500行テンプレートがあって
そのスタックを分割したいって時
「"DeletionPolicy" : "Retain"」が設定されていれば、
一度スタック管理から外してスタックの分割も可能ですね。
ただ、「"DeletionPolicy" : "Retain"」していないと無理ですが…