1
0

AnsibleでAWS S3にファイルを登録してみる

Posted at

AnsibleでAWS S3にファイルを登録してみる

★ この記事は3年前に執筆し、投稿し忘れていたものを投稿したものです

背景

お仕事でローカルファイルをAWS S3にアップロードする要件がありました。
AWS CLIでは何度もやってますが、今回はAnsibleから行うのが要件の一つにありましたので試してみることにします。

参考

Amazon AWS Collection
amazon.aws.aws_s3 – manage objects in S3.

どうやればできる?

調べてみると、Ansibleには「amazon.aws」モジュールが存在していました。
こちらのモジュールを使えばAWSの各サービスにアクセス可能のようです。
今回はS3への登録が目的なので、「aws_s3」モジュールを使ってみます。
また、使用に際してBoto3も必要なのでインストールします。
なお、今回は事前にaws configureを実行し、ansible実行環境でaws cliが利用可能な準備が整っていることを前提とします。

検証ファイル構成

.
├── inventory
├── playbook.yml
├── readme.md
└── work
    └── sample.tgz

インベントリファイル

今回はお試しなのでlocalhost、自サーバをターゲットとします。

./inventory

xxx.xxx.xxx.xxx

プレイブック

動作確認もかねて、pingモジュールを最初に実行したあと、aws_s3モジュールを実行します。

./playbook.yml

- hosts: all
  tasks:

  - name: ping
    ping:
    register: result

  - name: Simple PUT operation
    amazon.aws.aws_s3:
      bucket: xxxxxxxxxx
      object: /aaa/sample-s3.txt
      src: /home/xxxxx/job/ansible/aws-s3/work/sample.txt
      mode: put

モジュールのインストール

実行に必要な「amazon.aws」モジュールをインストールします。

$ ansible-galaxy collection install amazon.aws
Process install dependency map
Starting collection install process
Installing 'amazon.aws:1.5.0' to '/home/xxxxx/.ansible/collections/ansible_collections/amazon/aws'

続いて、aws cli、botoをインストールします。

$ sudo apt install awscli
$ sudo apt install python-pip
$ sudo pip install boto boto3

aws接続初期設定

$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxx
Default region name [None]: us-west-2
Default output format [None]: json

動作確認としてS3バケットの一覧を取得してみます

$ aws s3 ls

正常にバケット一覧が取得できたので実際にansibleを動かします。

$ ansible-playbook --ask-pass -i inventory playbook.yml

マネジメントコンソールにログインし、指定したバケットにファイルが登録されていることが確認できました。

おわりに

今回はplaybookの中にアクセスキーやシークレットアクセスキーを記述するのが嫌だったので、予めaws configureを実行しておく方法を取りましたが、playbookの中に記述することも可能です。

  - name: Simple PUT operation
    amazon.aws.aws_s3:
      aws_access_key: xxxxxxxxxx
      aws_secret_key: xxxxxxxxxx
      region: us-west-2
      bucket: xxxxxxxxxx
      object: /aaa/sample-s3.txt
      src: /home/xxxxx/job/ansible/aws-s3/work/sample.txt
      mode: put

また、予めs3のバケットとフォルダは作成しておく必要がありますので、今回は既存のS3を使用しました。
ちなみに、バケットがあってもフォルダがなければ処理は正常に終わるがputされていませんでした。

前に検証したarchiveモジュールと組み合わせ、ローカルのファイルを圧縮して、そのファイルをS3に保存するという流れもできそうです。

お試しでAWSを触るならマネジメントコンソールにログインしGUI操作がわかりやすくて良いですが、これからIaCやCI/CDを学ぶなら、GUI操作ばかりでなく、こういったAnsibleで構築するもの良いと思います。
ただ、playbookに指定するパラメータはGUIで予め確認しておくと理解も深まると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0