質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Podman

Podmanとは、RedHat社が開発したコンテナエンジンです。OSSで公開されており、Red Hat Enterprise Linux8(RHEL8)からはDockerに代わって標準のコンテナとなっています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

0回答

1835閲覧

Ansible-benderを使ってコンテナイメージを作成したい。

Yuta_for

総合スコア21

Podman

Podmanとは、RedHat社が開発したコンテナエンジンです。OSSで公開されており、Red Hat Enterprise Linux8(RHEL8)からはDockerに代わって標準のコンテナとなっています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2020/09/12 02:52

やりたいこと

Ansibleのツールの一つである、ansible-benderを使ってコンテナのイメージを作成しようと考えています。
具体的には、ローカルマシン上で事前に作成したNode.jsをベースにしたフレームワークであるNuxt.jsのひな型プロジェクトパーツをコンテナ内にコピーして起動直前までの状態をコンテナイメージとして作成したいと考えています。
自分の記事の紹介になってしまい恐縮ですが、元々AnsibleでDockerコンテナの管理をdockerモジュールを使って上記のことを検証していました。→AnsibleでDockerコンテナの管理をしてみた
こちらで使用したDockerfileをansible-benderを使用してDockerfileを使わないコンテナイメージの作成をしようと思ったのがansible-benderを使ったきっかけです。

ベースとなったDockerfile

Docker

1FROM node:latest 2ENV NUXT_HOST=0.0.0.0 3ENV NUXT_TELEMETRY_DISABLED=1 4WORKDIR /app 5 6COPY ./app/package.json ./app/yarn.lock ./ 7RUN yarn install 8 9COPY ./app . 10 11CMD ["yarn", "run", "dev"]

このDockerfileをPlaybookに記載してansible-bender buildでPlaybookのみで実行できるようにしたのが以下のPlaybookとなります。

構成図

├── Prototype │ └── app/(Nuxt.jsのひな型) └── build_nuxtimage.yml

YAML

1--- 2- name: Build Nuxt.js image 3 hosts: all 4 gather_facts: false 5 vars: 6 ansible_python_interpreter: /usr/bin/python3 7 ansible_bender: 8 base_image: "localhost/node-python3" 9 ansible_extra_args: "-vvv" 10 11 target_image: 12 name: yuta28/bender-test 13 working_dir: /app 14 environment: 15 NUXT_HOST: 0.0.0.0 16 labels: 17 built-by: '{{ ansible_user }}' 18 cmd: "yarn run dev" 19 20 tasks: 21 - name: Copy Prototype parts 22 copy: 23 src: "{{ item }}" 24 dest: /app/ 25 with_items: 26 - "{{ playbook_dir }}/Prototype/app/package.json" 27 - "{{ playbook_dir }}/Prototype/app/yarn.lock" 28 29 - name: Yarn install 30 command: "yarn install" 31 32 - name: Copy Prototype 33 synchronize: 34 src: "{{ playbook_dir }}/Prototype/app" 35 dest: /app 36

ただこちらのplaybookを実行しますとCopy Prototypeタスクで処理が終わらない状態が続きました。

task path: /home/ec2-user/ansible-bender/simple-test/.build_nuxtimage-20200912-021642705039-umrydddzeh.yaml:10 <yuta28-bender-test-20200912-021638690637-cont> ESTABLISH LOCAL CONNECTION FOR USER: ec2-user <yuta28-bender-test-20200912-021638690637-cont> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1 `"&& mkdir "` echo /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/ansible-tmp-1599877156.9603715-28334-161050357341488 `" && echo ansible-tmp-1599877156.9603715-28334-161050357341488="` echo /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/ansible-tmp-1599877156.9603715-28334-161050357341488 `" ) && sleep 0' Using module file /usr/lib/python3.6/site-packages/ansible/modules/files/synchronize.py <yuta28-bender-test-20200912-021638690637-cont> PUT /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/tmp8nv04tk7 TO /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/ansible-tmp-1599877156.9603715-28334-161050357341488/AnsiballZ_synchronize.py <yuta28-bender-test-20200912-021638690637-cont> EXEC /bin/sh -c 'chmod u+x /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/ansible-tmp-1599877156.9603715-28334-161050357341488/ /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/ansible-tmp-1599877156.9603715-28334-161050357341488/AnsiballZ_synchronize.py && sleep 0' <yuta28-bender-test-20200912-021638690637-cont> EXEC /bin/sh -c '/usr/bin/python3.6 /home/ec2-user/.ansible/tmp/ansible-local-24469ah1fy7m1/ansible-tmp-1599877156.9603715-28334-161050357341488/AnsiballZ_synchronize.py && sleep 0'

app/配下のひな型プロジェクトファイルの中にnode_modulesディレクトリがありましてこの中に3万近いモジュールファイルがあることでコピーが上手くいかないことが原因だと思われました。
Ansibleに詳しい人から大きなファイルを直接ローカルマシンからコンテナへコピーするよりもAWS S3を経由してコピーするほうがよいという助言をいただきましたので、一度aws_s3モジュールを使ったテストPlaybookを作成しました。

YAML

1--- 2- name: Build Nuxt.js image 3 hosts: all 4 gather_facts: false 5 vars: 6 ansible_python_interpreter: /usr/bin/python3 7 ansible_bender: 8 base_image: "localhost/node-python3" 9 ansible_extra_args: "-vvv" 10 11 target_image: 12 name: yuta28/bender-test 13 working_dir: /app 14 environment: 15 NUXT_HOST: 0.0.0.0 16 labels: 17 built-by: '{{ ansible_user }}' 18 19 tasks: 20 - name: Upload Prototype to S3 21 aws_s3: 22 bucket: ansible-bender-bucket 23 object: app/nuxt.config.js 24 src: "{{ playbook_dir }}/Prototype/app/nuxt.config.js" 25 mode: put

こちらのPlaybookを実行しますと以下のようなエラーがでました。

TASK [Upload Prototype to S3] ********************************************************************************************************************************************************** task path: /home/ec2-user/ansible-bender/simple-test/.build_nuxtimage-20200912-024316468577-jjfznsazui.yaml:5 <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'mount', b'--', b'yuta28-bender-test-20200912-024312325590-cont'] <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'run', b'--', b'yuta28-bender-test-20200912-024312325590-cont', b'/bin/sh', b'-c', b'( umask 77 && mkdir -p "` echo /tmp `"&& mkdir "` echo /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566 `" && echo ansible-tmp-1599878598.4473948-102621-228656985697566="` echo /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566 `" ) && sleep 0'] <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'run', b'--', b'yuta28-bender-test-20200912-024312325590-cont', b'/bin/sh', b'-c', b'test -e /home/ec2-user/ansible-bender/simple-test/Prototype/app/nuxt.config.js && sleep 0'] Using module file /usr/lib/python3.6/site-packages/ansible/modules/cloud/amazon/aws_s3.py <yuta28-bender-test-20200912-024312325590-cont> PUT /home/ec2-user/.ansible/tmp/ansible-local-1025297iswwqko/tmpddey__6x TO /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566/AnsiballZ_aws_s3.py <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'run', b'--', b'yuta28-bender-test-20200912-024312325590-cont', b'/bin/sh', b'-c', b'chmod u+x /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566/ /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566/AnsiballZ_aws_s3.py && sleep 0'] <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'run', b'--', b'yuta28-bender-test-20200912-024312325590-cont', b'/bin/sh', b'-c', b'/usr/bin/python3 /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566/AnsiballZ_aws_s3.py && sleep 0'] <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'run', b'--', b'yuta28-bender-test-20200912-024312325590-cont', b'/bin/sh', b'-c', b'rm -f -r /tmp/ansible-tmp-1599878598.4473948-102621-228656985697566/ > /dev/null 2>&1 && sleep 0'] <yuta28-bender-test-20200912-024312325590-cont> RUN [b'buildah', b'umount', b'--', b'yuta28-bender-test-20200912-024312325590-cont'] fatal: [yuta28-bender-test-20200912-024312325590-cont]: FAILED! => { "changed": false, "invocation": { "module_args": { "aws_access_key": null, "aws_secret_key": null, "bucket": "ansible-bender-bucket", "debug_botocore_endpoint_logs": false, "dest": null, "dualstack": false, "ec2_url": null, "encrypt": true, "encryption_kms_key_id": null, "encryption_mode": "AES256", "expiry": 600, "headers": null, "ignore_nonexistent_bucket": false, "marker": "", "max_keys": 1000, "metadata": null, "mode": "put", "object": "app/nuxt.config.js", "overwrite": "always", "permission": [ "private" ], "prefix": "", "profile": null, "region": null, "retries": 0, "rgw": false, "s3_url": null, "security_token": null, "src": "/home/ec2-user/ansible-bender/simple-test/Prototype/app/nuxt.config.js", "validate_certs": true, "version": null } }, "msg": "Failed to import the required Python library (botocore or boto3) on ip-172-31-8-50.ap-northeast-1.compute.internal's Python /usr/bin/python3. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter" }

必要なPythonライブラリが不足していると出ていますが、boto3もbotocoreもインストールはされています。Python interpreterの指定が間違っているのというのがよく分からず、一応冒頭で明示的にansible_python_interpreter: /usr/bin/python3を指定しましたが、結果は変わりませんでした。

結論

ansible-benderで大量のファイルをローカルからコンテナへコピーする方法として他にどのような方法がありますでしょうか?
アドバイスいただけますと幸いです。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問