Udemy初夏のビッグセール開催中(~5/23)人気教材が1,300円~

AWS CloudFormation スタックにリソースを取り込む

AWSではすでにCLIやマネジメントコンソールから作成してしまったリソースについてもCloudFormationスタックに取り込むことができます。取り込むスタックは新規でも、既存のスタックでも可能です。実際に試してみたのでレポートします。

CloudFormationスタックに任意のリソースを取り込むアーキテクチャ図
目次

今回のお試しの構成

今回はDynamoDBを新規のCloudFormationスタックに取り込む構成とします。

CloudFormationスタックにDynamoDBテーブルを取り込むアーキテクチャ図

リソースをコンソールから作成する(移動対象のリソース)

マネジメントコンソールからDynamoDBテーブルを作ってみました。今回、このDynamoDBテーブルをスタックに取り込んでいきます。

マネジメントコンソールでの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の画面を開いてスタックの作成→既存のリソースを使用(リソースをインポート)を選択します。

マネジメントコンソールでのCloudFormationスタックにDynamoDBテーブルの取り込み

必要なものの説明があります。確認をして次へを選択します。

マネジメントコンソールで次へを押下する

続いてテンプレートのアップロード画面なので作成したyamlファイルをアップロードします。

マネジメントコンソールでテンプレートファイルをアップロードする

続いてリソースを識別の画面に遷移します。識別子にテーブル名を確認されるので入力します。

マネジメントコンソールで識別子を入力する

スタック名を入力します。

マネジメントコンソールでスタックの名前を入力する

次の画面は確認画面です。少し待つと変更セットにimportと表示されるのでインポートしたいリソースが表示されていることを確認してリソースをインポートを選択します。

マネジメントコンソールでリソースをインポートする

少し待つとインポートが完了します。

マネジメントコンソールでリソースがインポートされるのを確認する

リソースタブで確認すると確かに野良だったDynamoDBがスタックによって管理されています。

マネジメントコンソールで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に変更したものに差し替えます。

マネジメントコンソールで既存テンプレートを置き換える

確認して次へを選択していくと確認画面に遷移します。今回、リソースに対する変更は無いので変更セットには何も表示されません。送信を押下します。

マネジメントコンソールで変更セットで変更がないことを確認する

しばらくするとスタックの更新が完了します。

マネジメントコンソールでスタックの更新を確認する

スタックを削除する

スタックを削除してみます。

マネジメントコンソールでCloudFormationスタックを削除する

確認して削除を押下します。

マネジメントコンソールで削除確認を押下する

しばらく待つと削除が完了します。

マネジメントコンソールで削除が完了することを確認する

リソース(DynamoDBテーブル)も削除できていることを確認できました。

マネジメントコンソールでDynamoDBテーブルが削除されていることを確認する

さいごに(感想)

納期の関係などでCLIやマネジメントコンソールから直接作成してしまったリソースを、後から管理の面でCloudFormationに移行したいというニーズはありそうです。可能なものはIaC化しておかないと、各環境(本番、開発、ステージングなど)での設定差分により悩まされることがあるのでインポート機能は非常に便利だと感じました。

PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!

SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次