LoginSignup
0
1

More than 3 years have passed since last update.

Jenkins+Ansible+CloudFormationでインフラ構築の自動化やってみた

Last updated at Posted at 2020-12-23

JenkinsとAnsibleを使ったインフラ構築の自動化についてメモしたものをまとめました。

スタックの構成図は以下となります。RDSとEC2はミニマム構成にしており、スタックを追加することで以下の冗長構成となります。

Untitled (1).png

PC環境

  • Windows10
  • Tera Term

準備

  • 紐づいてないElasticIP1個
  • VPCとサブネット作ってIGWを通しておく

Jenkins用のEC2セットアップ

①Linux2AMIを選択します。
jenkins1.PNG

②t2.microで一通り試してみた所、動いたのでお金が気になる方は無料枠を使ってください。途中で止まる可能性も十分にありえるので、推奨はt2.small以上が良いかと思います。
jenkins2.PNG

③作成しておいたVPCとサブネットを選んで、自動割り当てパブリックIPは有効にしておいてください。キャパシティー予約はなしでOKです。他はそのままで、次に行きましょう。
Inkedjenkins3_LI.jpg

④セキュリティグループはJenkins用にポートの8080をあらかじめ開けておきましょう。Tera Term用にもsshを開けます。
jenkins4.PNG

⑤キーペアは既存の物か、なければ新しく作りましょう。それでは作成をクリックしてセットアップに移っていきます。
jenkins5.PNG

⑥パブリックIPv4をコピーします。
Inkedjenkins6_LI.jpg

⑦Tera Termを起動させIPを貼り付けます。
Inkedjenkins7_LI.jpg

⑧ユーザー名とpemを指定し、EC2と接続させます。
Inkedjenkins8_LI.jpg

⑨EC2に入ってupdateがある場合は、sudo yum update -yをあらかじめ行ってください。その後、以下をインストールし、Ansibleのディレクトリも同時に作っていきます。

$ sudo -s
$ yum install git -y
$ amazon-linux-extras install -y ansible2
$ yum install java-1.8.0-openjdk-devel.x86_64 -y
$ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
$ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

⑩↓baseurlをhttpsに変更↓

$ vim /etc/yum.repos.d/jenkins.repo

[jenkins]
name=Jenkins
baseurl=https://pkg.jenkins.io/redhat
gpgcheck=1

⑪Jenkinsインストールし、確認します。

$ yum install jenkins -y
$ rpm -qa | grep jenkins

⑫以下はベストプラクティスではありません。省きます。EC2とJenkinsuのベストプラクティスについては別記事にて紹介します。

※アクセスキーはIAM等で確認、もしくは設定しておきましょう!

$ exit
$ aws configure

AWS Access Key ID [None]: 
AWS Secret Access Key [None]:
Dfault region name [None]: 
Dfault output format [None]: json

⑬※Defaults visiblepwの下に↓の2行を追加します。

$ sudo visudo

root    ALL=(ALL:ALL) ALL
jenkins ALL=(ALL) NOPASSWD:ALL

⑭秘密鍵を~/.ssh配下に置きます。(Tera Termの場合はドラッグ&ドロップで送信先を指定すればOK。
Inkedjenkins9_LI.jpg

⑮管理者から一旦exitして、以下実行しておきましょう。

$ chmod 600 ~/.ssh/秘密鍵名.pem

⑯Jenkinsを立ち上げます。

$ sudo service jenkins start

Jenkinsの初期設定

①パスワードを求められるので、以下コンソール画面よりコピーして貼り付けます。
jenkins11.PNG

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
$ パスワード表示

②初期設定を済ませます。メールアドレスはなんでもOK。
jenkins12.PNG

③左側の新規ジョブ作成を選びます。
jenkins13.PNG

④CloudFormation用のビルド名を入力し、フリースタイルを選択します。
jenkins14.PNG

⑤手順に沿って、ソースコード管理はgitリポジトリを選択し、YAML等で作成したスタックが置いてあるリポジトリURLを貼り付け、後はそのままビルド実行を選択します。すると勝手にcloneしてくれます。
Inkedjenkins15_LI.jpg

⑥設定から下にある「ビルド」「シェルの実行」を選び、各々のスタック設定を書き込んでいきます。
jenkins16.PNG

私の場合、IAMロールを使用しているので、--capabilities CAPABILITY_NAMED_IAMを忘れずに!

sudo -u ec2-user aws cloudformation create-stack --stack-name vpc --template-body file://$WORKSPACE/vpc.yml --parameters ParameterKey=PJPrefix,ParameterValue="hoge"
sudo -u ec2-user aws cloudformation wait stack-create-complete --stack-name vpc

sudo -u ec2-user aws cloudformation create-stack --stack-name ec2elb --template-body file://$WORKSPACE/ec2elb-1.yml --parameters ParameterKey=PJPrefix,ParameterValue="hoge" ParameterKey=InternetALBName,ParameterValue="web" ParameterKey=EC2InstanceName,ParameterValue="web" ParameterKey=SSHAccessSourceIP,ParameterValue="0.0.0.0/0" --capabilities CAPABILITY_NAMED_IAM
sudo -u ec2-user aws cloudformation wait stack-create-complete --stack-name ec2elb

sudo -u ec2-user aws cloudformation create-stack --stack-name rds --template-body file://$WORKSPACE/rds.yml --parameters ParameterKey=PJPrefix,ParameterValue="hoge" ParameterKey=DBInstanceName,ParameterValue="rds" ParameterKey=DBName,ParameterValue="sample_production"
sudo -u ec2-user aws cloudformation wait stack-create-complete --stack-name rds

⑦設定を保存し、Tera Termに戻ります。

Ansibleの設定

①jenkinsで一度ビルド実行するとworkspaceというディレクトリが作られるのでそこに移動し、ansibleディレクトリを作ります。

$ sudo -s
$ cd /var/lib/jenkins/workspace
$ mkdir ansible

②ansible配下にhostsを作成し、事前に用意しておいたターゲットノード用のEIPを貼り付けます。

$ cd ansible
$ vim hosts
xxx.xxx.xxx.xxx

③続いてansible配下にansible.cfgを作成し、ユーザー名や秘密鍵を入力します。

$ vim ansible.cfg

[defaults]
host_key_checking = False
gathering = smart
remote_user: ec2-user
private_key_file: ~/.ssh/hoge.pem

④同じくansible配下にplaybook.ymlを作成します。

$ yum playbook.yml

---

- hosts: ターゲットノードIP 設定済みEIP
  become: yes
  roles:
    - { role: git, tags: git }

⑤roles等を作成し、main.ymlにgitをインストールしたい!と書いておきます。

$ mkdir -p roles
$ mkdir -p roles/git/tasks
$ touch roles/git/tasks/main.yml
$ cd roles/git/tasks
$ vim main.yml

---

- name: Install Git
  yum:
    name: git
    state: present
$ exit

Ansibleの設定は以上です。

連続実行してみる

①Ansibleのビルド名を記入し、フリースタイルを選択します。
jenkins17.PNG

②下にあるシェルの実行を選択し、スクリプトを記入します。

jenkins18.PNG

③cloudformationのジョブへ移動し、設定から一番下にある「ビルド後の処理」で、対象プロジェクトからansibleと入力し、そのまま保存します。
jenkins19.PNG

④cloudformationのジョブへ戻り、「ビルドの実行」を選択!しばらく時間がかかるので、全てのジョブが実行されると、画像のように青っぽいマークになります。失敗すると赤くなります。
jenkins21.PNG

⑤最後に自動構築されたEC2サーバーへログインし、gitがインストールされているかチェック!
jenkins20.PNG

以上!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1