はじめに
SREセクションでインターンに参加しています杉尾秀真と申します。 この記事では、私が今回オイシックス・ラ・大地のインターンで学んだことをまとめていきます!
インターン目標
プロジェクトのミッション
WindowsServer をAnsibleで管理する
自分のミッション
- 1個以上の新しいスキルを身につける
- インターン終了までにSREセクションのメンバ全員とコミュニケーションを取る
取り組んだこと
今回のインターンでは"WindowsServerをAnsibleで管理する"のプロジェクトに取り組んでいきました。
本プロジェクトで学んでいったことを以下にまとめていきたいと思います!!
①環境構築
インターンが始まってまず取り組んだのは、環境構築です。 AnsibleをPCにインストールしたり、AWSにアクセスし必要なインスタンスを構築したり、GitHubのアカウント作成などを行いました。このインターンの中で、この環境構築がなんだかんだ一番大変であったのではないかと個人的に思っています。
②簡単なPlaybookの作成
Ansibleの実行形式ファイルであるPlaybook をたくさん作成していきました。
以下には、各お題に対して作成したPlaybook中からいくつか記載しています!
- Playbook中で変数を指定し、内容を表示
- name: Hello World! hosts: localhost vars: - message_text: Hello World! tasks: - debug: msg: "{{ message_text }}"
- 対話式で変数を入力し、内容を表示
- name: Input vars hosts: localhost gather_facts: false vars_prompt: - name: input_var prompt: "input: " confirm: no private: no default: "Hello World, default" tasks: - debug: msg: "{{ input_var }}"
③WindowsServerでいろいろなmoduleを使ってみる
作成したPlaybookの処理内容は以下の通りです。
- タイムゾーンを日本時間に変更する
- ファイルをリモートへコピーする
- hostnameコマンドを実行するPowershell scriptファイル
- 画像ファイル
- PowerShellを実行する
- 最初にリモートへコピーしたPowershell scriptファイルを実行する
- ローカルのコンピュータ名(ホスト名)を変更
- コンピュータ名はinventoryの変数で指定する
- コンピュータ名の変更には再起動が必要になるので、変更があった場合は再起動する
- name: Windows playbook hosts: all gather_facts: false tasks: - name: Timezone community.windows.win_timezone: timezone: Tokyo Standard Time - name: Copy directory to remote ansible.windows.win_copy: src: ./remote_copy dest: "C:\Temp" - name: Run PowerShell script ansible.windows.win_shell: "C:\Temp\remote_copy\hostname.ps1" register: res1 - name: Check the PowerShell script debug: msg: "{{ res1 }}" - name: Rename hostname ansible.windows.win_hostname: name: "{{ win_hostname }}" register: res2 - name: Reboot ansible.windows.win_reboot: when: res2.reboot_required
Windows ではLinux と異なる接続方式やモジュールを使用するので、少し苦労しました。
④Webサーバを構築する
今回、このインターンで私はAnsibleの操作のほかに、自分で作成したhtmlファイルがサーバ上で実際に動作する様子を見たい思いも凄くあり、この4つ目の内容に関してはエキサイトな気持ちで取り組んでおりました!!
作成したPlaybookの処理内容は以下の通りです。また、実行対象はLinuxサーバです。
yum モジュールでhttpd をインストールする
systemd モジュールでApache httpdサービスを開始し、かつenabledにする
手元にtest.htmlファイルを用意し、copy モジュールでLinuxサーバの/var/www/htmlの配下へ送る
- ブラウザから
http://<public IP>
、http://<public IP>/test.html
にアクセスし、Apache http の画面と、テストで書いたhtmlの内容が表示されるのを確認する
作成したPlaybookは以下の通りです。
- name: Install Apache HTTPD hosts: all become: yes # root ユーザになる gather_facts: false tasks: - name: Install httpd yum: name: httpd state: present - name: Start httpd systemd: name: httpd state: started enabled: yes - name: Create target dir file: path=/var/www/html state=directory - name: Copy html ansible.builtin.copy: src: ./test.html dest: /var/www/html/test.html follow: no
確認で表示させるhtmlには下記のコードを作成し、使用しました。
<h2>CatPhotoApp</h2> <main> <p>Click here to view more <a href="#">cat photos</a>.</p> <a href="#"><img src="https://cdn.freecodecamp.org/curriculum/cat-photo-app/relaxing-cat.jpg" alt="A cute orange cat lying on its back."></a> <p>Things cats love:</p> <ul> <li>cat nip</li> <li>laser pointers</li> <li>lasagna</li> </ul> <p>Top 3 things cats hate:</p> <ol> <li>flea treatment</li> <li>thunder</li> <li>other cats</li> </ol> <form action="https://www.freecatphotoapp.com/submit-cat-photo"> <label for="indoor"><input id="indoor" type="radio" name="indoor-outdoor" value="indoor" checked> Indoor</label> <label for="outdoor"><input id="outdoor" type="radio" name="indoor-outdoor" value="outdoor"> Outdoor</label><br> <label for="loving"><input id="loving" type="checkbox" name="personality" value="loving" checked> Loving</label> <label for="lazy"><input id="lazy" type="checkbox" name="personality" value="lazy"> Lazy</label> <label for="energetic"><input id="energetic" type="checkbox" name="personality" value="energetic"> Energetic</label><br> <input type="text" placeholder="cat photo URL" required> <button type="submit">Submit</button> </form> </main>
この後、AWSでApplication Load Balancer の作成とRoute53でドメインの設定をすることで、IPアドレスではなくドメインでアクセスできるようになったことも確認できました。普段自分が見ているURLの構成になっており、完成できた時にはすごく感動しました!
まとめ
今回のインターンでは、主に環境構築、AWSの操作、インスタンス作成、Playbookの作成、Ansibleの実行、Webページの構築方法etc. たくさんのことを学ばさせていただきました。この中でも一番大変であったのは、環境構築ですね。実際にやってみてなかなか自分一人では難しいと思いながら、青木さんにサポートいただきながら取り組みました。これからエンジニアを目指す上での大きな一歩をこのインターンで踏み出せたと個人的に思っております。今回の経験を活かして、サイトを作ってみたり、もっとAWSについて学習していきたいと思いました。また、学生のうちからAnsibleのことを学べる経験はとても貴重であったので、それも極めていきたいです!
それから、インターンの目標と自分のミッションに関しては、Playbookをたくさん作成しましたし、SREセクションの皆さんとたくさんコミュニケーションをとることができたので、ミッション大成功だと思います!SREセクションの皆さん本当にありがとうございました😊 また、どこかでお会いしましたら、その時はよろしくお願いします。
メンターからのコメント
こんにちは。杉尾さんのメインメンターを担当しましたSREセクション青木です。
今回のインターンでは、ORDではなかなか実現が進まなかったAnsibleでのWindows Serverの構成管理に取り組んでいただきました。
Ansible はもちろん、LinuxやAWS、Git は初体験ということで、学んでいただくことが盛り沢山でしたが、吸収が早く、実質10日間で予想以上の成長を見せてくれました。
Windows Server のAnsible管理は杉尾さんの取り組みを機にチーム内でどんどん進めていきたいと思います。
最後に実施していただいたWebサイトの構築は、杉尾さんの熱い想いを受けて提案させていただきました。
今回は一番基本的な構成でシンプルに作っていただきましたが、Docker を利用してローカルでお手軽に構築する方法や、
GitHub Pagesで静的Webサイトを公開する方法にもトライしていただけると、さらに楽しめると思います(お家でぜひ)。
あっという間でしたが私自身もとても楽しかったです!インターン先にORDを選んでいただきありがとうございました 🎉