AWS-CloudFormation

CloudFormation-Include CDK Moduleを使ってみる2

概要

こんにちは、テクニカルサポートの牛山です。
今回は、前回に引き続き「CLOUDFORMATION-INCLUDE CDK MODULEを使ってみる」に関する記事の第2回目となります。

目的

AWSの 「CloudFormationスタックをCDKコードに移行したリソースをコードベースで変更」 することを理解する。

ゴール

「AWS CDKコマンドを用いてAWSリソースを操作」 できる。

前提条件

  • AWSアカウント
  • 前回、第1回目のすべて網羅し完了している。

前置き

前回、第1回目の記事では「AWS CDKコマンドでCLOUDFORMATION-INCLUDE CDK MODULEを導入し、既存、CloudFormationスタックをCDKに移行する」ところまで解説しました。
※ CLOUDFORMATION-INCLUDE CDK MODULEを使ってみる

今回は実際に、コードに変更を加えていきAWSリソースの操作します。

手順

ソースコード修正

前回、記事で作成した 「my_cicm_proj」 プロジェクトディレクトリ直下に移動します。
修正しないと既存CloudFormationスタック存在するエラーがでますので注意

エクスポートクラス等が [プロジェクトファイル名 +「Stack」] になっていますので [CloudFormationスタック名] へ変更します。
※ 前回記事で作成したスタック名

これから、編集および参照するファイルの位置

my_cicm_proj
├─ bin
│   │
│   ├─ my_cicm_proj.ts
│
├─ lib
│   │
│   ├─ my_cicm_proj-stack.ts

[ec2-user@dev my_cicm_proj]$ vi lib/my_cicm_proj-stack.ts

import * as cdk from '@aws-cdk/core';
import * as cfn_inc from '@aws-cdk/cloudformation-include';

- export class MyCicmProjStack extends cdk.Stack {
+ export class MigrationStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here
    const cfnInclude = new cfn_inc.CfnInclude(this, 'Template', {
      templateFile: 'migrationStackTemplate.json',
    });

挿入行は「+」、削除行については「-」から始まる行で示される。


[ec2-user@dev my_cicm_proj]$ vi bin/my_cicm_proj.ts

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
- import { MyCicmProjStack } from '../lib/my_cicm_proj-stack';
+ import { MigrationStack } from '../lib/my_cicm_proj-stack';

const app = new cdk.App();
- new MyCicmProjStack(app, 'MyCicmProjStack');
+ new MigrationStack(app, 'MigrationStack');

挿入行は「+」、削除行については「-」から始まる行で示される。


デプロイ

「cdk deploy」 コマンドでデプロイします。
実行すると下記のように出力され、既存MigrationStackを使用していることが分かります。

[ec2-user@dev my_cicm_proj]$ cdk deploy

MigrationStack: deploying...
MigrationStack: creating CloudFormation changeset...
・・・[中略] (2/2)

 ✅  MigrationStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:************:stack/MigrationStack/d83b0940-271b-11eb-a40f-067778e87df6

デプロイコマンドを実行した後に 「cdk diff」 コマンドで差分を確認すると差分がないことをが報告されます。

[ec2-user@dev my_cicm_proj]$ cdk diff

Stack MigrationStack
There were no differences

コードベースでリソースの変更

さて、いよいよコードベースでリソースを変更します。
前行程でも編集した「my_cicm_proj-stack.ts」を編集します。

今回は、S3ライブラリ内に存在する 「AWS::S3::Bucket PublicAccessBlockConfiguration」 を使用し、 バケット内のオブジェクトのパブリックアクセス制御リスト(ACL)をブロックするかどうかを指定します。
BlockPublicAclsリファレンス

それでは、コードを編集します。
blockPublicAcls: true とするのでブロックする形になります。

[ec2-user@dev my_cicm_proj]$ vi lib/my_cicm_proj-stack.ts

import * as cdk from '@aws-cdk/core';
import * as cfn_inc from '@aws-cdk/cloudformation-include';
+ import * as s3 from '@aws-cdk/aws-s3';

export class MigrationStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here
    const cfnInclude = new cfn_inc.CfnInclude(this, 'Template', {
      templateFile: 'migrationStackTemplate.json',
    });

+    const cfnBucket = cfnInclude.getResource('Bucket') as s3.CfnBucket;

+    cfnBucket.publicAccessBlockConfiguration = {
+      blockPublicAcls: true,
+    };
  }
}

挿入行は「+」、削除行については「-」から始まる行で示される。

上記、編集後、 diff コマンドを実行すると下記のように 「BlockPublicAcls":true」 という差分が出力されることを確認します。

[ec2-user@dev my_cicm_proj]$ cdk diff

Stack MigrationStack
Resources
[~] AWS::S3::Bucket Template/Bucket Bucket 
 └─ [+] PublicAccessBlockConfiguration
     └─ {"BlockPublicAcls":true}

差分が確認できたので、 「cdk deploy」 コマンドでデプロイし適用します。

[ec2-user@dev my_cicm_proj]$ cdk deploy

MigrationStack: deploying...
MigrationStack: creating CloudFormation changeset...
・・・[中略] (2/2)

 ✅  MigrationStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:***********:stack/MigrationStack/d83b0940-271b-11eb-a40f-067778e87df6

適用後、 「cdk diff」 コマンドで 「There were no differences」 と出力されることを確認します。

[ec2-user@dev my_cicm_proj]$ cdk diff

Stack MigrationStack
There were no differences

AWS S3適用前・適用後比較

適用前

適用後

新しいアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックするオフ から オン へ変わっていることが確認できる。

これでコードベースによるリソース変更ができたことになります。

CloudFormationスタック変更履歴

aws cdkでデプロイコマンドを実行した結果等などの 成功可否履歴 を確認することもできます。

まとめ

無事に、移行したCloudFormationスタックをコードベースでAWSリソースの変更をおこなうことができました。
今回、記事の目的は達成できたので、今度は、CDKコマンド操作で 「テンプレートからリソースを参照する」 をおこなっていけたら良いかなと思っています。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA