AWSクラウドの環境を効率化するAWS CDKとは

ますますクラウド環境への依存が高まる中で、クラウドを効率よく運用することが企業のDXの課題にもなっています。そこで今回はAWSクラウドの環境構築を効率化するAWS CDKについて紹介したいと思います。

AWSクラウドの環境を効率化するAWS CDKとは

クラウド構築の際の課題

AWSクラウドインフラストラクチャーを構築する方法には色々なやり方があります。一般的な方法はAWSコンソールの手順に沿ってサービスを登録していきますが、欠点がたくさんあります。

例えば、大規模のAWS設計の場合、手順が膨大で設定にはすごく手間かかって間違いやすいです。もし、うまく行ったとしても同じ設定を別のリージョンに展開したい場合は、もう一度同じ手順でサービスを設定する必要があります。

この問題に対してAWSは現時点では二つの方法を提供しています。

  1. CloudFormation
  2. AWS CDK
AWSクラウドインフラストラクチャーを構築する方法には色々なやり方があります。
AWSクラウドインフラストラクチャーを構築する方法には色々なやり方があります。

なぜCloudFormationではなくCDKがよいか

AWS Cloudformationは、インフラストラクチャをコードとして扱うことで、AWSおよびサードパーティーのリソースをモデル化、プロビジョニング、管理することができます。

Product page diagram CloudFormation
Product page diagram CloudFormation

CloudFormationはYAMLファイルでAWSサービスを設定してデプロイするので、YAMLファイルを再利用することができます。

例:S3の登録

Resources:

  MyS3Bucket:

    Type: AWS::S3::Bucket

    Properties:

      AccessControl: PublicRead

      BucketName: “MyBucket”

もし、複雑な設計でも別のリージョンや別のアカウントでデプロイする場合、5分ぐらいかかります。

ですが、不便なこともあります。

  1. 大規模なクラウドアーキテクチャの構築ではYAMLファイルが大きくなります。
  2. YAMLファイルで作業するのは難しいケースがある(YAMLの知識が必要)。
  3. コピーペーストが多いため間違いやすい。
  4. サードパーティーサービスの組み込みが難しい。(自動テストなど)

上記のような理由で管理者と開発者はYAMLベースでのCloudformationの運用を避け、CDKが主流になるべく話題になっています。

AWS CDKのメリットは

AWSCDKは、使い慣れたプロビジョニング言語を使用してクラウドアプリケーションリソースを定義するためのオープンソースのソフトウェア開発フレームワークです。

CloudFormationを使用したいなら、YAMLファイルの書き方を勉強する必要があります。AWSCDKでは新たに学習すべきことがないため、AWSへのオンボーディングを加速します。既存のスキル(プログラミング言語)やツール(VSCode、Sublime、VisualStudioなど)の使用が可能です。また同じアーキテクチャ設計では、CloudFormationの場合は500行以上のコードを記述しますが、CDKの場合はたった30行だけ済む場合もあります。

AWS CDKのメリットは

現在、CDKは下記のプログラミング言語をサポートしています。

  1. Typescript
  2. Javascript
  3. Python
  4. Java
  5. C#
  6. Go

すべての言語ではないですが、上記の言語ならほとんどの開発者は利用できます。一番人気の言語はTypescriptです。

また、もう一つのメリットは再利用できるということです。

また、もう一つのメリットは再利用できるということです。

例えばCloudFormationで、DynamoDBの2つTablesを登録したい場合、下記のフォーマットを2回書いて設定する必要があります。そのためYAMLファイルはフロントエンドの進行に従って大きくなります。

Type: AWS::DynamoDB::Table

Properties

  AttributeDefinitions: 

    – AttributeDefinition

  GlobalSecondaryIndexes: 

    – GlobalSecondaryIndex

  KeySchema: Json

  ProvisionedThroughput: 

    ProvisionedThroughput

  TableClass: String

  TableName: String

  Tags: 

    – Tag

  TimeToLiveSpecification: 

    TimeToLiveSpecification

CDKの場合、まずDynamoDBのTableのGenericTableクラスを作成してTableを登録したい時、下記のコードのように呼び出すだけです。

private myTable = new GenericTable(this, {

        tableName: ‘MyTables’,

        primaryKey: ‘objectId’,

    })

また、同じ処理でこのようなアーキテクチャも再利用によって別のアーキテクチャに組み込むことができます。

AWS CDKのメリットは

AWS CDKのデメリットは

One-At-The-Timeのデプロイ

AWSCDKはCloudFormationのYAMLファイルを自動で作成するため、デプロイには時間がかかります。

複数のタスクがあるアプリの場合、並行してデプロイして時間が短縮することもできます。

残念ながら、現時点ではローカルパソコンで平行デプロイは不可です。しかし、将来AWSはその問題でconcurrencyオプションを追加して解決できると期待しています。

まとめ

まとめとして、AWS CDK は、インフラストラクチャエンジニアやDevOps エンジニアと開発者のギャップを埋めるために有効な解決策となります。開発者もTypeScript や Python などの言語でインフラストラクチャを定義できるようにすることで、これらの間のギャップを埋めるための非常に有望なツールだと思います。 

AWS CDKを利用するとAWSインフラの管理のコストが削減できます。さらにCDKの中にServerlessフレームワークも組み込むことでServerlessアプリの定義も分かりやすくなります。

従来のCloudFormationに比べてプロジェクト管理が容易になります。APIもインフラも同じ場所で環境ごとのソースコードを共通にできることで、環境設定時のヒューマンエラーも改修コストも削減することができます。

無料相談・お問い合わせ
ご相談やお見積もりは全て 無料 で対応いたします。

    「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
    入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
    無料相談・お問い合わせ
    ご相談やお見積もりは全て 無料 で対応いたします。

      「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
      入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
      無料相談
      お問い合わせ