AWSによるインフラのコード化 と自動化

# Infrastructure as Codeとは
今までのインフラ環境は手順書などを見ながら設定、構築などを人間の手動で行なっていました。
しかし、最近ではプログラムのようにコード化ができるようになってきました。


# インフラをコード化するとどんなメリットがあるのか
今までは手順書を見ながら、人間が手動で行なっていたため、ミスやサーバーなどの停止、バージョンアップによって同じ環境を作り直せませんでした。

これを解決するために仮想化が生まれました。
一度作成したデータを保存したりできるので使い回しが可能です。
AMIはこの仮想化で生まれました。
クラウドサービスのおかげで、１つのサーバーに複数の環境を構築できるようになりました。

そして画面からの操作だけでなくプログラムからの操作もできるようになり、
インフラの環境構築がプログラムから組めるようになりました。

こうしてインフラの環境のコード化はインフラ環境の自動化することができるようになりました。
エラーが出た時も、コードの差分を見て、問題点の特定が早くなります。


# DevOps
自動化されたインフラ環境の構築、コード化されたインフラ環境によって
運用メンバーの負担が減り、
開発チームに対してもコミットできるようになります。

運用と開発を組み合わせ、発展させる技術を***DevOps***です。
DevOpsエンジニアになるとかなり広い知見が必要そうですね。


# 構成管理プロビジョニングツール
インフラの環境構築をする前に事前準備をするためのツールです。
設定やインストールは自動で行えるようにするためのものです。

### chef
プロビジョニングツールで1番有名です。
エージェント型と呼ばれていて、構成管理を行う対象サーバーに
エージェントと呼ばれる処理を実行するモジュールを導入し、
そこ経由で設定の変更やソフトウェアのインストールをします。

### Puppet
Chefと同じくらい有名なツールです。
Chefと同じで事前準備やコードの書き方が独特です。

## Ansible
最近使うようになってきました。ChefやPuppetよりもコードは簡単です。
エージェント型ではなくPythonの対象のサーバーにインストールされて
いれば利用できます。

# インフラの自動化のメリット、デメリットなど
運用コストを抑えることができます。
そして人が手動での操作の手間が省け、復元、再実行などの
やり直しなどでも確認に実行してくれます。

しかし、全部自動化が言い訳ではないです。
人が手動で行わなければならない場面もあり、
コストが下がらない時などは自動化は不要です。

最近だと自動化ができるエンジニアが少ないみたいです。
自動化ができればチャンスかもしれないですね。

そして自動化には「全自動」と「半自動」があります。
全自動は全部自動化し、半自動は自動化するとことしないとこで
分けて自動化していきます。

プロジェクトや内容によって自動化するかしないかは、
どこまでやるかは決めていかないといけないみたいです。

# CloudFormation
AWSが提供するインフラのコード化サービスのことです。
YAML形式で、コード化は簡単な方です。

コンソールの画面からでもCloud Formationがあるので調べてください。


## インフラの構築でのコツ
VPCだけ、EC2だけみたいに１つ１つ作っていくのがいい***みたいです。
理由はプログラムみたいにインフラ構築は１つでも設定や順番などにミスがあると
原因の発見がわかりづらく動かなくなってしまいます。その点はプログラミングと比べたらシビアです。

##   CloudFormationの公式リファレンス
CloudFormationはユーザーガイドがあり、公式ドキュメントなので見てみてください。
そこに```公式リファレンス```があるのでこれを参考にCloudFormationのコードを書いていきます。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

# CloudFormationを動かす
まずは```スタックの作成```を選択します。こんな画面になるかと思います。
ここではテンプレートファイルのアップロードしていきます。具体的なファイルは公開できないです。

![スクリーンショット 2022-10-17 15.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/79b1c018-5073-bb17-c7b1-98c5e3615768.png)

スタックの名前だけ決めて、次へをクリックします。
![スクリーンショット 2022-10-17 15.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/3d7f1e37-6d9c-63ab-d2f6-2507a8215f96.png)

次の画面でもデフォルトのまま次にいきます。そのままスタックを作成します。
するとスタック作成できてます。CREATE_COMPLETEならokです。違うなら間違えてる箇所があります。

![スクリーンショット 2022-10-17 16.04.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/49bd8b68-d4a3-2297-1ea3-5f3a28acb2f2.png)



https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html

***今回は都合上コードは公開できません。***
しかし、Yamlで書かれているので、参考になるページは載せておきます。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html






# Ansibleを使ってモジュールの導入を自動化
構成管理ツールの１つであるAnsibleを使い自動化します。
Ansibleが提供している記法で記述しプログラムに近いです。

***都合により実際に動かした内容が記載できていないのでご了承ください。***
近日公開します。

# CIについて
継続インテグレーションのことです。***テストの自動実行***のことです。

### CDについて
CIを実行するためのツールです。CIに問題なければテスト実行後に本番環境のリリースまでやります。
難易度は高いツールです。

### Jenkins
CIツールの代表です。利用機会が減っているみたいですが、
何でもできるツールなので、いい面と悪い面があります。
大規模プロジェクトでは使うことあるみたいです。

### CircleCI
Web系で多く使われていて、CIの環境構築が簡単にできます。


## CircleCIの記事

https://qiita.com/Hashimoto-Noriaki/items/4a30f06be4fd3c5a4956