アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

"AWSなんもわからん"を脱する入り口にはCDKがおすすめ

こんにちは!WEBエンジニアのkanekoです。

最近AWSで遊ぶのが楽しいです。

でも少し前まで

「AWS?できたらいいなとは思うんですけど、そもそもインフラのこと何もわからないですし、そもそものそもそもアプリケーションコード書くのもまだまだですし、できる方にやっていただくほうがいいですし、そんな私には手が出せないですよ」

と心の底から思っていました。

そんな怯み気味だった私がCDKですごく楽しいと思ったので楽しいぞという気持ちとその要因を書き綴ります。

私と同じような「やってみたいけど何からやれば」という状態の方がいらしたら、この記事が参考になれば嬉しいです。

始める前のステータス概要

  • NginxとかApacheあたりなら少しだけ触ったことがある
  • ネットワーク?よくわかりませんね
  • インフラ関係の横文字用語全般聞き慣れない
  • コンテナ技術もさわりだけ、複雑なことはわからない
  • やってわかりたい気持ち <<<<<<<<<< 心理的なハードルの高さ

ざっとこのような感じです。4月で現場2年目になりました。Rubyが大好きです。

最初の挑戦と挫折: 試験の不合格

去年からアプリケーションエンジニアもインフラやっていこうという流れがあり、自分もその波に乗ってチームのみんなとAWSソリューションアーキテクトアソシエイトの試験を受けました。

このように書くと雰囲気に流されたり言われたからやったように見えるかもしれませんが、決めたときはかなりやる気で「試験っていうわかりやすい目標!!テキストで知識をインプットして画面の操作重ねていけば身につくと思う!頑張る!!!」と張り切っていました。

でも「何回やっても何回やってもVPCが倒せない」とか「ポリシーって結局なに」とか、全然飲み込めず徐々に心が折れていきました。

そして2019年末に受けた試験では見事不合格

試験勉強楽しくないし、やってもわからないし、そこそこ高いお金払って受けた試験は落ちるしでやる気も底につきてしまいそうになっていました。

私はそんな感じでしたが、nakamuraの合格体験記がエントリーにあるので貼っておきます。ぜひ読んでくださいー。

tech.actindi.net

CDKとの出会い

そんなこんなで過ごしているとき、全くやったことなかったんですがCDK関係のタスクを自分が担当しました。正確に言うと自分でそのタスクを作って自分でやりました。できないのにタスクにして自分でとったの、今思えばすごいですね・・・。見守ってくだったみなさまには本当に感謝しています。

本題: CDKはいいぞ

CDKとは

AWS CDKとはAWS Cloud Development Kitの略で以下のように紹介されています。

AWS クラウド開発キット (AWS CDK) は、使い慣れたプログラミング言語を使用してクラウドアプリケーションリソースをモデル化およびプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです。

AWSにたくさんあるサービスを理解して使っていくのは、自分にとってハードな道のりに感じています。 でも、CDKは使い慣れたプログラミング言語を使用してクラウドアプリケーションリソースをモデル化してるんですよ!!!これが最高によくて、私が"AWSなんもわからんを脱する入り口にはCDKがおすすめ"と思った理由です。

これをもう少し私が感じた事柄で言い換えてみます。

1.オブジェクト指向でできる

リファレンスをざっと見ていただくとわかるように、オブジェクト指向言語で書いていくことができます

そのため単にWEBコンソール触るより概念の理解やまとまり、全体像、関係性を把握しやすかったです。

クラス名やコンストラクタなどからサービス名とか関係性、それを構成するために必要な情報や設定を知り、メソッド名から振る舞いを知ることができるので、詳細な仕組みを理解する前に役割を知ることができます。

そこを起点とすると「なるほど、だからこれはこう振る舞うのか」とつなげていけるので、本でインプットする時知識を深めやすいと感じています。

ネットワーク?よくわかりませんね状態だった私でもネットワークを本当にちゃんとわかっていきたいと心から思って関心が持てたり、「サイダーブロックっていうのは」と意味がわかって書けるまで落とし込めるかとか、サンプルコードではこう書いてあったな等思ったりして楽しく勉強しています。

オブジェクト指向最高ですね!!!

2. 他の人にレビューしてもらえる

CDK含めIaCの良さだと思うのですが、コードで表現することによって自分のやりたいことを他の人にシェアしたり、確認してもらいやすくなります。

ということは、アプリケーションコードと同じように、自分の意志と根拠を持って実装できるか自分で手応えを確認しながら書くことができるし、他の方からみて「ここはもっとこうするといいですね」とか「どうしてこのような構成に?」とフィードバックを頂いたり、他のコードを見て「なるほどね」と学んだりしてさらに定着を計ることができます。

やってわかりたい気持ち <<<<<<<<<< 心理的なハードルの高さという状態だった私にとって、これはそのハードルを下げる一助でもありました。

3. 簡単にデプロイ・削除できる

「AWSわからないうちに触って思わぬ料金が発生した」という経験のある人は、きっと私だけじゃないはず。

CDKはスタック単位でCLIからdeployしたりdestroyしたりできます。(詳細は省きますが) 「動かない!もう終わり!」と半ば投げやりな気持ちで手を止めて、1ヶ月位忘れていたとしても、立ち去る前のdestroyコマンドさえ忘れなければ大丈夫。関係するものは全部なくなります。

また、WEBコンソールをクリーンにしても、手元にコードがあるのでまた同じ状態をすぐに作り出すことができます。 料金面だけではなくて、何回も何回もやってみるのにもすごくいいと思います。

具体的に何をしたか

これはあくまで私がやっただけの一例なのですが

  1. まずAWSのハンズオンやチュートリアルなどでどういう要件やゴールがあるのかを知る
    • 例えば「S3を使って静的サイトをインターネットに公開する」とか「EC2インスタンスにSSH接続できるようにする」とうようにシンプルな感じで
    • ハンズオン中などにはわけがわからなくてもよくて、要件だけでも知れればOKと思って参加していました
  2. 1.のゴールを目指してやる
    • コンソールで直接やったりCDKでやったり
    • CDKのクラス単位で「あれとこれとこれがこうなってこう」と分かるとコンソールでも情報を見つけ易くなった気がします
  3. ちょっとずつ前進して自己肯定感を高める
  4. 楽しむ

楽しいのは大事。一番大事。

もっとやっていきたいこと

  • AWSの範囲の話をするとCDKはわかりやすくて便利な半面、 自分で指定してない箇所をデフォルトでやってくれていることもたくさんあって、自分で気づかないうちにいい感じになっている部分をブラックボックスのように感じてもいます。なので、ゼロベースでやろうとしても同じようなことができるレベルまで自分の経験値を上げていきたいなと考えています。
  • AWSに限らない話をするともっと物理サーバーで遊んだりもしてみたいです。
  • すごく偉そうにこのエントリーを書いていますが、実際はまだ何もわからんのでもっともっと手を動かしリファレンスも読んで習熟度高めていいサービスづくりに反映していきたいと思っています。

最後に

文字ばかりになりましたが、最後まで読んでくださりありがとうございました。