・CDKってなに?
CDKについては、ざっくりコードでインフラ構築できる、くらいに認識していたが、業務で触れることになったので一通り勉強したので備忘録としてまとめます。
AWSの公式がyoutubeに講演の動画をあげてくれてたのでそれをみてのまとめになります。
指摘などは大歓迎です。
・CDKとは
自分の慣れ親しんだコード(TypescriptやJava,Pythonなど)でインフラコードを記載できます。
今までは、jsonやyamlなどでインフラエンジニアが主に触るという認識でしたが、CDKによってフロントエンジニアやサーバーサイドエンジニアにも距離の近いものになった。
・CDK発祥の経緯
CDKもJSONのインフラコードも目的は一緒でシステムの環境を構築すること。
その手段としては、以下のものがある。
コンソール:
手動で簡単というメリットはありますが、デメリットとして繰り返し使えない、手動なのでミスが起きやすい、時間がかかる。
cloudFormation:
jsonやyamlで環境を構築する。
今までのものとは、概念として少し違うのは、環境の状況を設定するということ。
例えばCloudFromationを利用して環境を構築した際に、こちらが想定している環境の状況があるが、
現状の環境との差分をAWS側で判断してくれて、差分を実行してくれる。
Doms:
コードで作成できるのが今までのものとは違うところ。コードならではのロジック(if文やfor文など)が利用できる。
ただし、こちらの場合には抽象化という概念は備わっていない。
上記の踏まえて誕生したのがCDK。
CDKはコードかつ抽象化の概念が備わっている。
・CDKってなにしてくれるの?
コードからCloudFormationのテンプレートを作成してくれます。
で、そのままデプロイまでしてくれるという。
・CDKの良さ
- コードでインフラコードを書ける
- コードで書く際には、AWS側で用意されたライブラリがあるので取り組みやすい
- オープンソースなのでユーザー自身で発展させられる
- CloudFormationとの互換性もあり、コードから既存のCloudFormationの読み込みも可能
といった具合に、インフラコードをコードで書けるのに加えて、AWS側の容易してくれてるライブラリによってさらに導入のハードルは低くなっている。
CloudFormationとの互換性もあるので、今までの資産も無駄になることはない。
・どうやって始めるの
この部分は動画を実際に見た方がよいかと思います。
※タイトルが英語ですが、内容は日本語なので安心を。
- 11:05 how to use AWS CDK(全体説明)
- 11:30 環境の準備(詳細は13:10くらいから)
- 17:00 Typescriptのdemo
- 23:30 pythonのdemo
※他にもjava,C#でも紹介されています。
※個人的メモ:CDK内ではAWS CLIを利用しているため認証情報の設定が必要
・CDKのコアコンセプトについて
CDKに触れていると,App,Stack,Construct,Enviroment,Context,SSMが出てくるが、それらの要素がどのように関係しているのか。
APP:
CDKのコードの中での最上位の要素。複数のStackとの依存関係を定義している。
###Stack:
デプロイ可能な最小単位。複数のConstructとの依存関係を定義している。
###Construct:
Stack内の1リソース。(S3,CloudWatchなど)
既存のConstructを継承して、独自のConstructを作成することもできる。
Enviroment:
デプロイ先のアカウントとリージョンの組み合わせ。図では、appと紐づいている。
Context:
各種パラメータをkey-value型で定義する仕組み。
CDKコードで既存リソースを取得可能。コンソールで作成したリソースに対して追加設定などもできる。
SSM parameterStore / Secret Manager:
cdk synth時またはデプロイ時に値を取得する。
コードで特定の値を管理する場合にはcdk.jsonで管理できるが、複数人で管理したりする場合などには、ストアされた情報を共有で使うことができる。
いつあたいを持ってくるかについては、synthを実行した時や実際にデプロイするときなどは、設定できる。
SecretManagerに関しては、基本的にセキュアなものを取り扱うが、記載場所を間違えると漏えいにつながるので要注意。
・cdkのバージョンについて
1週間に1度くらいマイナーバージョンアップしているとのこと。
さすがに毎週アップデートは現実的ではないと思うので、チームでcdkのバージョン運用については話す方がよいと思います。
・ちょっと重要そうなメモ
トラブルがあった際には大体GitHubのIssuesに記載されてるのでそこを見てみるとよいとのこと。
https://github.com/aws/aws-cdk/issues
・CDK DIveDeepについて
CDK自体の開発(自分でパッケージ作成したりする人?)向けのお話らしいので私は見ていません。興味のある方は52:30くらいからどうぞ!