[RUBY] Hinweis: Bildspeicherung mit AWS S3

Einführung

Ich mache eine originelle App mit Rails. Wir haben eine Image-Posting-Funktion in dieser App implementiert. Als ich es jedoch mit Heroku bereitstellte, verschwand das Bild nach 24 Stunden (Spezifikation). Um dieses Problem zu lösen, haben wir S3 (Simple Storage Service) von AWS (Amazon Web Service) verwendet. Ich werde es als Memorandum schreiben, weil ich denke, dass ich die Chance haben werde, es in Zukunft zu verwenden. Außerdem werde ich die Maßnahmen zur Kontoerstellung und Sicherheit in AWS weglassen (zusammengefasst in einem anderen Artikel).

Verfahren

  1. Vorbereitung des Buckets (Datenspeicherort) in S3
  2. Daten (diesmal Bild) speichern die Zieleinstellung

1. Vorbereitung des Buckets (Datenspeicherort) in S3

Die Eimervorbereitung ist grob in die folgenden zwei Schritte unterteilt.

** 1-1. Erstellen eines Eimers ** Klicken Sie auf der offiziellen AWS-Website auf die Registerkarte Dienste und wählen Sie S3 aus. Klicken Sie dann auf "Bucket erstellen". Beachten Sie, dass der Bucket-Name nicht gespeichert werden kann, wenn ihn bereits jemand verwendet hat.

Offizielle AWS-Website

** 1-2. Bucket-Richtlinieneinstellungen ** Entscheiden Sie, welche Art von Zugriff Sie zulassen möchten, um in S3 zu speichern und Daten zu lesen. (Diesmal vom IAM-Benutzer festgelegt.)

{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Fügen Sie die zuvor kopierte ARN ein"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::Zieleimer"
        }
    ]
}

2. Daten (diesmal Bild) speichern die Zieleinstellung

Dies erfordert auch die folgenden vier Schritte.

** 2-1. Erforderliche Gem-Installation ** Fügen Sie der Gem-Datei den folgenden Gem hinzu und installieren Sie ihn auf dem Terminal.

Gemfile


gem "aws-sdk-s3", require: false

Terminal


bundle install

** 2-2. Geben Sie das Speicherziel an ** Normalerweise ist das Speicherziel lokal. Schreiben Sie dies an Amazon um. Beachten Sie auch, dass sich die zu beschreibenden Dateien zwischen der lokalen Umgebung und der Produktionsumgebung unterscheiden.

config/environments/development.rb(Unmittelbare Umwelt)


config.active_storage.service = :amazon

config/environments/production.rb(Produktionsumfeld)


config.active_storage.service = :amazon

** 2-3. Umgebungsvariablen einstellen **

config/storage.yml


local:
 service: Disk
 root: <%= Rails.root.join("storage") %>
-------------------------------Fügen Sie Folgendes hinzu----------------------------------
amazon:
 service: S3
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
 region: ap-northeast-1
 bucket:Name des Ziel-Buckets

Legen Sie Umgebungsvariablen am Terminal fest.

Terminal


vim ~/.zshrc

Terminal


export AWS_ACCESS_KEY_ID="Kopieren Sie den Wert der Zugriffsschlüssel-ID"
export AWS_SECRET_ACCESS_KEY="Kopieren Sie den Wert des geheimen Zugriffsschlüssels"

Wenden Sie die Einstellung nach dem Einstellen erneut im Terminal an.

Terminal


source ~/.zshrc

** 2-4. Funktionsprüfung ** Versuchen Sie es zu speichern und es ist in Ordnung, wenn das Objekt dem Bucket für die Seite von AWS S3 hinzugefügt wird

das ist alles

Recommended Posts

Hinweis: Bildspeicherung mit AWS S3
[AWS Lambda] Ändern Sie die Größe des in S3 gespeicherten Bildes und speichern Sie es in einem anderen S3 (mit Ruby).
Ein Fehler beim Anzeigen eines Bildes mit Active Storage
Registrieren Sie Ihr eigenes Docker-Image in ECR mithilfe der AWS CLI
Verschlüsseln Sie Daten, die mit AWS SDK für Java / SSE-KMS in S3 hochgeladen wurden
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch