2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS ECRでリポジトリが無くてもpushできるようになったらしい

2
Posted at

はじめに

AWSのECRでリポジトリが無くてもイメージをプッシュできるようになったらしいので、実際に検証してみました
もう少し詳細に言うと、指定したプレフィックスに一致する(または一致しない)リポジトリにイメージが初めてプッシュされたときに、ECR が自動的にリポジトリを作成し、定義済みの設定(ライフサイクルポリシー、暗号化、タグの不変性、リポジトリポリシーなど)を適用できるようです

公式の記事はこちら

Amazon Elastic Container Registry (ECR) が、イメージプッシュ時のリポジトリの自動作成をサポートするようになりました。この新機能により、イメージのプッシュ時にリポジトリが存在しない場合は ECR によって自動的に作成されるようになり、コンテナイメージをプッシュする前にお客様がリポジトリを事前に作成する必要がなくなって、コンテナのワークフローが簡素化されます。これにより、お客様がイメージをプッシュすると、定義されたリポジトリ作成テンプレート設定に従って ECR が自動的にリポジトリを作成します。

実際にやってみた

ということで実際にやってみました

作業イメージとしては以下の流れです

  1. リポジトリ作成テンプレートの作成
  2. イメージの作成
  3. イメージのpush
  4. コンソールから確認
  5. (リソースの削除)

リポジトリ作成テンプレートの作成

最初にリポジトリ作成テンプレートを作成します

コンソールからECR (https://console.aws.amazon.com/ecr/) のページを開き、左メニューの「プライベートレジストリ/機能と設定/リポジトリ作成テンプレート」を選択します
image.png
作成ページに移動したら、「テンプレートを作成」をクリックします
設定は画像の通りで、今回はpushした時にリポジトリを作成するため「Create on push」を選択します
また、プレフィックスを指定するため「特定のプレフィックス」を選択し、プレフィックスを指定します
今回はtest/doiにしています
(必要に応じて説明も記載します)
全て入力したら「次へ」をクリックします

image.png

次に自動生成させるリポジトリの設定をします
こちらも画像の通りです

image.png
タグのミュータビリティがタグを上書きできるかどうかの設定です
暗号化はデフォルト暗号化とKMSでの暗号化を選択できます
その他、権限やライフサイクルポリシーなども必要に応じて設定します

リポジトリタグや暗号化にKMSを使用する場合は、カスタム IAM ロールが必要です
デフォルトではECRCreateOnPushWithTemplateというユーザの権限で実行するようです
image.png

最後に設定値の確認をして「作成」をクリックします

image.png

リポジトリ作成テンプレートができました

image.png

イメージの作成

次にECRにプッシュするためのdockerfileを作成します
内容は以前のECSハンズオンの時の記事と同様です

dockerfileサンプル
FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
    apt-get -y install apache2

# Install apache and write hello world message
RUN echo "Hello World!" > /var/www/html/index.html

# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
    echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
    echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \
    echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \
    chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

今回はCloudShellから実施したいと思います

dockerが入っていることを確認したら、先ほど作成したdockerfileをアップロードします

docker --version

アップロードができたら、既存のイメージが無いことを確認し、ビルドします
ビルドが完了後の確認もしています

docker images
docker build -t {コンテナイメージ名} .
docker images

image.png

イメージのpush

ECRにpushする準備ができました
リポジトリが無いことを確認します

image.png

以下のコマンドでECRにイメージをpushします

aws ecr get-login-password --region {リージョン} | docker login --username AWS --password-stdin {アカウントID}.dkr.ecr.{リージョン}.amazonaws.com/test/doi
docker tag doi-test:latest {アカウントID}.dkr.ecr.{リージョン}.amazonaws.com/test/doi/doi-test:latest
docker push {アカウントID}.dkr.ecr.{リージョン}.amazonaws.com/test/doi/doi-test:latest

コンソールから確認

イメージのpushができたのでコンソールから確認してみたところ無事リポジトリが作成されていました🙌

image.png

リソースの削除

今回は検証なので作成したリソースを削除します

対象

  • cloudshell
    • CloudShell上のイメージ
  • コンソール
    • リポジトリ
    • リポジトリ作成テンプレート

おわりに

リポジトリが無くてもpushできることには驚きつつ、今回はtest/doi/doi-testで作成しましたが、本当はtest/doi/test-doiで作りたかったとしたら作業ミスに繋がる気がしました
今までのように、先にtest/doi/test-doiでリポジトリを作成していれば、pushする時にエラーでミスに気付けますが、リポジトリが自動で作成されてpushできてしまったら気付けないと思いました

逆にサンドボックス環境のような検証のための環境であれば、一度テンプレートを作成してしまえば、それに沿うようにイメージをpushすれば、毎回リポジトリを作成しなくて済むのでとても便利に使えると思いました

1年半くらいやってみた記事を書いていなかったのですが、今でも月に1,2回程度いいねの通知が来るので、AWS最新情報から探して、久しぶりに記事を書いてみました
この記事が誰かの役に立てば嬉しいです

いいね、チャンネル登録をお願いします!

ではでは👋

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?