2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
CloudFormationで爆速インフラ構築(全1記事)
リンクをコピー
記事をブックマーク
alichan氏:では私のLTを始めたいと思います。今回は「CloudFormationで爆速インフラ構築」というテーマでお話ししたいと思います。
最初に私の自己紹介です。「あなたは誰?」ということで、とあるIT企業で働きながら、AWSとかJavaなどを用いてWeb開発を行っている人です。会社では主にCodeシリーズとECRを使用したコンテナ資源の移送だったり、EC2内でのログ監視やバッチ実行などを行っています。
プライベートでは、AWSに関する記事を「Zenn」に書いて公開したりしています。一緒に勉強をしたりプログラミングイベントに参加したりしてくれる方を募集中なので、気軽につながりましょう、ということでよろしくお願いします。
(スライドを示して)題名にもありますが、今日やることはこちらです。「CloudFormationで爆速インフラ構築」ということで、AWSのCloudFormationというIaCツールを用いて「AWS上のインフラ環境の構築を一瞬で行う方法」を紹介したいと思います。
具体的に「CloudFormationって何?」「どんなインフラ環境をどうやって構築するの?」というところを次のスライドから伝えていこうと思います。
知っている方も多いと思いますが、「CloudFormationって何?」ということで、簡単にCloudFormationについて説明しようと思います。CloudFormationというのは、AWSサービスによるインフラ環境構築を、設定ファイルとボタン押下のみで行ってくれるサービスになっています。
AWSサービスによるインフラ環境というのは、例えばEC2上にWebアプリケーションを載せて公開されているサービスとか、API GatewayとLamdaで作成されたWeb APIを公開するサービスなどがあると思いますが、EC2だったり、API Gatewayだったり、Lamdaなどを指しています。
ふだんみなさんもやっていると思いますが、AWSサービスを立ち上げるために、マネジメントコンソールから手動で一つひとつサービスを立ち上げていることを行わなくてよくなるというのが、CloudFormationの利点になっています。
この2点をわかりやすく説明してみようと思います。(スライドを示して)この左の画像が、私が前にZennで書いたReactアプリケーションを手動でEC2に載せて公開する記事です。
これを実際の実務の現場で作るとなったら、すごく長い手順書になってしまいます。これを順々に実行しないといけないところ、手動でReactアプリケーションを順々に立ち上げることしかできなかったところを、CloudFormationを利用することで、EC2の立ち上げとReactアプリケーション起動用の設定を記載したyamlファイルを設置して、環境構築の実行ボタンを押す。
それだけでReactアプリケーションを一発で立ち上げられるようになるということが、CloudFormationでできます。このyamlファイルがテンプレートと呼ばれています。
次のスライドは環境構築のyamlファイルになります。どういう構造になっているのか、どういう属性が存在するのかを簡単に紹介していこうと思います。
では、CloudFormationで実際に使用するテンプレートの構造を見ていきます。スライドに書かれているように、テンプレートを記載して環境構築を行っていきます。
テンプレートのトップレベルの属性に複数の定義された要素がありますが、一番重要なのが「Resources:」です。これだけあれば最悪立ち上がるといったプロパティになっています。では、実際に「Resources:にはどういうものを置くの?」というところを次のスライドから見ていこうと思います。
(スライドを示して)こちらは後半に見せるデモで使用するテンプレート内に記載されているResources:の一部を取り上げたものです。後半のデモではCloudFormationでEC2上にReactアプリケーションを載せてWeb上に公開するところを動画で撮ったので、それを公開します。
その際に立ち上げるリソースがResources:配下にいくつか記載されていますが、ここではその一部のEC2インスタンスの記載に焦点を当てて、配下の各プロパティについてざっくり説明していきます。
トップに記載されているのがEC2Instance:です。EC2Instance:というResources:配下のすぐ下に記載されているものがあります。これは論理IDといって自分で決められるものです。自分で好きな名前をリソースに付けられます。
「Type:」が起動するリソースを決定するもので、ここで「AWS::EC2::Instance」と書くことで、「EC2インスタンスの設定を記載したものだよ」という合図になっています。その下の「Properties:」は下にいくつかの属性がありますが、このリソースに対して設定できる固有の設定になっています。
例えばマネジメントコンソールからEC2を立ち上げた方ならわかると思いますが、立ち上げの際に「Imageld:」というインスタンスのOSを決定するものだったり、「InstanceType:」を使用するEC2インスタンスのハードウェアの性能を決定するものを選択してから立ち上げています。
こういったリソースを立ち上げる際に設定する値を書くことで、EC2インスタンス立ち上げの際に設定値が反映されるようになります。
テンプレート内では組み込み関数というものが使用できます。例えば「SecurityGroupIds:」の下にある「GetAtt:」というものは、Resources:配下の他のリソースに紐づく値を取ってくることができます。
今はEC2インスタンスしか書いていないのですが、他のところにSecurityGroupを乗せているので、設定したセキュリティグループの下のGroupIdというものを取ってくることができる関数になっています。
もう1個が「Ref:」という関数です。「SubnetId:」の下にある「Ref:」という関数がありますが、これも別のリソース、EC2インスタンス以外のサブネットというリソースを取ってきて、それのIDを参照することができる関数になっています。
以上、ざっくりとしたテンプレートの説明でした。
では、実際に用意したテンプレートを使用してEC2上にReactアプリケーションを起動して、Web上に公開してみます。(スライドを示して)今回作成するインフラ環境のアーキテクチャはこちらになっています。
EC2上にWebサーバーを提供するためのソフトウェアのNginxを載せて、その中にReactアプリケーションを格納します。そして、Web上にReactアプリケーションを公開するというところを動画で簡単にやります。
これを手動でマネジメントコンソールで行うと大変面倒くさいのですが、テンプレートファイルとボタンクリックの実行のみで構築していきます。
ではデモタイムということで、実際にCloudFormationで環境を構築していきます。
(画面を示して)今回用意したテンプレートというのはざっくりとこんな感じです。
「AWSTemplateFormatVersion」。テンプレートのバージョンがあって、「Description」という説明があって、「Resources:」というEC2インスタンスを入れるVPCだったり、サブネットだったりなどの設定があって、ルートテーブルがあってといった感じで、AWS上を立ち上げるサービスを順々に記載しています。
最後にEC2インスタンスです。(画面を示して)こちらはEC2インスタンスの説明が記載されているかたちになっています。これで実行すれば、Resources:配下のすべてのリソースが立ち上がるかたちになっています。
立ち上げているところを動画で共有しますので、それを見てもらいます。(画面を示して)これはCloudFormationの画面になっています。ここでスタックの作成という、実際のリソースの塊を立ち上げる設定をして、次にyamlファイルを設定しています。
設定をしたら「次へ」を押して、立ち上げるリソースのグループの名前を設定します。名前をreact-serverと決めて「次へ」を押して、「次へ」を押して。
そのあとは特に設定することもないので、これで実行ということで、ファイルからリソースを立ち上げています。
イベントで、立ち上がったリソースはどれかをどんどん更新して見せてくれます。CREATE_COMPLETEは「このリソースの配下にあったものが立ち上がったよ」という表示が出ています。
これを更新し続けると、最終的にはすべてのリソースが立ち上がるような状況になっています。react-server自体もCREATE_COMPLETEになったので、これでEC2インスタンスが立ち上がったはずです。
EC2インスタンスを調べてみると、実行しているインスタンスが1つあります。これを調べてみて、インスタンスIDを押下して、パブリックIPv4アドレスをコピペしてブラウザに貼り付けると、Nginxの初期ページが表示されるというかたちになっています。
しばらく経てばEC2の最初のスクリプトが実行されて、Reactを入れます。Reactを立ち上げるかたちになったので、Reactが立ち上がりました。
こんな感じで、簡単にReactのWebアプリケーションをWeb上に公開することができるようになっています。
以上が私の発表になります。CloudFormationの良さが少しでも伝わっていたらうれしいです。
今日話した内容とさらに複雑な環境構築を行っているZenn記事を公開しているので、「おもしろそうだな」と思った方がいたら、この記事も読んでもらえるとうれしいです。
ご清聴ありがとうございました。
関連タグ:
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦