1
/
5

AWSエンジニアだから、今風のナウい感じでAnsibleもサーバーレスで使いたいよねっ?!

全国のAnsible愛好家の皆様こんにちは、技術4課 岩本です。

さて、ラノベ風のタイトルで始まりました今回ですが、
Windowsユーザー/Macユーザーが混在してたりすると、セットアップ手順が各端末であったり、

もしくはプロビジョニング用サーバーを用意したりと、それなりに手間がかかるので、
Ansibleの実行もサーバーレスでできないかしら?と思ったのが事の始まりです。

結論

  • git push するだけで、Ansibleの実行ができるようになりました!
    • 手元の端末にAnsibleのインストールは不要で、テキストエディタとGitクライアントだけで、Ansibleの実行ができます。
    • Gitに対応した VisualStudioCode とか Atom なら、それ以外不要。

しくみ

  1. CodeCommit 上にあるGitリポジトリに、AnsiblePlaybook とCodeBuildで利用するbuildspec.ymlをPushします。
  2. CodeCommit へのPushをトリガーとして CodePileline が、Pushされた内容をCodeBuild
    へ送ります。
  3. 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を受ける必要がある
  • Playbookの内容確認(ドライラン)ができない
    • 構成が複雑になりますが、テスト用・実行用とそれぞれののCodebuildプロジェクトを作ることでPlaybookの検証も行えます。

まとめ

弊社の様にメンバーが自由に端末を選べ、リモートワークなどを行う形態では、実行環境を統一するのもなかなか苦労します。
CodeCommit/CodePipeline/Codebuildを組み合わせることで、GitPushするだけで、Ansibleが実行できる環境がサーバレスで構築できます。

Ansibleを別のものに置き換え利用することもできます。
非常にニッチな利用ですが、何かの際にご活用ください。

株式会社サーバーワークスでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!

同じタグの記事

今週のランキング