🐥
Ansible使用してみた
Ansibleの調査・使ってて疑問に思ったことをまとめる。
エージェントレス型とは?
→対象サーバごとにAnsibleをダウンロードしなくてもSFTPプロトコル(SSH接続の標準プロトコル)を用いれば、使えるもののこと
playbooksとは
手順書のことで、管理対象ノードに対して行うことをここに記載していく
rolesとは
webapp-instanceとは
インベントリーとは
どのサーバに対し設定するかを定義するもの
=機器設定表
ansibleで設定できるtask一覧は?
→設定可能なモジュールがある
モジュール
ファイル
→ absent: そのディレクトリを削除、ただそのディレクトリにファイルが入っていても削除されてしまうから利用には注意が必要
最初に書いてみたやつ
- name: Sample Playbook
hosts: all # playの実行対象になるノード
become: false # playを管理者権限で実施しない
tasks:
- name: Archive the latest logs
archive: # community.general.archiveに修正
path: "/{{ logdirectory }}"
dest: "/{{ logdirectory }}.tar.gz"
- name: Send the tar file to S3
aws_s3:
bucket: "{{ bucket }}"
object: /log/{{ logdirectory }}.tar.gz
dest: /{{ logdirectory }}.tar.gz
mode: get
上でのlint結果調査
ansible-lint
WARNING Listing 4 violation(s) that are fatal
fqcn[action]: Use FQCN for module actions, such `community.general.archive`.
playbooks/main.yaml:5 Action `archive` is not FQCN.
risky-file-permissions: File permissions unset or incorrect.
playbooks/main.yaml:5 Task/Handler: Archive the latest logs
yaml[indentation]: Wrong indentation: expected at least 3
playbooks/main.yaml:5
fqcn[action]: Use FQCN for module actions, such `amazon.aws.s3_object`.
playbooks/main.yaml:9 Action `aws_s3` is not FQCN.
Read documentation for instructions on how to ignore specific rule violations.
Rule Violation Summary
count tag profile rule associated tags
1 yaml[indentation] basic formatting, yaml
1 risky-file-permissions safety unpredictability
2 fqcn[action] production formatting
Failed: 4 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'min'.
FQCNとは、Fully Qualified Class Nameで完全修復クラス。
ArrayListならばjava.util.ArrayList、Stringならばjava.lang.String
名前が完全じゃない
修正ver
- name: Sample Playbook
hosts: all # playの実行対象になるノード
become: false # playを管理者権限で実施しない
tasks:
- name: Archive the latest logs
community.general.archive:
path: "/{{ logdirectory }}"
dest: "/{{ logdirectory }}.tar.gz"
mode: '0755'
- name: Send the tar file to S3
amazon.aws.s3_object:
bucket: "{{ bucket }}"
object: /log/{{ logdirectory }}.tar.gz
dest: /{{ logdirectory }}.tar.gz
mode: get
実行コマンド
ansible-playbook ~/test_ansible/bin/playbook/main.yaml
ディレクトリ構成
Ansibleのディレクトリ構成のベストプラクティス
そもそもAnsibleの技術的な位置付け
- terraformとの違い
https://www.lac.co.jp/lacwatch/service/20201216_002380.html
terraformがインフラ層(AWS,GCPなど)の構成管理に優れていて、AnsibleがOS・ミドルウェア層(サーバに何をデプロイするかetc)の構成管理に適している。 - Jenkinsとの違い
https://codezine.jp/article/detail/9059
運用方法
Ansible用のサーバを作り、対象サーバを設定するのが良い!
EC2サーバに導入する時は
専用スクリプトを使おう(ipアドレスとかが頻繁に変わるから?)
参考
公式ドキュメント helmと合わせて自動デプロイとかもできるらしい
Discussion