adventar.orgこんにちは!!こんにちは!!インフラエンジニアのyamamotoです。AWSのリソースを作成・修正するのに、CloudFormationを使うととても便利に作れますね。ループ処理できなかったり、生のYAMLが見づらかったりと面倒なこともあります。Kit(CDK)を使うと、CloudFormationスタックを手軽に作ることができます!しかしCDKについてはまだまだ情報が少なく、思い通りに扱うのも割と大変です。ここでは私がCDKを使っていてつまづいた点を共有させていただきます。※当ブログのコードはTypeScriptで記載しています。マルチスタックにするときはこうするネット上のCDKのサンプルはシングルスタック(CloudFormationスタック一つで実行する)で扱われたものが多くあります。見通しがよく、一気にいろいろなリソースが構築できるので便利ですね。実際の運用を考えると、VPCはVPCだけ、EC2はEC2だけ、というように、それぞれのリソースで別々に実行したくなってきます。そこで、CDKではマルチスタックにできるようになっているのですが、マルチスタックのサンプルがあまり無いので、どういう書き方がスタンダードなのか分かりづらかったです。結局、CDKのマルチスタック対応は、このように書きました。'baz-stack');単純に、このような感じで並べて書きました。一つ一つ書くのが面倒なのですが、プログラムですし、色々なやり方があると思います。実行するときは、下記のように引数で実行したいスタックを指定します。foo-stackEKSでは既存のVPCを読むときにSubnetが無いとダメせっかくなのでKubernetesをやりましょう。CDKでEKSクラスタを作成して、でも既存環境があるので既存のVPCを読み込みたい、というときはVpc.fromLookup()メソッドを使います。VPCを読み込んでEKSクラスターを作成しようとするとエラーが出てしまいます。これもいろいろ探してみたものの事例が無く、原因もわかりませんでした。あれこれ試してみたところ、EKSに読み込ませるVPCにはパブリックサブネットとプライベートサブネットが定義されてないとダメだとわかりました。パブリック?プライベート?なんだかわからない定義ですが、要はインターネットゲートウェイにルーティングされたサブネットか否か、というだけのようです。VPCスタックでサブネットを作ってVPCを読み込むように書いて、とやってもやはりエラーになります......なんで?どうもVPCを読み込むときは、サブネットの作成がCDKコードに記載されていてもダメで、サブネットが実在していないと通らないようでした。サブネットを作成するスタックを先に実行して、作成が済んでからVPCを読み込ませるようなスタック構成にしないとうまく動きません。});上記の例では、VpcStack()内でサブネットを作成して、その後外でVpc.fromLookup()を実行しています。このようにすることで、サブネットが作成された状態でVPCを読み込むことができます。EKSマスターロールにはパスを付けてはダメさて、あれこれ試しながらようやくCDKでEKSクラスタを立ち上げました。kubectlで接続できなくなってしまいました。ロールを見直してもだめ、何度やっても不可思議なエラーが出てしまう。これは一体なんなんだろう。});ロールにパスを追加しようとしたのには訳があって、CDKで取り扱うロールを明示的に区分けしたかったからなのですが、まさかEKS側で対応していないとは......とはいえ、日進月歩で進化しているAWSですから、そのうち対応するでしょう。早く対応してほしいなぁ。さいごにCDKはまだまだ発展途上ではありますが、未来を感じさせるソリューションですね。昔から考えると、コードでネットワークを構築してサーバーを立ち上げる、とか想像もつかないですよね。便利に快適なインフラ環境になっててワクワクします。CDKでALBを作成するこんにちは!!こんにちは!!インフラエンジニアのyamamotoです。プッシュできないファイルがあると思ったら、仕様が変わってたmorishitaです。入門してみましたmorishitaです。インフラエンジニアのyamamotoです。(9)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。