TOPコラム一覧AWS CDK 入門 - ユースカジノ 口コミの基本

AWS CDK 入門 - ユースカジノ 口コミの基本

はじめに

本記事は CDK ユースカジノ 口コミの入門記事です。
CDK のユースカジノ 口コミに興味があるが、始め方が分からない方向けに、ユースカジノ 口コミの基本的な内容を整理しました。

前提

本記事は以下を使用する前提で記載しています。

  • Typescript: 5.2.2
  • Jest: 29.7.0
  • CDK: 2.128.0

CDK におけるユニットテスト / ユースカジノ 口コミとは?

まず、CDK ではどのようにユニットユースカジノ 口コミを行うのか説明します。

CDK でユニットユースカジノ 口コミを行う際は、アプリの開発と同様に、各言語で使用される一般的なテスティングフレームワーク(Typescript で言えば jest 等)を使用してユースカジノ 口コミコードを実装できます。

また、公式から CDK のユースカジノ 口コミを支援するためのモジュールが提供されているため、通常、これらを使用してユースカジノ 口コミコードを書きます。

ユースカジノ 口コミモジュール 説明
ユースカジノ 口コミ
(Fine-GrainedAssertion Test)
  • CDK スタックから合成した CloudFromation テンプレートに対して、リソースが特定のプロパティを持つかユースカジノ 口コミするために使用する。
  • 作成しておくことで、改修やリファクタリングの際の回帰ユースカジノ 口コミに役立つ。
スナップショットユースカジノ 口コミ
(Snapshot Test)
  • CDK スタックから合成した CloudFormation テンプレートに対して、以前保存したテンプレートとの差分を比較する。
  • リファクタリングの際に構成の変更がないことを確認する場合や軽微なパラメータ変更の差分を確認するために使用する。

ユースカジノ 口コミは伝統的なインフラ構築における、単体テスト(パラメータ確認)に相当するイメージです。
スナップショットユースカジノ 口コミはコードを修正した際に、テンプレートが構成するリソースの内容の更新箇所を把握するために使用します。

因みに、上記はいずれも AWS 環境ではなく、コードに対してユースカジノ 口コミを行います。 余談にはなりますが、リソースを作成して、ユースカジノ 口コミしたい場合は、CDK integ-tests / integ-rnnnerがあります。(現時点では、アルファ版の公開)

CDK ユースカジノ 口コミの基本解説

CDK Assertion test モジュールの基本的な説明をします。

CDK ユースカジノ 口コミの基本クラス

Template

CDK スタックのユースカジノ 口コミスイートになります。
簡単に言うと、Template に CDK スタックを入力し、Template を作成すると、スタックから合成されたCloudFormation テンプレートに対する各種ユースカジノ 口コミができるようになります。

テンプレートクラスでは、例えば以下のようなユースカジノ 口コミ用のメソッドが提供されています。

  • ユースカジノ 口コミ: resourceCountIs()
  • 特定のユースカジノ 口コミにおける、指定のプロパティを持つリソースをカウントする。: resourcePropertiesCountIs()
  • 特定のユースカジノ 口コミにおける、指定のプロパティを持つリソースが存在するか確認する。: hasResourceProperties()

CDK API リファレンス / aws-cdk-lib.assertions.Template

Match

パラメータの一致条件です。例えば、以下のようなものがあります。

  • 非 Null のいずれかの値に一致: Match.anyValue ()
  • 配列の部分一致: Match.arrayWith ()
  • 配列の正確な一致: Match.arrayEquals ()

マッチャーのメソッド全容は以下の AWS CDK の API リファレンスを参照してください。

CDK API リファレンス / aws-cdk-lib.assertions.Match

CDKのユースカジノ 口コミでは、CloudFromation のリソースプロパティを指定する事でテストします。その為、CloudFromation のリソースタイプを調べる必要があります。

ユースカジノ 口コミを書く際に使うリンク集

ユースカジノ 口コミをやってみる

本セクションでは、CDK のユースカジノ 口コミを実際にやってみます。

サンプルプログラム の準備

以降では、AWS ソリューションコンストラクトのaws-cloudfront-ユースカジノ 口コミをユースカジノ 口コミ対象として、ユースカジノ 口コミコードを記載しています。

AWS Solutions Constructs / aws-cloudfront-ユースカジノ 口コミ

AWS Solution コンストラクトは AWS が提供しているCDKのテンプレートです。

CDK アプリの準備

以下を実行して、CDK アプリのテンプレートを作成します。

cdk init app --language typescript # cdk アプリのひな形を作成する。
npm i -S @aws-solutions-constructs/aws-cloudfront-ユースカジノ 口コミ # aws-cloudfront-ユースカジノ 口コミ ソリューションコンストラクトのインストール

jest はcdk init appにより、インストールされます。

ディレクトリ構成

以降では、以下にユースカジノ 口コミコードファイルを作成して、ユースカジノ 口コミコードを記述していきます。

.
└── test
    └── cloudfront-s3-construct.test.ts // コンストラクトに対するユースカジノ 口コミコード

ユースカジノ 口コミの実行

まずは、ユースカジノ 口コミコードを流してみます。

ユースカジノ 口コミコードの記述

本記事では、test/cloudfront-ユースカジノ 口コミ-construct.test.tsの中身を次のように実装します。

{
    template.resourceCountIs("AWS::CloudFront::Distribution", 1);
  });
});

ユースカジノ 口コミコードを書くためには、CloudFormation の知識が必要ですが、手が止まってしまったら生成AIに頼りましょう。
例えば、AWS CodeWhisperer (※AWSのAI コードジェネレータサービス) を使用することで、単純なユースカジノ 口コミケースであれば、高精度で作成できます。

ユースカジノ 口コミ実行

以下のコマンドで、jest を実行します。

  • 全体のユースカジノ 口コミファイルを実行
npx jest

※実行するユースカジノ 口コミファイル範囲は、jest.config.jsにて、指定ができます。

  • 指定したユースカジノ 口コミファイルを実行
npx jest {ファイルパス}

実行結果は以下になります。

実行結果
ユースカジノ 口コミが成功し、コンストラクトの中に CloudFront が 1 リソース存在しているのが分かります。

ユースカジノ 口コミ

ユースカジノ 口コミパターン集

Template クラスのメソッド毎によく使用するユースカジノ 口コミパターンをまとめます。
また、エラーの出力例も記載しており、メソッド毎どのようなエラーが出力されるのか参考にしてください。

No. ユースカジノ 口コミパターン サンプル 使用する Template メソッド
1 ユースカジノ 口コミ。 ユースカジノ 口コミ バケットの数量を確認する。 resourceCountIs(type, count)
2 特定のユースカジノ 口コミにおける、指定のプロパティを持つリソースをカウントする。 ユースカジノ 口コミ。 resourcePropertiesCountIs(type,props, count)
3 特定のユースカジノ 口コミにおける、指定のプロパティを持つリソースが存在するか確認する。 CloudFront がアクセスログを出力することをを確認する。 hasResourceProperties(type, props)
4 特定のユースカジノ 口コミの全てのリソースが指定のプロパティを持つか確認する。 全ての ユースカジノ 口コミ Bucket がバージョニングを有効にしていることをを確認する。 allResourcesProperties(type, props)
5 ユースカジノ 口コミ。(応用) CloudFront アクセスログ用のバケットのバージョニングが有効であることを確認する。 findResources(type, props?)

1. ユースカジノ 口コミ

ユースカジノ 口コミコード

resourceCountIsを使用して、ユースカジノ 口コミ バケットの数量を確認する。

{
  template.resourceCountIs("AWS::ユースカジノ 口コミ::Bucket", 4);
});

エラー出力例

数量を 4 から 3 にして実行してみます。
失敗の場合、resourceCountIsでは、ユースカジノ 口コミの実際の数量が出力されます。

ユースカジノ 口コミ

2. 特定のユースカジノ 口コミにおける、指定のプロパティを持つリソースをカウントする

ユースカジノ 口コミコード

resourcePropertiesCountIsを使用して、ユースカジノ 口コミ。

{
  template.resourcePropertiesCountIs(
    "AWS::ユースカジノ 口コミ::Bucket",
    {
      LoggingConfiguration: Match.anyValue(),
    },
    2,
  );
});

エラー出力例

数量を 2 から 3 にして実行してみます。
resourcePropertiesCountIsでは、ユースカジノ 口コミの実際の数量が出力されます。

ユースカジノ 口コミ

3. 特定のユースカジノ 口コミにおける、指定のプロパティを持つリソースが存在するか確認する

ユースカジノ 口コミコード

hasResourcePropertiesを使用して、CloudFront がアクセスログを出力することをを確認する。

{
  template.hasResourceProperties("AWS::CloudFront::Distribution", {
    DistributionConfig: {
      Logging: {
        Bucket: Match.anyValue(),
      },
    },
  });
});

hasResourceProperties は条件に一致するユースカジノ 口コミが1つでもあれば、Pass します。
その為、複数のユースカジノ 口コミが条件に一致することが期待される場合には、allResourcesProperties を使用します。

エラー出力例

Logging Bucket が指定されていないことをユースカジノ 口コミするように修正してみます。(Match.anyValue()の部分をMatch.absent()に変更する。)
失敗の場合、hasResourcePropertiesでは、実際のユースカジノ 口コミのプロパティとエラー箇所が出力されます。

4. 特定のユースカジノ 口コミの全てのリソースが指定のプロパティを持つか確認する

ユースカジノ 口コミコード

全ての ユースカジノ 口コミ Bucket がバージョニングを有効にしていることを確認する。

{
  template.allResourcesProperties("AWS::ユースカジノ 口コミ::Bucket", {
    VersioningConfiguration: {
      Status: "Enabled",
    },
  });
});

エラー出力例

全ての S3 Bucket: バージョニングが有効でないことをユースカジノ 口コミするように修正してみます。(Enabledの部分をDisabledに変更する。)
失敗の場合、allResourcesPropertiesでは、条件に一致しないユースカジノ 口コミ論理 ID の一覧が出力されます。

5. ユースカジノ 口コミ(応用)

特定のユースカジノ 口コミのプロパティチェックをする場合、運用でタグや物理名の命名規則があれば、それを条件に指定することもできますが、ない場合は論理 ID を使用します。

ユースカジノ 口コミコード

CloudFront アクセスログ用のバケットのバージョニングが有効であることを確認する。

{
  // 条件に合致するリソースのオブジェクトを取得
  const resources = template.findResources("AWS::S3::Bucket", {
    Properties: {
      VersioningConfiguration: {
        Status: "Enabled",
      },
    },
  });
  // resourcesのキーが論理IDなので、resourcesに指定の論理IDが含まれるかユースカジノ 口コミする。
  expect(resources).toHaveProperty("CloudFrontToS3CloudfrontLoggingBucket8350BE9B");
});

findResourcesで取得した Object に論理 ID が含まれていることをユースカジノ 口コミしています。

エラー出力例

CloudFront アクセスログ用 S3 Bucket: バージョニングが有効でないことをユースカジノ 口コミするように修正してみます。(論理 IDCloudFrontToユースカジノ 口コミCloudfrontLoggingBucket8350BE9Bの部分をdummyに変更する。)
失敗の場合、findResources の結果オブジェクトが出力されます。

リソース間の参照をユースカジノ 口コミする方法

リソース間の参照をユースカジノ 口コミする必要がある場合があります。
例えば、Cloudfront のログ出力設定に特定の S3 バケットが設定されているかをユースカジノ 口コミしたいケースです。
この例では、Cloudformation テンプレートは以下になります。

CloudFormation テンプレート

CloudFrontToユースカジノ 口コミCloudFrontDistribution241D9866 :: {
  "Type": "AWS::CloudFront::Distribution",
  "Properties": {
      "DistributionConfig": {
          "Logging": {
              "Bucket": {
                  "Fn::GetAtt": [ "CloudFrontToユースカジノ 口コミCloudfrontLoggingBucket8350BE9B", "RegionalDomainName" ]
              }
          },
          ...
      }
  },
}

この時、ユースカジノ 口コミBucket 論理 ID "CloudFrontToユースカジノ 口コミCloudfrontLoggingBucket8350BE9B"はどのように取得すればよいでしょうか?
2 パターンの方法があります。

1.hasResourcePropertiesで失敗させ、エラー出力の論理 ID を見て取得する方法

AWS CDK Workshopで紹介されている方法です。

プロダクトコードで"CloudFront アクセスログバケット"にアクセスログを出力する CloudFront が存在している状態で、次のようなユースカジノ 口コミコードを書いて実行し、わざと失敗させます。

ユースカジノ 口コミコード

{
  template.hasResourceProperties("AWS::CloudFront::Distribution", {
    DistributionConfig: {
      Logging: {
        Bucket: "Dummy",
      },
    },
  });
});

"CloudFront アクセスログバケット" の論理 ID を"Dummy"に指定して失敗させます。

実行結果

上記の実行結果に論理 ID が出力されるので、これを見て修正します。
S3 Bucket の論理 ID「CloudFrontToS3CloudfrontLoggingBucket8350BE9B」が含まれているので、「CloudFront アクセスログバケット」だということを確認して、ユースカジノ 口コミコードを修正します。

ユースカジノ 口コミコード

{
  template.hasResourceProperties("AWS::CloudFront::Distribution", {
    DistributionConfig: {
      Logging: {
        Bucket: {
          "Fn::GetAtt": ["CloudFrontToユースカジノ 口コミCloudfrontLoggingBucket8350BE9B", "RegionalDomainName"],
        },
      },
    },
  });
});

論理IDはコンストラクトIDやパスが変更されると、論理IDも変更されるため注意してください。
ただし、論理IDが変更されるとリソースもリプレースになり、一般的に、検知したい内容だと思いますので、ユースカジノ 口コミが失敗するのは問題ないはずです。

2.findResourcesで論理 ID を指定して検索する方法。

最初の方法で、ユースカジノ 口コミの失敗結果から取得する方法にしっくり来ない方もいるかと思います。
その場合k、次のような方法も考えられます。
※ この方法の場合、「CloudFront アクセスログバケット」を一意に特定するキー情報(タグや物理名等)が必要です。

ユースカジノ 口コミコード

{
  // Nameタグ等をキーにfindResourcesで論理IDのリストを取得。
  const bucketLogicalIds = Object.keys(
    template.findResources("AWS::ユースカジノ 口コミ::Bucket", {
      Properties: {
        Tags: Match.arrayWith([
          {
            Key: "Name",
            Value: "CloudFrontAccessLogBucket",
          },
        ]),
      },
    }),
  );
  // 論理IDが一意であることを確認
  expect(bucketLogicalIds).toHaveLength(1);

  // CloudFrontのプロパティにユースカジノ 口コミ バケットの論理IDを指定する。
  template.hasResourceProperties("AWS::CloudFront::Distribution", {
    DistributionConfig: {
      Logging: {
        Bucket: {
          "Fn::GetAtt": [bucketLogicalIds[0], "RegionalDomainName"],
        },
      },
    },
  });
});

まとめ

今回は、CDK ユースカジノ 口コミの基本について解説しました。

カジノゲームは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ



【著者プロフィール】

山本 和輝(やまもと かずき)

伊藤忠テクノソリューションズ株式会社 クラウドアーキテクト

クラウドネイティブ技術を活用したシステム基盤の提案・構築や内製化支援等の案件を担当。

TOPコラム一覧AWS CDK 入門 - ユースカジノ 口コミの基本

pagetop