AWS CLIのアカウント管理
- AWS ECR に Docker imageをpushしようとした時に会社用と、個人用のアカウント管理するのがちょっと手こずったのでメモ
- 結論:
ローカルにある~/.aws/credentials
ファイルで管理
- 結論:
- docker-composeを使ってECRにimageをpushするときに、ちょっと手こずったのでメモ
- 結論:
複数回に分けてimageをpushする必要がある
- 結論:
※ AWS CLI2がインストールされている前提
参考:
こちらの記事からだいだいわかったので引用させていただきます
awscliの設定切り替え
AWS CLIで複数アカウントを管理する
モチベ
会社でもAWSアカウントを使っているけど、個人開発でもECRにpushしたい。でもpushしようとしたら、その会社アカウントではpushできませんよ!的なエラーが出る。
アカウント管理
以下のファイルがこのように2種類以上のアカウントを管理する。
最終的にこのファイルが以下のような形になっていれば良いのでvimで書いても良いとは思う。
この記事では他の方法を紹介している。
[default]
aws_access_key_id=***********AI
aws_secret_access_key=**************************hi
region = ap-northeast-1
[profile test-user]
aws_access_key_id = ************HI
aws_secret_access_key = *************************3MA
region=us-west-2
~/.aws/credentials に新しくアカウントを登録する方法
公式サイトに載っていたのでそちらを記載
参考:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html
$ aws configure
とすると(AWS CLIが既にインストールされていれば)Access KeyやSecret Access Keyを標準入力で求められるので、IAMを作成した時に表示されるkeyを入力する。
Default region name, Default output formatについては任意の値を。
上の作業が終わった後に
$ cat ~/.aws/credentials
とかで確認してみると新しい情報が追加されているはず。
keyの保存
新しくIAMを作成したときは、IAMの作成完了画面で aws_access_key_id, aws_secret_access_keyの2つが発行されてnew_account_credentials.csv
というファイルが一緒に保存できる画面が出ると思うのでそこから2つのkeyを保存しておく。
ecrにpushするときの権限
ecrにpushするときはそれぞれ個人ごとにIAMを作成してecrにpushできる権限をつけてpushできるようにする
pushできるようにするための権限はここら辺
AmazonEC2ContainerRegistryFullAccess
AmazonEC2ContainerRegistryPowerUser
AmazonEC2ContainerRegistryReadOnly
参考:
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/ecr_managed_policies.html
アカウントの切り替え
export AWS_DEFAULT_PROFILE=test-user
としてから
aws s3 list
や
aws ecr get-login
などの任意のログインするコマンドなどを実行する
test-user
は[default]などで囲まれている~/.aws/credentials
のファイルの値を入力する
こっちでもできるらしい
aws s3 list --profile test-user
docker-compose + ECR
まぁ、ここは簡単に。
知らなかったので記載するが、Docker imageをECRにpushするときはaws cliを正しいアカウントで切り替えた後に以下のコマンドを実行するとpushできる。
が、docker-composeの場合ってどうするんや??
と思ったのでちょっと調べてみたが、あまり情報なかった。。。(3分くらいしか調べてないけど)
結論
docker-composeの場合は一気に複数のimageを作るので複数回push作業を行う必要がある。
もしかしたら違う方法があるのかもしれないので知っている方いたら教えてください。
なので、例えば
こんな感じの環境をDockerに乗せるときは api-server, db-server(Model), mysqlの3つのimageをdocker-composeで作る必要がある。
その場合は、それぞれのサービスごとにECRでレポジトリを作成して、それぞれの環境にpushするようにする。
ちょっとめんどくさいのでもっといい方法、楽なスクリプトとか書けばいいのかな?とは思うがわからん。
# タグをつける
$ docker tag hello-world:latest aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
# ECRにpushする
$ docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
出力:
The push refers to a repository [aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world] (len: 1)
e9ae3c220b23: Pushed
a6785352b25c: Pushed
0998bf8fb9e9: Pushed
0a85502c06c9: Pushed
latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774
参考:https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/getting-started-cli.html
以上。