🐨

AWS CDKについて、改めて調べました。

に公開

なんとなく使っていたAWS CDKですが、なんなんだろうと思ったので、改めて調べてみました。
私もまだまだ初心者すぎるので、CDKってなに??、使って見たいかも〜という人向けです。

AWS CDKとは?

  • Infrastructure as Code(IoC)(インフラをコードで管理!)を実現する開発キット
    • AWSリソースの作成/更新を、AWSコンソールでぽちぽちするのではなく、コードを書いて実現する
    • 似たようなツールとしては、Terraform や CloudFormationなどが挙げれる
  • CDKで書かれたコードが、CloudFormation テンプレートに変換されて、デプロイ(リソース作成/変更)される
    • 結局CloudFormationのラッパー的な感じだとおもいます、、(多分)

いいなと思うところ

CDKならでは

  • 慣れ親しんだ言語でコードを書けるところ
    • サポートしている言語: TypeScript, JavaScript, Python, Java, C#/.Net, Go
  • 意味が理解しやすいかもしれないところ
    • CloudFormation(yaml/json)は、設定ファイルを書いているような感じがするが、CDKはリソースを作っている感じがします。可読性が上がっているように感じます!(個人の感想)
    • コード例(chatGPTに作成してもらった)
      CloudFormation
      AWSTemplateFormatVersion: '2010-09-09'
        Resources:
          MyBucket:
            Type: AWS::S3::Bucket
            Properties:
              WebsiteConfiguration:
                IndexDocument: index.html
        
          MyCloudFrontDistribution:
            Type: AWS::CloudFront::Distribution
            Properties:
              DistributionConfig:
                Enabled: true
                Origins:
                  - DomainName: !GetAtt MyBucket.DomainName
                    Id: S3Origin
                    S3OriginConfig: {}
                DefaultCacheBehavior:
                  TargetOriginId: S3Origin
                  ViewerProtocolPolicy: redirect-to-https
                  ForwardedValues:
                    QueryString: false
                DefaultRootObject: index.html
      
      CDK
      import * as cdk from 'aws-cdk-lib';
      import { Stack, StackProps } from 'aws-cdk-lib';
      import * as s3 from 'aws-cdk-lib/aws-s3';
      import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
      import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
        
      export class MySiteStack extends Stack {
        constructor(scope: cdk.App, id: string, props?: StackProps) {
            super(scope, id, props);
        
            const bucket = new s3.Bucket(this, 'MyBucket', {
              websiteIndexDocument: 'index.html',
              publicReadAccess: true,
            });
        
            new cloudfront.Distribution(this, 'MyDistribution', {
              defaultBehavior: {
                origin: new origins.S3Origin(bucket),
                viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
              },
              defaultRootObject: 'index.html',
            });
          }
        }
      

IoC共通

  • 変更履歴がわかるとこと
    • AWSコンソールでぽちぽち変更すると、いつ、なぜ変更したかわからなくなりますが、コード管理しているので、変更履歴が残ります!また、レビューもしやすいです。
    • また、失敗した時も前のバージョンに戻すことが容易です。コンソールで変更した場合、あれ?もともとどういう設定だったかな?となるのが、あるあるです。
  • 再利用しやすいこと
    • 同じインフラ構成なら、コピペして、設定値変えて、デプロイ!ができます

悪いかもしれないところ

  • 学習コスト、めんどくささ
    • 普段はアプリ開発していて、たまにCDKでインフラを変更するくらいなので、毎回調べながら、、という感じです。
    • 急いでいる時などは、CDKの開発環境構築などをするのに時間がかかってしまうのが、難点になります。緊急対応などは、AWSコンソールからの方が良い気がします。

CDK以外のIoCツールを使ったことがないので、他と比べての弱点などはわかりません、、。もっと他にも悪い点はあるかもしれません。

まとめ

  • CDKさいこー(今のところ)

参考

Discussion