はじめに
この記事は社内向けに作成したIaCのイメージを膨らませるための資料を一部修正したものになります。
誤りのご指摘もお待ちしております。
IaCという単語にどういう印象を抱きますか?
案件でCDKに触れる機会があったため、心得のようなものをここに記します。
なお、AWS CDKについて詳細解説をするような記事ではありません。
また、アプリ開発者と括られることを専門にしている方は、基本的にインフラは専門外ですしインフラの素養は人それぞれです。
そんな方々がどういったステップでIaCに対する理解を深めていくとよいかも記載します。
※私もほぼ素人なのでこのステップだと理解しやすいかもなぁと思った主観をまとめています
AWS CDKの概要
とりあえずCDKについてご存じない方は下記の記事を軽く読んでください。
最初から理解する必要はなく、こんなもんなのかというぐらいで大丈夫です。
IaCの利点
IaCの何が良いのかということにも軽く触れておきます。
IaCは
-
手作業というオペレーションを最小限まで減らしてヒューマンエラーを削減できる
-
コンソール手動操作ではなくコードの定義がデプロイされるため再現性が高い
-
CI/CDと噛み合わせが良いため再デプロイや他環境への転用が容易
という特徴があります。
逆にいえばこれらが必要とされなかったり、活かしきれないようであれば
コストがかかってしまうためIaCである必要はないと言えます。
何より設計が重要で、設計をするためのインフラ知識、対応するIaCツールの知識がなければIaCは使えません。
- ソースコードと同じようにインフラも再現性や保守性を高めたい
- インフラ構成を他プロジェクトへ横展開したい
- インフラ構成を資産として管理しやすくしたい
などの場面でIaCは真価を発揮します。
IaCにおけるAWS CDKの立ち位置
前章でCDKがIaCを実現するための仕組みであることはご理解いただけたかと思います。
ここで素養がある人は、AWSにおけるIaCのもうひとつの代表格であるCloudFormationと何が違うのか疑問に思われた頃でしょう。
とてもざっくりですが、
- CDKはCloudFormationのテンプレートを生成するテンプレートエンジンであり、
- CDKを動かしたときに裏ではCloudFormationが動いている
と言われています。
つまり、CDKはCloudFormationのためのツールと捉える事ができます。
CloudFormationはjsonあるいはyamlでインフラを構築する(できる)という利点はありますが、
-
よりオブジェクトを意識して(かつオブジェクト指向言語を使って)
-
よりパラメータなどを詳細に
という点ではCDKを使用するメリットがあります。
ここで意識していただきたいことはCDKだろうが、CloudFormationだろうが、クラウドインフラ(特にAWS)の知識は必須となることです。
「何を当たり前のことを」と思われるかもしれませんが、「書きやすさ」「実現しやすさ」でどちらを選ぶのかという話でしかなく、「何を」「どういう構成で」構築するのかは両者共通で明確でなければいけません。
これはIaCの大前提でもあります。
IaCを通じた(クラウド)インフラ入門
繰り返しになりますが、IaCで重要なことはインフラを理解していることです。
IaCといえばTerraformもありますね。
こちらも同様に「何を」「どういう構成で」構築するかが明確でないと書き始めることができません。
じゃあインフラに興味あるけどどうしたらいいんだという方に向けて、アプリ開発者がIaCを通じてインフラ入門するためのステップ例を簡単に示します。
①全体を知る
まず大枠として企業およびプロジェクトとしてIaCを導入するまでの道筋についてです。
この記事を読んでいる方はおおよそ「Stage.2 IaC導入」にいる方でしょう。
【IaC導入を成功させよう】IaCジャーニーマップを作ってみた | DevelopersIO
②AWS SAM
SAMはAWSでサーバーレス構成のアプリをIaCで構築できるツールです。
CDKと同じくCloudFormationが裏で動くことでデプロイされるようです。
AWS サーバーレスアプリケーションモデル
AWS Serverless Application Model (AWS SAM) とは
これまでのサーバーレス勉強会を通じてLambdaやDynamoDBを使ったアプリはなんとなく理解されていると思いますので、それらをIaCで構築してIaCを体験しましょう。
AWS SAMをはじめる
③EC2とECSに触れる
サーバやコンテナに触れることがインフラの素養をグンと高めてくれるはずです。
「IaCじゃないじゃん」なんて言わずにEC2やECSを知ってください。
AWSには数多くのサービスがありますが、特にアプリ開発者である我々はアプリケーションが動くEC2、ECSを中心にしながら考えれば各サービスを理解しやすくなるはずです。
「コンテナわからんからECSわからん」という方はコンテナの学習を先にした方がいいかもですね。
このタイミングでAWS資格(Cloud Practitioner)取得のための学習もおすすめです。
④CDKとCloudformationに触れる
もはやここまで来た方は自分で情報を仕入れたりハンズオンをやってみる頭になっているはずです。
自分の組みたい構成をCDKやCloudformationで書いて動かしてみると良いと思います。
⑤CodePipelineに触れる
アプリ開発者が触れる範囲の中ではAWSにおけるIaCの最終段階ぐらいの内容です。
CodePipelineを使ったCI/CDの実現で思いのままにアプリ基盤を構築しましょう。
まとめ
こういう順番ならわかりやすいんじゃねって思っていろいろ書いてみたのですが、
理解を深めるためには触ってみるのが一番です。
先述しましたが、公式のチュートリアルやベストプラクティスもいくつかあるので、
ちょっとでも興味を持ったらとりあえず触ってみてまたこの記事等を見返していただくことを繰り返すことで理解は深まっていくかと思います。