share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.09.10 FRI

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

笹崎日登

WRITTEN BY 笹崎日登

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

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

PC環境

  • Windows10
  • Tera Term

準備

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

Jenkins用のEC2セットアップ

①Linux2AMIを選択します。

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

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

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

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

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

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

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

⑨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。

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

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

⑯Jenkinsを立ち上げます。

$ sudo service jenkins start

Jenkinsの初期設定

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

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

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

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

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

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

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

私の場合、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のビルド名を記入し、フリースタイルを選択します。

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

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

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

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

以上!

元記事はこちら

https://qiita.com/sengoku4902/items/89884b5427f76bb6e486

アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ:
https://cloudpack.jp/service/aws/maintenance.html

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。