新規EC2インスタンスにSSM経由でAnsibleを実行する方法

投稿者: Anonymous

ssh 経由で実行するサーバー初期構築用の Ansible のレシピがあって
これまでローカルPCからssh経由で対象サーバーにレシピを実行していたんですが
このレシピをなるべく改変せずに ssh のかわりに SSM を使って実行する方法はあるでしょうか


セキュリティ要件のため管理はすべてSSM経由で行うことになり
ローカルPCで ansible-playbook を実行するだけでは動きません

方法としては

  1. SSM でEC2に入ってからレシピを git clone でもってきて
    ローカルホストに対して ansible を実行する

初期環境なので python, git, ansible が入っていないので手動でインストールする必要があり再現性が担保できない

  1. aws cli には Run Command
    (https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/walkthrough-cli.html)
    というのがあってSSM 経由でコマンドを実行できるみたいなのですが
    ansible で ssh のかわりにこの Run Command を使用するというのはできないでしょうか

  2. python, git, ansible をインストールしてローカルに Ansible を実行する
    という1連のスクリプトを書いてそれを Run Command で呼べば可能ではあるのですが
    対象サーバーに ssh さえあれば何もインストールする必要がない Ansible のメリットが損なわれます

コストがかかるようであれば一時的に ssh をあけてもらって
レシピをいままでどおり実行した後閉じるということになるんですが
それも上長へ申請が必要なので、できるのであればSSMでansibleを実行する方法を知りたいです

解決

これまでローカルPCからssh経由で対象サーバーにレシピを実行していたんですが
このレシピをなるべく改変せずに ssh のかわりに SSM を使って実行する方法はあるでしょうか

最初に回答した通り、SSMは複数台や定期的に複数回実行することを目的としているので、初期構築という意味ではあまり適切とは思えません。
Ansibleはsshをトンネルとして利用しManaged Nodeを制御します。しかしSSMはトンネルは提供せず、定型コマンドを実行するのみの機能となります。


対象サーバーに ssh さえあれば何もインストールする必要がない Ansible のメリットが損なわれます

勘違いされているようですが、AnsibleのManaged Nodeとして動作させるためにはsshだけでなくpythonも必要と明記されています。初期環境でpythonが入っていないとのことなので、どの道パッケージのインストール処理が必要です。
なお、SSMはAnsibleのControl Nodeの役割を担うわけではありません。対象サーバーはControl Nodeとしてansibleのインストールも必要です。

その上で、SSMを使用するのであればSSMエージェントのインストール処理も必要です。


AWS-RunRemoteScriptを使用することでAmazon S3 からのスクリプトの実行なんかは可能です。
ただし、SSMは複数台や定期的に複数回実行することを目的としているので、初期構築という意味ではあまり適切とは思えません。

ユーザーデータを使用すれば、インスタンス起動時に実行可能なため、そちらで初期構築することをお勧めします。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *