JAWS-UG CLI専門支部 #107 祝日スペシャル

AWS CLIの使い方の基礎を理解し、活用方法について議論しましょう。 概要. スケジュールは以下を予定しています。 概要. スケジュールは以下を予定しています。 10:30-11:00 雑談タイム; 11:00-16:00 ハンズオンの概要説明、ハンズオン (随時休憩); 16:00-16:45 ドリンクタイム. ドリンクはご持参ください。アルコールもOK … 続きを読む

【備忘録】AWS ECRにdocker pushした際にno basic auth credentialsとなった場合の解決方法

問題点

ECRにコンテナイメージをdocker pushした際にno basic auth credentialsとなってしまい、pushが出来なかった。

$ aws ecr get-login --no-include-email --region ap-northeast-1
docker login -u AWS -p xxxxx== https://xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

$ docker login -u AWS -p xxxxx== https://xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

$ docker push xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxx:latest
The push refers to repository [xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxx]
dbee35a328d0: Preparing
77bf014019f2: Preparing
82cdb9879505: Preparing
...

no basic auth credentials

参考

Amazon ECR 使用時の Docker コマンドのエラーのトラブルシューティング – Amazon ECR

公式サイトのトラブルシューティングではno basic auth credentialsの原因がいくつか取り上げられていたが、自分の環境では該当しそうなものがなかった。

  • 別のリージョンに対して認証されている
  • トークンの有効期限が切れた。
  • wincred 認証情報マネージャーのバグ

原因

docker pushを実行してる環境のアクセスキーが別アカウントのものになっていた。

docker pushを実行してる環境のアクセスキー情報

$ aws configure
AWS Access Key ID [****************IUJD]:
AWS Secret Access Key [****************EuiN]:
Default region name [ap-northeast-1]:
Default output format [json]:

ECRを利用しているAWSコンソールのアクセスキー情報

ecr.png

解決方法

AWS CLIにECRを利用いているAWSアカウントのアクセスキーを設定して、 Dockerクライアントの認証とプッシュコマンドを再度実行したらdocker pushが成功した。

$ aws configure
AWS Access Key ID [****************IUJD]: ****************IXYQ
AWS Secret Access Key [****************EuiN]: ********************
Default region name [ap-northeast-1]:
Default output format [json]:
$ aws ecr get-login --no-include-email --region ap-northeast-1
docker login -u AWS -p xxxxx== https://xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

$ docker login -u AWS -p xxxxx== https://xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

$ docker push xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxx:latest
The push refers to repository [xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxx]
dbee35a328d0: Pushed
77bf014019f2: Pushed
82cdb9879505: Pushed
...

latest: digest: sha256:d4c79d7f9b26762a139b150fdf65fa55c47d1673f4cc55659ed9969ddf03db8b size: 5947

続きを読む

AWS CLI S3 ディレクトリを再帰的にダウンロードするコマンド

AWS CLI S3 ディレクトリを再帰的にダウンロードするコマンド

注意点

s3://バケット名/ディレクトリ名/ 最後のスラッシュが必要

--recursive で再帰指定が必要

$ aws s3 cp s3://バケット名/ディレクトリ名/ . --recursive

(メモ)IDCFオブジェクトストレージの場合

$ aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 cp s3://バケット名/ディレクトリ名/ . --recursive

続きを読む

AWS CLIに複数のAWSアカウントを登録する方法 – Qiita

AWS CLIに複数のAWSアカウントを登録する方法 – Qiita. 複数のAWSを利用するプロジェクトに携わっている場合、複数のAWSアカウントをCLIで操作する可能性が出て… 続きを表示 複数のAWSを利用するプロジェクトに携わっている場合、複数のAWSアカウントをCLIで操作する可能性が出てきます。 Secret Keyは作成時 … 続きを読む

IDCFオブジェクトストレージ AWS CLI エラー 【The authorization mechanism you have provided (AWS4-HMAC-SHA256) is not supported.】

現象

IDCFオブジェクトストレージ向けの AWS CLI S3 コマンドがエラーを吐く

$ aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 ls
An error occurred (InvalidRequest) when calling the ListBuckets operation: The authorization mechanism you have provided (AWS4-HMAC-SHA256) is not supported.

原因

リクエスト認証には、v2とv4があり最新のawsの認証はデフォルトでv4になっている。
しかし、IDCFオブジェクトストレージの認証はv2になっており、v4認証でアクセスするとエラーとなる。

対策

リクエスト認証での署名バージョンの指定が可能なので、v4からv2に変更する。

$ aws configure set default.s3.signature_version s3

ちなみにv4を指定する場合はこう

$ aws configure set default.s3.signature_version s3v4

参考リンク

http://docs.openio.io/master/source/user-guide/awscli.html

続きを読む

AWS CLIに複数のAWSアカウントを登録する方法

複数のAWSを利用するプロジェクトに携わっている場合、複数のAWSアカウントをCLIで操作する可能性が出てきます。
Secret Keyは作成時しか見えませんので、毎回AWSにログインしてSecret Keyを作り直すこともナンセンスです。
本記事では、AWS CLIに複数のAWSアカウントを登録し、再度configする手間を省く方法をまとめます。

AWS CLIのインストール

AWSの公式ドキュメントを参考にinstallを行います。
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html

初期設定

defaultで利用するアカウントを登録します。

$ aws configure
AWS Access Key ID [None]: ${Your Default ID}
AWS Secret Access Key [None]: ${Your Default Secret Key}
Default region name [None]: ${Region}
Default output format [None]: json

AWS CLIに複数のアカウントを登録する

AWS CLIは–profileオプションを利用することで、複数のアカウントを登録することが可能です

$ aws configure --profile xxxx
AWS Access Key ID [None]: ${Your ID}
AWS Secret Access Key [None]: ${Your Secret Key}
Default region name [None]: ${Region}
Default output format [None]: json

では、どのようにcredentialなどは登録されているのでしょうか。
AWS CLIのconfig、およびcredentialを保存しているfileを確認してみましょう。

~/.aws
$ tree ~/.aws
.aws
├── config
└── credentials

まずはconfigから確認してみましょう。

~/.aws/config
[default]
output = json
region = ap-northeast-1
[profile xxxx]
output = json
region = ${Region}

[profile xxxx]といった項目が追加され、先ほど入力した情報と同様の情報が格納されていることが確認できます。
credentialsの方も確認してみましょう。

~/.aws/credentials
[default]
aws_access_key_id = ${Your Default ID}
aws_secret_access_key = ${Your Default Secret Key}
[xxxx]
aws_access_key_id = ${Your ID}
aws_secret_access_key = ${Your Secret Key}

こちらも先ほど入力した情報と同様の情報が格納されていることが確認できました。

AWS CLIの利用方法

–profileオプションを利用することによって、~/.aws以下に保存されている情報から、–profileの引数と同様の項目からkeyなどの情報を参照して利用します。
以下の例は、s3バケットの一覧をアカウントを変えて表示させています。
アカウントが変わることで、s3のバケットが変更されるのがわかると思います。

s3バケットの一覧が変更されていることを確認
$ aws s3 ls
$ aws s3 ls --profile xxxx

まとめ

今回はAWS CLIに複数のAWSアカウントを登録する方法をまとめました。
最近はAWS CLIだけではなく、Serverless frameworkやterraformを利用した構築方法もありますので、そちらの方も随時まとめていけたらと思います。

続きを読む

いつか必要になるかも:エクセルでAWSのJsonを扱う際に便利な関数

はじめに

お久しぶりです。

神谷です。いつも業務で仕方なく開発した、要るのか要らないのかよく判らないテクニックを公開しています。
今回もそんな感じの、どうでもいいテクニックです。

AWS CLIの結果のJsonをエクセルで処理してみる

「データの区切り文字」でチャチャッと出来るんですが、それが許されないような場合に。

A列に下の式を入れて、B列にAWS CLIのJsonの結果をそのまま貼り付けるような使い方を想定しています。
つまり
"key1": "value1"
"key2": "value2"

こんなのがB1,B2にあったら、A1にはvalue1、A2にはvalue2と出力されるような関数です。
誰もが一度はトライしてみて、恐らく途中で挫折してる、例の式です。

=RIGHT(LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1),LEN(LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1))-FIND("""",LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1),FIND("""",LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1),FIND("""",LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1))+1)+1))

どうですか。エクセルが沸騰しちゃいそうな関数でしょう。
で、これは
"key": true,
"key2": false

みたいに、valueがダブルコーテーションで括られていない列には対応してないです。
そういう行にはこんな式を。

=IF(LEFT(RIGHT(B1,2),1)=",",LEFT(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2),LEN(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2))-2),LEFT(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2),LEN(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2))))

上の2つの式をどうにかこうにか組み合わせれば、”value”だろうがvalueだろうが、対応出来る感じが、何となくするでしょう。
けれど、ダメです。
こんなん、メモリ食い過ぎてすぐエクセルが死にます。

なぜこんな事をしたのか

他の人に試験を任せたら、人力で一生懸命に値を比較してたので、おいおいそういうの自動化しろよと思って、あまり考えずにちゃちゃっと作ってみたのですが……
作ってると面白くなって止まらなくなったというか……
まぁそれ以前の根本的な問題ですよね。
「データの区切り文字」でやれと。
はい。

続きを読む

AWS Rekognitionを使って画像のラベル情報を取得する

内容詳細

AWS CLIからAWS RekognitionのDetectLabelsを使って画像のラベル情報を取得する。

AWS CLIのインストール

$ pip install awscli 

AWS CLIの設定

IMAからAccess KeyとSecret Access Keyを発行する。
regionはAWS Rekognitionが利用できるリージョンを設定する。

$ aws configure --profile=PROFILE_NAME
AWS Access Key ID [None]: ACCESSKEY
AWS Secret Access Key [None]: SECRETKEY
Default region name [None]: us-east-1
Default output format [None]: json

画像をS3にアップロード

S3には事前にバケット(tmp-backet)を作成しておく。

$ aws s3 cp img/lena.png s3://tmp-backet/ --acl public-read --profile=PROFILE_NAME

DetectLabelsの実行

$ aws --region us-east-1 rekognition detect-labels --image '{"S3Object":{"Bucket":"tmp-backet","Name":"lena.png"}}' --profile=PROFILE_NAME

入力画像

lena.png
lena.png

実行結果

{
    "Labels": [
        {
            "Confidence": 99.166259765625,
            "Name": "Human"
        },
        {
            "Confidence": 99.16625213623047,
            "Name": "People"
        },
        {
            "Confidence": 99.166259765625,
            "Name": "Person"
        },
        {
            "Confidence": 65.69634246826172,
            "Name": "Female"
        },
        {
            "Confidence": 57.33375549316406,
            "Name": "Face"
        },
        {
            "Confidence": 57.33375549316406,
            "Name": "Portrait"
        },
        {
            "Confidence": 51.7690315246582,
            "Name": "Woman"
        },
        {
            "Confidence": 51.27519989013672,
            "Name": "Clothing"
        },
        {
            "Confidence": 51.27519989013672,
            "Name": "Hat"
        },
        {
            "Confidence": 50.78194046020508,
            "Name": "Sun Hat"
        }
    ],
    "OrientationCorrection": "ROTATE_0"
}

続きを読む