株式会社サーバーワークスでは一緒に働く仲間を募集しています
全国のAnsible愛好家の皆様こんにちは、技術4課 岩本です。
さて、ラノベ風のタイトルで始まりました今回ですが、
Windowsユーザー/Macユーザーが混在してたりすると、セットアップ手順が各端末であったり、
もしくはプロビジョニング用サーバーを用意したりと、それなりに手間がかかるので、
Ansibleの実行もサーバーレスでできないかしら?と思ったのが事の始まりです。
結論
git push
するだけで、Ansibleの実行ができるようになりました!- 手元の端末にAnsibleのインストールは不要で、テキストエディタとGitクライアントだけで、Ansibleの実行ができます。
- Gitに対応した
VisualStudioCode
とかAtom
なら、それ以外不要。
しくみ
CodeCommit
上にあるGitリポジトリに、AnsiblePlaybook
とCodeBuildで利用するbuildspec.yml
をPushします。CodeCommit
へのPushをトリガーとしてCodePileline
が、Pushされた内容をCodeBuild
へ送ります。CodeBuild
では事前に指定したDockerコンテナ
が起動し、buildspec.yml
を元に、処理が実行されます。
絵で描くとこんな感じ
でもお高いんでしょ?
CodeCommit
- 最初の5人のアクティブユーザー : 無料
- 6人以降のアクティブユーザー : 1$/月/ユーザー
CodePipeline
- 1パイプライン : 1$/月
CodeBuild
- 0.005$/ビルド/分
- build.general1.small
- Linux
まとめ
- CodeCommit:無料
- CodePipeline:1$/月
- CodeBuild:1$(0.005$5分40回)
- 総計:約2$/月
構築がめんどくさそう・・・
- そんな事もあろうかと、Terraformをご用意しました。
- 諸般の事情により、CodePilelineだけ手動でお願いします・・・
- CodePipelineの構築時には、ブランチの指定が必須ですが、Terrafrom実行時にはCodeCommitのブランチは空のためです。
- ansible-on-codebuild
解説
- CodeBuildは1ビルド毎にDockerコンテナが起動し、
buildspec.yml
に記載されたコマンドがDockerコンテナ上で実行されます。 buildspec.yml
にAnsibleを適切に起動する記載をする事で、Codebuild上でAnsibleの実行が可能となりました。buildspec.yml
---
version: 0.2
phases:
pre_build:
commands:
- sudo apt-get update -y
- sudo apt-get install software-properties-common -y
- sudo apt-add-repository ppa:ansible/ansible -y
- sudo apt-get update -y
- sudo apt-get install ansible -y
- sudo apt-get install openssh-client -y
- cd ./playbook
- chmod 600 ./ssh-keys/sw-iwamoto.pem
- ansible -i hosts/inventory.yml -m ping all
build:
commands:
- ansible-playbook -i hosts/inventory.yml ./setup.yml
post_build:
commands:
- echo "Now Finished Privisioning by Ansible"
今後の課題
- 対象サーバーはANYからのSSHを受ける必要がある
- CodebuildはVPC内のリソースにアクセスすることも可能です、NAT-GW用いる、もしくはローカルIPでアクセスする。などを用いれば、IP制限なども容易に可能です。
- AWS CodeBuild プロジェクトでの Amazon VPC アクセスの有効化
- Playbookの内容確認(ドライラン)ができない
- 構成が複雑になりますが、テスト用・実行用とそれぞれののCodebuildプロジェクトを作ることでPlaybookの検証も行えます。
まとめ
弊社の様にメンバーが自由に端末を選べ、リモートワークなどを行う形態では、実行環境を統一するのもなかなか苦労します。
CodeCommit/CodePipeline/Codebuildを組み合わせることで、GitPushするだけで、Ansibleが実行できる環境がサーバレスで構築できます。
Ansibleを別のものに置き換え利用することもできます。
非常にニッチな利用ですが、何かの際にご活用ください。