🐨
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
CDKimport * 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