AWS Notes
5.58K subscribers
452 photos
42 videos
10 files
2.81K links
AWS Notes — Amazon Web Services Educational and Information Channel

Chat: https://xn--r1a.website/aws_notes_chat

Contacts: @apple_rom, https://www.linkedin.com/in/roman-siewko/
Download Telegram
​​ECR + OCI v1.1 = добавляем любой файл к образу в ECR

0️⃣ Историческая справка

OCI 1.0 появился в далёком 2017-м. Поддержка OCI 1.0 появилась в ECR в 2020-м:

https://aws.amazon.com/blogs/containers/oci-artifact-support-in-amazon-ecr/

Это позволило добавлять Helm чарты сразу к запушенному в ECR образу.

Релиз OCI v1.1 вышел в начале 2024 г. и теперь он поддерживается ECR:

https://aws.amazon.com/about-aws/whats-new/2024/06/amazon-ecr-oci-image-distribution-version-1-1/

Релиз 1.1 позволяет стандартизированно, без костылей с созданием кучи спамовских тэгов, добавить нужное к любому образу.

Документация по поводу работы с OCI в AWS на момент написания крайне ограниченная:

https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html

Поэтому в качестве примера добавим к sbom.json и readme.md к образу в ECR. Я буду для этого использовать AWS CloudShell.


1️⃣ Ставим и настраиваем oras:

https://oras.land/docs/installation/

На момент написания CloudShell по-прежнему на Intel (ужас какой), у кого ARM — нужно будет поменять в ссылке скрипта на arm64.

⚠️ Без amazon-ecr-credential-helper он даст ошибку:

Error: basic credential not found

Ставим под вашу систему, в случае CloudShell это обычное:

sudo yum install amazon-ecr-credential-helper

⚠️ Без файла ~/.docker/config.json также будет ошибка:

Error: failed to decode config file at /home/cloudshell-user/.docker/config.json: invalid config format: EOF

Создаём, если такого не было:

mkdir ~/.docker
cat >> ~/.docker/config.json << EOF
{
"credsStore": "ecr-login"
}
EOF

Если уже был, то просто добавляем строчку:

{
"credsStore": "ecr-login",
"auths": {
...


2️⃣ Просмотр файлов у образа в ECR

oras discover 0123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo:mytag

Получим что-то типа:

0123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo@sha256:54408c668558c601e7fb564a912343af3edfe5f4f5a1922086a8be87d8f74923

То есть ничего нет.


3️⃣ Добавляем файлы к образу в ECR

oras attach 0123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo:mytag --artifact-type my/sbom ./sbom.json:application/json

oras attach 0123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo:mytag --artifact-type my/readme ./readme.md:text/markdown


4️⃣ Смотрим снова

(на картинке)


5️⃣ Получаем файлы из ECR

Сначала нужен digest файла:

oras discover --artifact-type 'my/readme' 0123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo:mytag --format json | jq -r ".manifests[0].digest"

Теперь получаем сам файл в папку myfiles:

oras pull 0123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo@sha256:bdd414443ed04e69a09a9eab979d5e3950197341cc8c81a8d9001431685b571f --output myfiles


Итого: хорошая вещь, можно напихать всякого полезного в CI/CD пайплайны на каждый образ, пользуемся.

#ECR
🔥6👍4❤‍🔥1
​​S3 как container registry вместо ECR — в 5-8 раз быстрее и в 4 раза дешевле!

https://ochagavia.nl/blog/using-s3-as-a-container-registry/

#S3 #ECR
🤔44👍8🤪2
ECR to ECR pull through cache

Вместо репликации для мульти-аккаунт/мульти-регионов, теперь можно включить кэширование:

https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html

То есть первый раз качается образ из другого региона, после используется лишь кэш из текущего.

Отличная замена предыдущим костылям на синхронизацию плюс экономия на стоимости (когда приходилось всё дублировать).

#ECR #cost_optimization
🔥14