ますますクラウド環境への依存が高まる中で、クラウドを効率よく運用することが企業のDXの課題にもなっています。そこで今回はAWSクラウドの環境構築を効率化するAWS CDKについて紹介したいと思います。
クラウド構築の際の課題
AWSクラウドインフラストラクチャーを構築する方法には色々なやり方があります。一般的な方法はAWSコンソールの手順に沿ってサービスを登録していきますが、欠点がたくさんあります。
例えば、大規模のAWS設計の場合、手順が膨大で設定にはすごく手間かかって間違いやすいです。もし、うまく行ったとしても同じ設定を別のリージョンに展開したい場合は、もう一度同じ手順でサービスを設定する必要があります。
この問題に対してAWSは現時点では二つの方法を提供しています。
- CloudFormation
- AWS CDK
なぜCloudFormationではなくCDKがよいか
AWS Cloudformationは、インフラストラクチャをコードとして扱うことで、AWSおよびサードパーティーのリソースをモデル化、プロビジョニング、管理することができます。
CloudFormationはYAMLファイルでAWSサービスを設定してデプロイするので、YAMLファイルを再利用することができます。
例:S3の登録
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: “MyBucket”
もし、複雑な設計でも別のリージョンや別のアカウントでデプロイする場合、5分ぐらいかかります。
ですが、不便なこともあります。
- 大規模なクラウドアーキテクチャの構築ではYAMLファイルが大きくなります。
- YAMLファイルで作業するのは難しいケースがある(YAMLの知識が必要)。
- コピーペーストが多いため間違いやすい。
- サードパーティーサービスの組み込みが難しい。(自動テストなど)
上記のような理由で管理者と開発者はYAMLベースでのCloudformationの運用を避け、CDKが主流になるべく話題になっています。
AWS CDKのメリットは
AWSCDKは、使い慣れたプロビジョニング言語を使用してクラウドアプリケーションリソースを定義するためのオープンソースのソフトウェア開発フレームワークです。
CloudFormationを使用したいなら、YAMLファイルの書き方を勉強する必要があります。AWSCDKでは新たに学習すべきことがないため、AWSへのオンボーディングを加速します。既存のスキル(プログラミング言語)やツール(VSCode、Sublime、VisualStudioなど)の使用が可能です。また同じアーキテクチャ設計では、CloudFormationの場合は500行以上のコードを記述しますが、CDKの場合はたった30行だけ済む場合もあります。
現在、CDKは下記のプログラミング言語をサポートしています。
- Typescript
- Javascript
- Python
- Java
- C#
- 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のデメリットは
One-At-The-Timeのデプロイ
AWSCDKはCloudFormationのYAMLファイルを自動で作成するため、デプロイには時間がかかります。
複数のタスクがあるアプリの場合、並行してデプロイして時間が短縮することもできます。
残念ながら、現時点ではローカルパソコンで平行デプロイは不可です。しかし、将来AWSはその問題でconcurrencyオプションを追加して解決できると期待しています。
まとめ
まとめとして、AWS CDK は、インフラストラクチャエンジニアやDevOps エンジニアと開発者のギャップを埋めるために有効な解決策となります。開発者もTypeScript や Python などの言語でインフラストラクチャを定義できるようにすることで、これらの間のギャップを埋めるための非常に有望なツールだと思います。
AWS CDKを利用するとAWSインフラの管理のコストが削減できます。さらにCDKの中にServerlessフレームワークも組み込むことでServerlessアプリの定義も分かりやすくなります。
従来のCloudFormationに比べてプロジェクト管理が容易になります。APIもインフラも同じ場所で環境ごとのソースコードを共通にできることで、環境設定時のヒューマンエラーも改修コストも削減することができます。