インフラ運用ツールもアプリと同じようにデプロイできないの?

この記事を書いたメンバー:

那須 隆

インフラ運用ツールもアプリと同じようにデプロイできないの?

目次

最近になっていろんなソースコードが読めるようになってきました、那須です。

試験勉強や仕事で、アプリケーションを EC2 や Lambda にデプロイする、なんてことを見聞きします。Web アプリケーションだと Auto Scaling で EC2 が増えた時に自動で最新のアプリケーションをデプロイするとか。

一方、インフラ関連の運用ツールや運用スクリプトはどうでしょうか?
もしかして、いちいち EC2 インスタンスにログインして自分の端末やファイルサーバからコピペしてたりしていませんか?
大丈夫です。私もつい先日までそうでした。

アプリケーションのデプロイってシンプルな仕組みなので、インフラ運用ツールでも同じ仕組みで管理したりデプロイしたりすれば運用タスクが少しでも楽になるんじゃないか?そう思ってました。
対象インスタンス数があればあるほど展開が楽にかつオペミスも減らせますよね?
しかも、あ!あのインスタンスに配置するの忘れてた!みたいな作業漏れもなくせますし。

というわけで、今回はアプリケーションのデプロイと同じ流れでインフラ運用スクリプトを EC2 インスタンスにデプロイしてみましたので、その流れをご紹介しましょう。
もちろん、デプロイ対象は Windows Server 2019 です!

 

どうやってやるのか?

いきなり GitHub とかが登場しても運用現場の実情からかけ離れすぎている可能性がありますので、今回は一番シンプルな CodeDeploy と S3 だけを使った構成でやってみましょう。
↓これが構成イメージです。


インフラの構成も一緒に管理するなら Ansible だけでいいかも、とも考えたんですが、今回は用途を割り切った内容にするのであえて CodeDeploy でやってみます。

事前準備

IAM 設定

まずは IAM ロールを作成しておきましょう。↓このドキュメントを参考にします。

まずは IAM ロールを作成しておきましょう。↓このドキュメントを参考にします。

CodeDeploy で利用する IAM ロールの名前は、CodeDeployRole とします。デプロイグループでサービスロールとして使います。
ポリシーは AWSCodeDeployRole をアタッチしましょう。

デプロイ対象の EC2 インスタンスには、EC2Role-S3ReadOnly という IAM ロールをアタッチしておきます。
ポリシーは AmazonS3ReadOnlyAccess をアタッチしましょう。

CodeDeploy エージェントインストール

↓このドキュメントを参考に、インストールします。むちゃくちゃ簡単なので手順は割愛しますね。

インストールが完了すると、このように codedeployagent というサービスが動いている状態になります。

CodeDeploy設定

まずはデプロイアプリケーションを作成しましょう。アプリケーションの作成を押します。

アプリケーション名とプラットフォームを指定します。アプリケーション名は何でもいいですが、コンピューティングプラットフォームはEC2/オンプレミスを選択しましょう。
これでアプリケーションの作成を押すと、アプリケーションができあがります。 

続いて、デプロイグループを作成します。デプロイグループの作成を押します。 

デプロイグループ名を指定します。サービスロールは、先ほど作成した CodeDeployRole を選択しましょう。 

デプロイタイプはインプレースを選択します。Blue/Green は新しい EC2 インスタンスが ELB 配下に作成されてそこにデプロイし、通信先を ELB で切り替えるやり方です(細かく言うともっとあるんですが、ひとまずこの説明で終わります

環境設定でデプロイ対象を指定します。今回は EC2 インスタンスにデプロイするので、Amazon EC2 インスタンスを選択します。EC2 インスタンスはタグで指定する形となりますので、どのインスタンスにどのタグをつけて管理しているのかは確認しておきましょう。 

デプロイ設定で複数インスタンスを少しずつ更新するのか、全対象インスタンス一気に更新するのかを選択します。今回は 1 台だけですので、AllAtOnce を選択しています。
最後にデプロイグループの作成を押せばデプロイグループが出来上がります。 

デプロイ!

デプロイする運用スクリプトを S3 にアップロードします。

まずはスクリプトを準備しましょう。今回は Get-Date を実行するだけの PowerShell スクリプトを EC2 インスタンスに配置する想定です。ファイル名は codedeploy-test.ps1 にしました。

 Get-Date >> test.log

次に CodeDeploy で使用する AppSpec File を作成します。
AppSpec File の作り方は↓このドキュメントを参考にしてください。

今回はシンプルに codedeploy-test.ps1 を C:\scripts にデプロイする想定にしたので、↓このような内容になりました。 AppSpec File のファイル名はドキュメントにも指定がある通り appspec.yml です。

 version: 0.0
os: windows
files:
  - source: codedeploy-test.ps1
    destination: C:\scripts

デプロイするスクリプトと AppSpec File を一緒に zip で圧縮し、S3 にアップロードしましょう。

デプロイグループの画面からデプロイの作成を押します。

デプロイグループを選択します。 

デプロイするリビジョンがどこにあるのかを指定します。 

デプロイの作成を押しましょう。これでデプロイが始まります! 

ちなみにデプロイ前の C:\scripts はこんな状態ですが、 

デプロイが完了すると codedeploy-test.ps1 が現れました! 

CodeDeploy コンソールでもデプロイ成功の表示が出ていますね。 

一応デプロイしたスクリプトが問題なく実行できるのか確認しておきましょう。 

最後に

CodeDeploy を使って S3 にアップロードされたスクリプトを EC2 インスタンスにデプロイできました。ものすごい単純な構成でやったので、なんとなく動きは理解した!って方が 1 人でもいれば嬉しいです。
GitHub 等のリポジトリでコードを管理していない人は手作業でスクリプトの管理をされている方が多いと思いますが、スクリプトの配置だけでもこのように AWS サービスを活用すれば運用面でのメリットが出てきますので、最初はお試しでもいいので積極的に使っていきましょう!


カテゴリー
タグ

Pick upピックアップ

Search記事を探す

キーワード

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)