LoginSignup
0
0

More than 1 year has passed since last update.

パイプラインでAWS CLI(Docker)を利用する際の注意点

Posted at

AWS CLIのバージョン2からDockerでの実行ができます。自分の場合、よくPythonのバージョンが不整合になったりして面倒なので、Dockerを利用しています。

利用方法

公式ドキュメントの記載通り、以下のコマンドでOKです。

$ docker run --rm -it amazon/aws-cli:2.0.6 command

さらに、エイリアスを作成することでdockerを気にすることなくCLIを利用できます。.bashrcや.zshrcに設定しておきましょう。

$ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6'

問題

[小ネタ] CloudWatch メトリクスのグラフをローカルに保存しちゃうぞ!の記事を参考にCloudWatchのグラフをPNGで保存してみます。

$ aws cloudwatch get-metric-widget-image --metric-widget file://metrics.json --output-format "png" --output text --query MetricWidgetImage | base64 --decode > metrics.png
# aliasを使用していない場合
$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6 cloudwatch get-metric-widget-image --metric-widget file://metrics.json --output-format "png" --output text --query MetricWidgetImage | base64 --decode > metrics.png

CloudWatchでのグラフのJSONでの設定からAWS CLIでbase64形式で取得し、標準出力で画像ファイルに出力するという仕組みです。
実際に実行してみるとInvalid character in input stream.となり、上手くいきません。

-tはつけない

一旦、取得結果をtemp.txtに出力してみます。

$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6 cloudwatch get-metric-widget-image --metric-widget file://metrics.json --output-format "png" --output text --query MetricWidgetImage > temp.txt

実際に出力した文字列を確認すると、[mと余計な文字列が含まれてしまっています。

...(省略)...[m 
...(省略)... [m

-i-tについて

-tのオプションはpseudo-TTYを割り当てるオプションであり、実際に以下のようにbash等を利用する際には擬似端末を割り当てることでinteractiveな操作を行うことができます。

$ docker run --rm -it nginx bash 
root@b929c63b8e08:/# 
# ↑擬似端末が立ち上がる

-iのオプションを利用することで標準入力を受け付けるため、-itの指定で擬似端末による操作が行えます。

回避手段

はっきり、原因が分からないのですが、今回の問題は-tオプションをつけてttyを割り当てた際の出力に問題があるのかなと思いました。そのため、回避手段としてはオプションで指定している-tのオプションを入れないことです。コマンドは以下です。

$ docker run --rm -i -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6 cloudwatch get-metric-widget-image --metric-widget file://metrics.json --output-format "png" --output text --query MetricWidgetImage | base64 --decode > metrics.png

参考

0
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
0
0