🐥

Ansible使用してみた

2023/09/08に公開

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のディレクトリ構成のベストプラクティス
https://tk-ch.hatenablog.com/entry/20230304/1677858567

そもそもAnsibleの技術的な位置付け
運用方法

Ansible用のサーバを作り、対象サーバを設定するのが良い!
https://www.imagazine.co.jp/feature-ansible-1-basic/

EC2サーバに導入する時は

専用スクリプトを使おう(ipアドレスとかが頻繁に変わるから?)
https://docs.ansible.com/ansible/2.8/user_guide/intro_dynamic_inventory.html#inventory-script-example-aws-ec2
https://dev.classmethod.jp/articles/ansible-dynamic-inventory-2/

参考

https://qiita.com/waterada/items/4e64cc6f810a92001c95
公式ドキュメント
https://docs.ansible.com/ansible/latest/index.html
helmと合わせて自動デプロイとかもできるらしい
https://stackoverflow.com/questions/71562699/fqcn-builtins-use-fqcn-for-builtin-actions-in-ansible-playbook

Discussion