質問: ssh 経由で実行するサーバー初期構築用の Ansible のレシピがあって これまでローカルPCからssh経由で対象サーバーにレシピを実行していたんですが このレシピをなるべく改変せずに ssh のかわりに SSM を使って実行する方法はあるでしょうか --- セキュリティ要件のため管理はすべてSSM経由で行うことになり ローカルPCで ansible-playbook を実行するだけでは動きません 方法としては 1. SSM でEC2に入ってからレシピを git clone でもってきて ローカルホストに対して ansible を実行する 初期環境なので python, git, ansible が入っていないので手動でインストールする必要があり再現性が担保できない 2. aws cli には Run Command () というのがあってSSM 経由でコマンドを実行できるみたいなのですが ansible で ssh のかわりにこの Run Command を使用するというのはできないでしょうか 3. 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は複数台や定期的に複数回実行することを目的としているので、初期構築という意味ではあまり適切とは思えません。 ユーザーデータを使用すれば、インスタンス起動時に実行可能なため、そちらで初期構築することをお勧めします。