AWSではすでにCLIやマネジメントコンソールから作成してしまったリソースについてもCloudFormationスタックに取り込むことができます。取り込むスタックは新規でも、既存のスタックでも可能です。実際に試してみたのでレポートします。
今回のお試しの構成
今回はDynamoDBを新規のCloudFormationスタックに取り込む構成とします。
リソースをコンソールから作成する(移動対象のリソース)
マネジメントコンソールからDynamoDBテーブルを作ってみました。今回、このDynamoDBテーブルをスタックに取り込んでいきます。
設定は何でも大丈夫ですが、筆者はキャパシティーモードはオンデマンドにしています。
取り込むリソースのYAMLを作成する
取り込もうとしているリソースのYAML(またはJSON)を用意する必要があります。yamlには削除ポリシー:保持(Retain)を記述しておく必要があります。なお、既存スタックに取り込む場合は、取り込みたいリソースのyamlと既存のyamlをマージしておく必要があります。
yamlを自分で書くのが面倒な場合はformer2を使用することもできます。Former2は現在のAWSアカウント内のリソースからyamlテンプレートを生成してくれる便利なツールです。また、取り込もうとしているリソースがインポート可能なリソースかを確認しておきます。インポートできるリソースかの確認はこちら。
今回取り込もうとしているDynamoDBテーブルのyamlはFormer2で作成しました。Former2で出力されたyamlのままでは削除ポリシーが設定されていないので書き足す必要があります。8行目です。
AWSTemplateFormatVersion: "2010-09-09"
Metadata:
Generator: "former2"
Description: ""
Resources:
DynamoDBTable:
Type: "AWS::DynamoDB::Table"
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: "id"
AttributeType: "S"
BillingMode: "PAY_PER_REQUEST"
TableName: "ImportTestTable"
KeySchema:
-
AttributeName: "id"
KeyType: "HASH"
リソースをスタックにインポートする
yamlファイルの用意ができたらCloudFormationスタックに取り込みましょう。CloudFormationの画面を開いてスタックの作成→既存のリソースを使用(リソースをインポート)を選択します。
必要なものの説明があります。確認をして次へを選択します。
続いてテンプレートのアップロード画面なので作成したyamlファイルをアップロードします。
続いてリソースを識別の画面に遷移します。識別子にテーブル名を確認されるので入力します。
スタック名を入力します。
次の画面は確認画面です。少し待つと変更セットにimportと表示されるのでインポートしたいリソースが表示されていることを確認してリソースをインポートを選択します。
少し待つとインポートが完了します。
リソースタブで確認すると確かに野良だったDynamoDBがスタックによって管理されています。
リソースをスタックとともに削除してみる
スタックの削除ポリシーを削除に変更する
リソースをスタックに取り込んだ直後は削除ポリシー:保持(DeletionPolicy: Retain)になっているのでスタックを削除してもリソースが削除されることはありません。
そこでスタックとともにリソースを削除したい場合は削除ポリシーを変更する必要があります。DeletionPolicy: DeleteまたはDeletionPolicyの記述自体を削除してスタックを更新します。
今回筆者は以下の通りyamlテンプレートを変更しました。
AWSTemplateFormatVersion: "2010-09-09"
Metadata:
Generator: "former2"
Description: ""
Resources:
DynamoDBTable:
Type: "AWS::DynamoDB::Table"
DeletionPolicy: Delete
Properties:
AttributeDefinitions:
- AttributeName: "id"
AttributeType: "S"
BillingMode: "PAY_PER_REQUEST"
TableName: "ImportTestTable"
KeySchema:
- AttributeName: "id"
KeyType: "HASH"
CloudFormationスタックから先ほど作成したスタックを選択し、更新を選択してyamlテンプレートを上記、DeletionPolicy: Deleteに変更したものに差し替えます。
確認して次へを選択していくと確認画面に遷移します。今回、リソースに対する変更は無いので変更セットには何も表示されません。送信を押下します。
しばらくするとスタックの更新が完了します。
スタックを削除する
スタックを削除してみます。
確認して削除を押下します。
しばらく待つと削除が完了します。
リソース(DynamoDBテーブル)も削除できていることを確認できました。
さいごに(感想)
納期の関係などでCLIやマネジメントコンソールから直接作成してしまったリソースを、後から管理の面でCloudFormationに移行したいというニーズはありそうです。可能なものはIaC化しておかないと、各環境(本番、開発、ステージングなど)での設定差分により悩まされることがあるのでインポート機能は非常に便利だと感じました。
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当