1
1

More than 1 year has passed since last update.

Terraformで作ったECRリポジトリにimageをpushするBash Scriptを書く

Posted at

動機

pushするイメージが多くなると、コマンドの実行も面倒である。

ディレクトリアーキテクチャ

Makefileからscriptsディレクトリにあるスクリプトを実行する。
ルートディレクトリに直接スクリプトを置いてもコードは変わらない。

.
├── Makefile
├── scripts
└── terraform

前提

TerraformからECRリポジトリのURLを得る必要がある。
ここでは、terraform outputからURLを取得する。
ハードコーディングしてもよい。

outputs.tf
output "region" {
  description = "AWS region"
  value       = var.region
}

output "ecr-user-url" {
  description = "user ECR repository url"
  value       = aws_ecr_repository.user.repository_url
}

コード

push-image.shを作成する。

push-image.sh
#!/bin/bash

# cd from root dir
cd ./terraform

REGION=`terraform output region`
REGION=`sed -e 's/^"//' -e 's/"$//' <<<"$REGION"`

Terraformのアウトプットには" (ダブルクォーテーションマーク)がついているため、取り除いてやる必要がある。
上のコードでは、TerraformからのouputをREGIONに代入し、改めてダブルクォーテーションを外して再代入している。

このようにして必要な変数を用意したら、イメージをbuild、tagづけ、pushする。
次のコードはマイクロサービスの一つであるuserのイメージをpushしている。

push-image.sh
#!/bin/bash

# cd from root dir
cd ./terraform

PRODUCT_NAME=example
REGION=`terraform output region`
REGION=`sed -e 's/^"//' -e 's/"$//' <<<"$REGION"`
ECR_USER_URL=`terraform output ecr-user-url`
ECR_USER_URL=`sed -e 's/^"//' -e 's/"$//' <<<"$ECR_USER_URL"`

# back to root dir
cd ../

aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ECR_USER_URL
docker build . -t $PRODUCT_NAME-user -f ./build/package/docker/user/Dockerfile
docker tag $PRODUCT_NAME-user:latest $ECR_USER_URL
docker push $ECR_USER_URL
  • なお、aws ecrコマンドを実行するには、.aws/credentialsにアクセスキーなどが必要である。
    これがない場合はaws configureで作成しよう。

  • Dockerfileのファイルパスやタグは適宜書き換えてほしい。

  • docker loginのusernameはAWSのまま変えてはいけない。
    あなたのユーザネームを使うわけではないので注意しよう。

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