[RUBY] Remarque: Stockage d'images à l'aide d'AWS S3

introduction

Je crée une application originale avec Rails. Nous avons implémenté une fonction de publication d'images dans cette application. Cependant, lorsque je l'ai déployé avec Heroku, l'image a disparu après 24 heures (spécification). Pour résoudre ce problème, nous avons utilisé S3 (Simple Storage Service) d'AWS (Amazon Web Service). Je vais l'écrire sous forme de mémorandum parce que je pense que j'aurai l'occasion de l'utiliser à l'avenir. De plus, j'omettrai la création de compte et les mesures de sécurité sur AWS (résumées dans un autre article).

procédure

  1. Préparation du compartiment (emplacement de stockage des données) dans S3
  2. Données (image cette fois) enregistrer le paramètre de destination

1. Préparation du compartiment (emplacement de stockage des données) dans S3

La préparation du godet est divisée en deux étapes.

** 1-1. Création d'un bucket ** Cliquez sur l'onglet Services sur le site Web officiel d'AWS et sélectionnez S3. Cliquez ensuite sur "Créer un bucket". Notez que le nom du bucket ne peut pas être enregistré si quelqu'un l'a déjà utilisé.

Site Web officiel AWS

** 1-2. Paramètres de stratégie du bucket ** Décidez du type d'accès que vous souhaitez autoriser pour enregistrer dans S3 et lire les données. (Cette fois, définie par l'utilisateur IAM.)

-Entrez IAM dans la fenêtre de recherche à partir du numéro de service et cliquez sur le menu affiché. -Cliquez sur l'utilisateur à l'extrême gauche, puis cliquez sur le nom d'utilisateur affiché. -Copiez l'ARN. -Sélectionnez à nouveau S3 dans l'onglet service et sélectionnez le compartiment cible. -Cliquez sur l'onglet Autorisations, Modifier l'élément de stratégie du compartiment. (Voir ci-dessous)

{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Collez l'ARN que vous avez copié précédemment"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::Bucket cible"
        }
    ]
}

2. Données (image cette fois) enregistrer le paramètre de destination

Cela nécessite également les quatre étapes suivantes.

** 2-1. Installation Gem requise ** Ajoutez le Gem suivant au fichier Gem et installez-le sur le terminal.

Gemfile


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

Terminal


bundle install

** 2-2. Spécifiez la destination d'enregistrement ** Normalement, la destination de sauvegarde est locale. Réécrivez ceci sur amazon. Notez également que les fichiers à décrire diffèrent entre l'environnement local et l'environnement de production.

config/environments/development.rb(Environnement local)


config.active_storage.service = :amazon

config/environments/production.rb(Environnement de production)


config.active_storage.service = :amazon

** 2-3. Définir les variables d'environnement **

config/storage.yml


local:
 service: Disk
 root: <%= Rails.root.join("storage") %>
-------------------------------Ajoutez ce qui suit----------------------------------
amazon:
 service: S3
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
 region: ap-northeast-1
 bucket:Nom du compartiment cible

Définissez les variables d'environnement sur le terminal.

Terminal


vim ~/.zshrc

Terminal


export AWS_ACCESS_KEY_ID="Copiez la valeur de l'ID de clé d'accès"
export AWS_SECRET_ACCESS_KEY="Copiez la valeur de la clé d'accès secrète"

Après le réglage, appliquez à nouveau le réglage dans le terminal.

Terminal


source ~/.zshrc

** 2-4. Vérification du fonctionnement ** Essayez de l'enregistrer et c'est OK si l'objet est ajouté au compartiment pour la page d'AWS S3

c'est tout

Recommended Posts

Remarque: Stockage d'images à l'aide d'AWS S3
[AWS Lambda] Redimensionner l'image enregistrée dans S3 et l'enregistrer dans un autre S3 (à l'aide de Ruby)
Une erreur commise lors de l'affichage d'une image à l'aide du stockage actif
Enregistrez votre propre image Docker dans ECR à l'aide de l'AWS CLI
Crypter les données téléchargées vers S3 à l'aide du kit AWS SDK pour Java / SSE-KMS
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3