S3 업로드를 설정한 후 이미지가 로드되지 않습니다

안녕하세요. 최근 Discourse EC2에서 Discourse ECS(컨테이너 서비스)로 이전했습니다. EC2를 사용하던 당시에는 S3 업로드가 아직 설정되어 있지 않았습니다. 이전을 수행하기 전에 모든 이미지를 EC2에서 S3 버킷(공개 액세스 허용)으로 복사했습니다. 그러나 S3 업로드를 활성화한 상태로(아직 CDN은 없음) 이전을 마친 후, 이미지(및 아바타)가 전혀 로드되지 않는 것을 발견했습니다.

app.yml에는 다음과 같은 내용이 있습니다:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: aws_access_key
  DISCOURSE_S3_SECRET_ACCESS_KEY: aws_secret_key
  DISCOURSE_S3_BUCKET: <uploads-bucket>
  DISCOURSE_S3_BACKUP_BUCKET: <backups-bucket>
  DISCOURSE_BACKUP_LOCATION: s3

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

컨테이너에서 다음 명령을 실행해도 문제가 해결되지 않았습니다:

rake posts:rebake
rake posts:missing_uploads
rake avatars:refresh

또한 이미지 URL의 차이점(Discourse가 여전히 EC2의 “로컬 업로드” URL을 사용하고 있음)도 발견했습니다.

S3의 링크: https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Discourse의 링크(여전히 EC2 업로드 URL): https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

브라우저에서 발생하는 오류: 404 NOT FOUND

Discourse가 이미지에 대해 올바른 S3 URL을 사용하도록 설정하는 방법은 무엇인가요?

S3로 마이그레이션하는 rake 태스크를 실행하셨나요?

마이그레이션 전에 ec2에서 그 작업을 수행하는 것이 좋습니다.

제이, 안녕하세요. ECS에서 명령어를 실행해 보았지만 오류가 발생했습니다:

확인하고자 하는데, 이 명령어는 EC2에서만 실행해야 하나요? 업로드를 마이그레이션하거나 이미지 URL을 업데이트하는 다른 방법이 있을까요? 현재 EC2 인스턴스는 정지 상태이고, 현행 ECS 설정은 이미 도메인과 데이터베이스/캐시를 사용 중이므로, 다운타임 없이 도메인과 데이터베이스/캐시를 기존 EC2로 다시 연결한 후 재구축할 수 있을지 확신이 서지 않습니다. 감사합니다.

이미지에 접근할 수 있는 인스턴스에서 명령을 실행해야 합니다. 아, 하지만 S3로 이미지를 수동으로 직접 이동했다면, 대신 업로드 테이블에 일부 수정 작업을 수행해야 할 수도 있습니다.

버킷 간 이동에 대한 설명을 담은 사용 가이드를 작성하고 있었는데, 이를 통해 문제를 해결할 수 있을 것입니다. 다만, 버킷 간 이동이 아닌 로컬에서 버킷으로의 이동을 고려하도록 지침을 수정해야 합니다.

이 작업을 일률적인 정액제로 청구한다면 4시간을 청구할 가능성이 높지만, 시간당 요금을 지불한다면 1시간이면 될 수도 있습니다.

아! 죄송합니다. 방금 이 부분을 알아차렸습니다. EC2가 동일한 데이터베이스를 사용하고 있다면, ECS를 그대로 두면서 EC2를 다시 실행한 후, 거기에 migrate-to-s3 작업을 실행할 수 있을 것입니다. 먼저 업로드용 객체 저장소 사용 (S3 & Clones) 문서에 설명된 대로 모든 S3 관련 설정을 ENV 변수로 설정해야 합니다. 이것이 가장 쉬운 해결책일 가능성이 높습니다. 시작하기 전에 데이터베이스만 백업하는 것을 권장합니다.

제이, 안녕하세요. 답변 주셔서 감사합니다. 알겠습니다. 그 방법으로 될 것 같습니다.