Docker 멀티 CPU 아키텍처에서 Fargate Gravviton2 시도

파르게이트에 Gravton2 지원을 발표했기 때문에 해봤어요.
https://aws.amazon.com/jp/blogs/aws/announcing-aws-graviton2-support-for-aws-fargate-get-up-to-40-better-price-performance-for-your-serverless-containers/
골랑과 루스트처럼 원래 교차 번역이 가능한 언어는 그거니까 rails로 시도해 보세요.
아무거나 rails new.
rails new \
  --skip-action-mailer \
  ... 中略 ...
  --skip-webpack-install \
  rails-multi-cpu
cd rails-multi-cpu
Gemfile의 루비 버전 지정 및 웹 패키지 미리 삭제config.hosts.clear 추가하지 않으면 ALB의 호스트 이름을 액세스할 수 없기 때문에 넣습니다.
config/environments/development.rb
Rails.application.configure do
  config.hosts.clear
Dockerfile
FROM ruby:3.0.2 as builder

ENV RAILS_ENV=development
WORKDIR /app

COPY Gemfile* /app/
RUN bundle install

FROM ruby:3.0.2-slim

ENV \
    RAILS_ENV=development \
    RAILS_LOG_TO_STDOUT=1 \
    RAILS_SERVE_STATIC_FILES=1

WORKDIR /app
CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0"]

COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY . /app
RUN bundle install && mkdir -p tmp/pids
일단 움직이면 돼요.
먼저 로컬에서 구축하고 실행하며 오류가 발생하면 조정합니다
docker build -t rails-multi-cpu .
docker run -it --rm rails-multi-cpu
혼자 해볼 때 마스터를 써요.열쇠 같은 거 없어요.버블이 생겨서 그런 실수는 없지만 할애는
이벤트 상태 중 ECR 창고를 제작하여 로그인
export AWS_ACCSESS_KEY_ID=xxxxx
export AWS_SECRET_ACCSESS_KEY=xxxxx

ECR_REPO_URI=$( \
  aws ecr create-repository --repository-name rails-multi-cpu \
  --query repository.repositoryUri --output text \
)

aws ecr get-login-password --region ap-northeast-1 | \
  docker login --username AWS --password-stdin ${ECR_REPO_URI}
buildx 명령으로 이미지를 구축하여 ECR에 직접push
# builder インスタンスを作成 (作成しないとエラーになる)
docker buildx create --use --name multi-platform
# build & push
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t ${ECR_REPO_URI}:latest \
  --push .
구축 중입니다.이를 통해 알 수 있듯이 linux/amd64linux/arm64는 병행적으로 구축되었다.
ビルド中
시간이 많이 걸립니다(Intel Mac로 18분 정도 소요).
파르게이트 제작에 사용하고 싶지만copilot 다양한 대응이 없어 사용할 수 없어 번거롭지만 수작업으로 열심히 하겠습니다.
추기:
v1.13.0의copilot-cli는 매우 간단하게 디자인했기 때문에 저것을 추천합니다.
다음 단계는 스스로 노력하는 상황이다.
우선 작업 정의 로그인입니다.cli보다 컨트롤러로 하는 게 편해요.

다음 화면에서 Linux/ARM64를 선택합니다.

그리고 VPC, ECS 서비스, ALB 등을 만들면 OK.길기 때문에 사랑을 끊는다.
ALB의 Public DNS에 액세스하는 경우 스키마는 aarch64-linux입니다.

감상


빌딩이 너무 오래 걸려요. (회사에서 지적했지만 H/W 가속기는 작동하지 않나요?)따라서arm64의 기계에 구축되지 않으면 실용적인 CI/CD가 될 수 없다.
copilot 같은 생태계로 간단하게 지정할 수 있었으면 좋겠어요.(현재로서는 taskdef overrides가 아니면 지정할 수 없습니다.)

추기


근데 이거 보면 코필로트도 할 수 있어.나중에 다시 시도하십시오.

참고 자료


https://dev.classmethod.jp/articles/docker-multi-architecture-image-build

좋은 웹페이지 즐겨찾기