[RAILS] Comment enregistrer des images sur Heroku dans S3 sur AWS

introduction

AWS signifie Amazon Web Servises et est un service de serveur cloud fourni par Amazon. Il s'agit d'un service utilisé par de nombreuses personnes et entreprises, et il peut être utilisé entièrement gratuitement en fonction de la capacité et de la période d'utilisation.

Pourquoi enregistrer des images sur Heroku sur AWS

Les images enregistrées dans Heroku sont conçues pour être réinitialisées toutes les 24 heures. En enregistrant l'image sur un serveur externe, vous pouvez empêcher le phénomène de disparition de l'image, donc cette fois nous utiliserons AWS comme serveur externe.

Qu'est-ce que S3

L'un des services AWS, vous pouvez utiliser gratuitement jusqu'à 5 Go de stockage pendant 12 mois, et vous pouvez enregistrer des images, etc.

Cette procédure

Nous partirons du principe que vous vous êtes déjà inscrit auprès d'AWS. (Si vous n'êtes pas enregistré, veuillez rechercher sur AWS et en enregistrer un nouveau.)

Créer un utilisateur IAM

Qu'est-ce que l'IAM

IAM est l'un des services AWS. Un compte créé sur AWS devient un utilisateur root avec tous les privilèges, et il y a un risque qu'il soit mal utilisé si des informations sont divulguées. Par conséquent, créez un utilisateur avec des privilèges limités et laissez cet utilisateur faire le travail normal. IAM a la capacité de créer des utilisateurs avec ces privilèges limités.

Créer un utilisateur IAM

Les utilisateurs créés par IAM sont appelés utilisateurs IAM. Tout d'abord, recherchez IAM avec la recherche de services AWS et accédez à la page IAM. Dans Utilisateurs dans la barre latérale, cliquez sur Ajouter un utilisateur. Entrez ensuite n'importe quel nom d'utilisateur, cochez Accès par programmation et cliquez sur «Étapes suivantes». Sélectionnez Attacher directement la politique existante, entrez amazones3 dans le filtre de politique, cochez «AmazonS3FullAccess» et cliquez sur «Étape suivante». Ajoutez des balises uniquement à ceux qui le souhaitent et cliquez sur «Étapes suivantes». Un écran de confirmation des paramètres apparaîtra. S'il n'y a pas de problème, cliquez sur "Créer un utilisateur". N'oubliez pas de télécharger le ".csv" qui apparaît à ce moment. (À utiliser plus tard.)

Définir le mot de passe de l'utilisateur IAM

Parmi les utilisateurs IAM sur AWS créés ci-dessus, si vous cliquez sur l'onglet Informations d'identification, vous trouverez le champ de mot de passe sur la console. Sur la page qui apparaît après avoir cliqué sur Gérer ici, activez l'accès à la console et sélectionnez et appliquez un mot de passe généré automatiquement pour les paramètres de mot de passe. Cela générera un mot de passe. N'oubliez pas de télécharger le ".csv" qui apparaît à ce moment. (À utiliser plus tard.)

Préparer la destination d'enregistrement de l'image dans S3

Créer un bucket

L'endroit où les données sont réellement stockées dans S3 est appelé un compartiment. Après vous être connecté à AWS, lorsque vous passez à la page S3 par recherche de service, le mot compartiment apparaît. Il y a un bouton appelé "Créer un bucket" dans l'élément "Bucket" dans la barre latérale, alors cliquez sur ce bouton.

Nom du bucket et paramètres de région

Pour accéder à l'écran de saisie du nom du compartiment et de la région, entrez le nom du compartiment auquel vous avez pensé.

Région signifie région, mais ici, elle représente l'emplacement du serveur. Si vous êtes japonais, vous pouvez choisir Asie-Pacifique (Tokyo).

Options de réglage

Si vous souhaitez définir des options, définissez-les ici. Cliquez sur Suivant lorsque vous avez terminé.

Paramètres d'autorisation

Par défaut, "Bloquer tout accès public" est coché. Si vous décochez cette case, vous pouvez définir vos préférences pour l'accès public. Cliquez sur Suivant lorsque vous avez terminé.

Confirmation

La page de confirmation affichera une liste des paramètres que vous avez définis jusqu'à présent, donc si vous êtes satisfait, cliquez sur "Créer un compartiment".

Paramètres de stratégie de compartiment

La politique de compartiment est un mécanisme permettant de décider quel type d'accès est autorisé à enregistrer dans S3 et à lire les données. Cette fois, autorisez l'accès à partir de l'utilisateur IAM créé précédemment.

Tout d'abord, copiez l'ARN de l'utilisateur IAM et notez-le quelque part.

Dans le compartiment que vous avez créé, cliquez sur Autorisations, cliquez sur Stratégie de compartiment et écrivez ce qui suit:

{
   "Version": "2012-10-17",
   "Id": "Policy1544152951996",
   "Statement": [
       {
           "Sid": "Stmt1544152948221",
           "Effect": "Allow",
           "Principal": {
               "AWS": "ARN de l'utilisateur IAM copié"
           },
           "Action": "s3:*",
           "Resource": "arn:aws:s3:::Nom du godet"
       }
   ]
}

Enregistrez-le et vous avez terminé.

Changez la destination d'enregistrement de l'image en S3 dans l'environnement local

Installer Gem

Installez un gem appelé aws-sdk-sm pour utiliser S3 avec ruby.

Gemfile


Ajoutez ce qui suit en bas
gem "aws-sdk-s3", require: false

Tapez ensuite bundle install dans le terminal.

Spécifiez la destination d'enregistrement

config/environments/development.rb


config.active_storage.service = :local

La description ci-dessus a été remplacée par la suivante

config.active_storage.service = :amazon

config/storage.yml



Ajoutez le code suivant

amazon:
 service: S3
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
 region: ap-northeast-1
 bucket:Le nom de votre bucket

Définition des variables d'environnement

Terminal


% vim ~/.zshrc

Appuyez sur i et ajoutez ce qui suit

export AWS_ACCESS_KEY_ID="Copiez la valeur de l'ID de clé d'accès du fichier CSV ici"
export AWS_SECRET_ACCESS_KEY="Copiez ici la valeur de la clé d'accès secrète du fichier CSV"
(Le fichier CSV est le fichier téléchargé lors de la création de l'utilisateur IAM.)

:Économisez avec wq

Si vous publiez l'image à partir de l'application dans l'environnement local et confirmez qu'elle est enregistrée dans S3 sans aucun problème, modifiez également la destination d'enregistrement de l'image en S3 dans l'environnement de production.

Changer la destination d'enregistrement de l'image en S3 dans l'environnement de production

Spécifiez la destination d'enregistrement

Faites la même chose que dans l'environnement local.

config/environments/production.rb


config.active_storage.service = :local

La description ci-dessus a été remplacée par la suivante

config.active_storage.service = :amazon

Définition des variables d'environnement

Puisque Heroku est utilisé pour l'environnement de production, définissez les variables d'environnement sur Heroku. Vous pouvez définir des variables d'environnement avec la commande heroku config: set.

Terminal


% heroku config:set AWS_ACCESS_KEY_ID="Copiez la valeur de "Access key ID" dans le fichier CSV ici"
% heroku config:set AWS_SECRET_ACCESS_KEY="Copiez la valeur de "Clé d'accès secrète" dans le fichier CSV ici"

Lors de la vérification si la variable d'environnement a été définie
% heroku config

Refléter le contenu modifié dans Heroku

Terminal


% git push heroku master

référence

Programme du camp technique "Télécharger des images sur AWS"

finalement

Nous espérons que cet article aidera les débutants à évaluer.

Recommended Posts

Comment enregistrer des images sur Heroku dans S3 sur AWS
Enregistrer les images sur Amazon S3 (Local / Heroku)
Comment déployer avec heroku
Comment télécharger des images depuis AWS S3 (rails, carrierwave)
télécharger l'image pour refiler heroku S3
Étapes pour publier une application sur Heroku
[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
Remarquez comment restaurer Mysql déployé sur Heroku
[Rails MySQL] Comment réinitialiser la base de données sur heroku
Comment installer Ruby sur une instance EC2 d'AWS
Indiquez comment apprendre de Docker à AKS sur AWS
Comment se connecter à ClearDB depuis Sequel Pro avec Heroku
[Ruby On Rails] Comment réinitialiser DB dans Heroku
[rails] Comment publier des images
Comment gérer les images téléchargées
Comment réduire les images Java
Enregistrer l'icône Twitter sur s3
Comment déployer une application Java Servlet simple sur Heroku
Comment accéder à un conteneur s'exécutant sur AWS Fargate
Comment déployer une application kotlin (java) sur AWS Fargate
Comment déployer l'application Rails sur AWS (résumé de l'article)
Comment "évider" une vue sur Android
Comment utiliser Ruby on Rails
Comment déployer Bootstrap sur Rails
Pour exécuter JavaFX sur Docker
Comment utiliser les bio-formats sur Ubuntu 20.04
Comment connecter Heroku et Sequel
Comment installer MariaDB 10.4 sur CentOS 8
Comment installer WildFly sur Ubuntu 18.04
Déployer des rails sur Docker vers heroku
[Rails / Heroku / MySQL] Comment réinitialiser la base de données de l'application Rails sur Heroku
Comment créer un serveur Web sur une instance EC2 d'AWS
[rails6.0.0] Comment enregistrer des images en utilisant Active Storage au format assistant
Comment vérifier Java installé sur Mac
Un mémorandum sur l'utilisation d'Eclipse
Comment utiliser Apache Derby sur Eclipse
Créer un référentiel Maven sur les services AWS S3
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose
[Rails] Comment télécharger des images à l'aide de Carrierwave
Comment détecter les conflits de microphone sur Android
Comment changer d'images miniatures avec JavaScript
Comment installer Eclipse (Photon) sur votre Mac
Comment changer de version de Java sur Mac