{CloudFormation}既存のリソースからのスタックの作成

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resource-import-new-stack.html
https://dev.classmethod.jp/articles/cloudformation-launches-resource-import/

 

インポートする各リソースには、DeletionPolicy 属性が必要です。
AWS CloudFormation は、テンプレート設定がリソースプロパティの実際の設定と一致しているかどうかをチェックしません。

インポートが完了した後、後続のスタックオペレーションを実行する前に、インポートされたリソースでドリフト検出を実行することをお勧めします。
ドリフト検出により、テンプレート設定が実際の設定と一致することが保証されます。

※既存リソースインポートの場合もテンプレートの作成は必要

 

-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

aws --version


-- 2. RDSインスタンス作成

aws rds create-db-instance \
--db-instance-identifier mysql01 \
--allocated-storage 20 \
--db-instance-class db.t3.micro \
--engine mysql \
--master-username root \
--master-user-password 'password' \
--no-multi-az \
--engine-version 8.0.27 \
--storage-type gp2 \
--no-publicly-accessible \
--no-enable-performance-insights \
--no-auto-minor-version-upgrade


-- 3. テンプレートファイル作成

 

vim a.yaml

AWSTemplateFormatVersion: "2010-09-09"
Description: Provision RDS

Resources:

  RDS: 
    Type: AWS::RDS::DBInstance
    Properties: 
      DBInstanceIdentifier: mysql01
      Engine: MySQL
      EngineVersion: 8.0.27
      DBInstanceClass: db.t3.micro
      AllocatedStorage: 20
      StorageType: gp2
      MasterUsername: root
      MasterUserPassword: 'password'
      PubliclyAccessible: false
      MultiAZ: false
      AutoMinorVersionUpgrade: false
      EnablePerformanceInsights : false
      BackupRetentionPeriod: 1
      Tags: 
        - Key: Name
          Value: mysql01
    DeletionPolicy: Delete

 


aws cloudformation validate-template \
--template-body file://a.yaml

 


aws cloudformation get-template-summary \
--template-body file://a.yaml

 

-- 4. 既存のリソースからのスタックの作成

vim resourcesToImport.txt
[
  {
      "ResourceType":"AWS::RDS::DBInstance",
      "LogicalResourceId":"RDS",
      "ResourceIdentifier": {
        "DBInstanceIdentifier":"mysql01"
      }
  }
]

aws cloudformation create-change-set \
--stack-name stack01 \
--change-set-name cs01 \
--change-set-type IMPORT \
--resources-to-import file://resourcesToImport.txt \
--template-body file://a.yaml

 

aws cloudformation list-change-sets \
--stack-name stack01


aws cloudformation describe-change-set \
--change-set-name cs01 \
--stack-name stack01

aws cloudformation execute-change-set \
--change-set-name cs01 \
--stack-name stack01


-- 5. ドリフト検出

aws cloudformation detect-stack-drift \
--stack-name stack01

aws cloudformation describe-stack-drift-detection-status \
--stack-drift-detection-id 11111111-2222-3333-4444-555555555555

aws cloudformation describe-stack-resource-drifts \
--stack-name stack01


ドリフトが検出された場合、テンプレート設定を修正するか、リソースを直接更新します。

 


-- 6. スタック一覧


aws cloudformation describe-stacks \
--stack-name stack01

-- 7. スタックリソース一覧

aws cloudformation describe-stack-resources \
--stack-name stack01

-- 8. テンプレート確認

aws cloudformation get-template-summary \
--stack-name stack01

aws cloudformation get-template \
--stack-name stack01

 


-- 9. クリーンアップ


-- スタック削除
aws cloudformation delete-stack \
--stack-name stack01