Créer un portefeuille à partir d'un état où je n'avais aucune connaissance d'AWS, le déploiement personnel sur AWS et le déploiement automatique de CircleCI étaient les plus difficiles, donc un mémorandum ・ Je créerai un portefeuille à partir de maintenant ・ Pour ceux qui utiliseront AWS à partir de maintenant J'ai pensé que ce serait bien s'il y avait un article.
Un aperçu du portfolio que j'ai créé [AWS? Docker?] Résumez les connaissances nécessaires dans votre portefeuille d'une manière simple à comprendre [terraform? CircleCI?]
Le prédécesseur de cet article est [Part 1] Tester / déployer automatiquement le service WEB créé avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI et le convertir en terraform
J'apprécierais si vous pouviez jeter un coup d'œil.
Premièrement: [Part 1] Déployer et terraformer automatiquement les services WEB créés avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI 2ème: Cet article Troisièmement: [Partie 2] Déployez automatiquement le service WEB créé avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI et faites-le terraformer
Ce que vous pouvez faire avec cet article est généralement ** payant ** au-delà de l'offre gratuite d'AWS. De plus, parce que vous obtenez un domaine avec votre nom.com, cela coûte également ** de l'argent. ** ** Veuillez lire uniquement ceux qui pensent qu'il s'agit de frais d'étude et qui peuvent les diviser. Pour le moment, j'aimerais publier un service Web faiblement couplé utilisant ECS et ECR! Pour ceux qui disent.
Tout d'abord, nous allons créer un réseau sur l'écran AWS. Soyons enthousiastes!
Le bloc CIDR est une abréviation de Classless Inter-Domain Routing. Une des méthodes de notation de l'adresse IP. En termes simples, c'est la gamme des VPC.
Au fait, ici, c'est un affichage comme «/ 16». En notation CIDR, il s'écrit «/ 16», «/ 24», «32».
/ 16
peut spécifier jusqu'au troisième octet.
Par exemple, le «0.0» de 10.20.0.0
Vous pouvez spécifier cette partie.
/ 24
peut spécifier jusqu'au 4e octet.
Par exemple, le dernier «0» de 10.20.0.0
Vous pouvez spécifier cette partie.
/ 32
peut spécifier une adresse IP spécifique.
Lors de la création d'un VPC, vous devez sécuriser une adresse IP dans le sous-réseau ou AZ à l'intérieur, et le changement ne fonctionne pas, donc
Dans de nombreux cas, spécifiez / 16
pour sécuriser de nombreuses adresses IP disponibles.
Ici, nous utilisons AZ ** ap-nordest-1a et ap-nordest-1c **. La raison d'utiliser les deux AZ est que nous utiliserons ALB plus tard.
Créez le sous-réseau suivant à partir de Submarine> Create Subsection.
name | Bloc CIDR | Region/AZ |
---|---|---|
qiita-sample-front-subnet-1a | 10.20.1.0/24 | ap-northeast-1a |
qiita-sample-front-subnet-1c | 10.20.2.0/24 | ap-northeast-1c |
qiita-sample-back-subnet-1a | 10.20.3.0/24 | ap-northeast-1a |
qiita-sample-back-subnet-1c | 10.20.4.0/24 | ap-northeast-1c |
qiita-sample-rds-subnet-1a | 10.20.5.0/24 | ap-northeast-1a |
qiita-sample-rds-subnet-1c | 10.20.6.0/24 | ap-northeast-1c |
Créez la table de routage suivante à partir de Table de routage> Créer une table de routage.
name |
---|
qiita-sample-front-route-table |
qiita-sample-back-route-table |
qiita-sample-rds-route-table |
Créez la passerelle Internet suivante à partir de Internet Gateway> Créer une passerelle Internet.
Associez VPC et IGW.
name |
---|
qiita-sample-igw |
--Sélectionnez l'onglet Modifier de la table de routage et associez l'IGW créé précédemment à 0.0.0.0 pour la table de routage autre que RDS. --Sélectionnez l'onglet Association sous-marine et associez-le comme indiqué dans le tableau ci-dessous.
Sous-zone | Tableau des itinéraires |
---|---|
qiita-sample-front-subnet-1a | qiita-sample-front-route-table |
qiita-sample-front-subnet-1c | qiita-sample-front-route-table |
qiita-sample-back-subnet-1a | qiita-sample-back-route-table |
qiita-sample-back-subnet-1c | qiita-sample-back-route-table |
qiita-sample-rds-subnet-1a | qiita-sample-rds-route-table |
qiita-sample-rds-subnet-1c | qiita-sample-rds-route-table |
Créez un groupe de sécurité dans le tableau ci-dessous
Nom du groupe de sécurité | type | protocole | Gamme de ports | La source |
---|---|---|---|---|
qiita-sample-front-sg | HTTP | TCP | 80 | 0.0.0.0/0 |
Comme ci-dessus | SSH | TCP | 22 | Votre propre IP |
Comme ci-dessus | HTTPS | TCP | 443 | 0.0.0.0/0 |
Comme ci-dessus | Douane | TCP | 3000 | 0.0.0.0/0 |
qiita-sample-back-sg | Douane | TCP | 3000 | 0.0.0.0/0 |
Comme ci-dessus | HTTPS | TCP | 443 | 0.0.0.0/0 |
qiita-sample-rds-sg | MYSQL/Aurora | TCP | 3306 | qiita-sample-back-sg |
C'est la fin du réseau.
Obtenez le domaine sur Name.com. Veuillez obtenir le domaine que vous aimez (de préférence 1 yen) qui fait référence à cet article.
Pour savoir comment obtenir un domaine avec votre nom.com, veuillez consulter [Obtenir un domaine] Obtenir un domaine avec votre nom.com et aws.
** * Désactivez le paramètre de mise à jour automatique du domaine! (Cela coûte de l'argent chaque année) **
Cette fois, dans mon environnement, j'ai les domaines suivants.
Nom de domaine | rôle |
---|---|
qiita-sample.work | front |
qiita-sample-api.work | back |
Créez une zone hôte à partir de Route53.
À partir des détails de la zone hôte, copiez la ** valeur / destination de routage du trafic ** de l'enregistrement NS.
Il faudra un certain temps pour réfléchir. (Cela peut prendre jusqu'à 1 jour)
dig qiita-sample.work(Domaine acquis) +short NS
Est tapé à partir du terminal, et si l'enregistrement NS enregistré avec succès est affiché, il est reflété.
Demandez un certificat à ACM. Sélectionnez Demander un certificat public pour demander un certificat.
Nom de domaine |
---|
qiita-sample.work |
*.qiita-sample.work |
Remplissez le nom de domaine ci-dessus et sélectionnez la validation DNS. De même, faites de même pour qiita-sample-api.work.
Ensuite, vous serez redirigé vers l'écran de vérification, où vous allez ** créer un enregistrement avec Route53 **. (Créez des enregistrements dans tous les domaines ci-dessus.) Après un certain temps, la vérification sera en attente et le statut sera publié. Si la vérification est en attente pendant une longue période, il est possible que les paramètres du serveur NS soient retardés. Vérifions avec la commande dig.
La configuration de Route53 et du serveur de noms de domaine prend un certain temps, alors créons rapidement RDS ici.
Créez RDS en sélectionnant RDS> Créer une base de données, en vous référant aux paramètres suivants.
Configuration | Remarques | |
---|---|---|
Type de moteur | MySQL | |
version | 5.7.30 | Cette fois 5.7 |
modèle | développement de/tester | Le niveau gratuit est bien, mais cette fois pour étudier |
Identificateur d'instance de base de données | qiita-sample-rds | Tout est OK |
Nom d'utilisateur principal | ** | Tout est OK |
Mot de passe maître | ** | Tout est OK ・ Ne le laissez pas fuir |
Informations de classe d'instance de base de données | db.t2.micro | Je le garderai le moins cher |
Type de stockage | SSD à usage général | |
Allocation de stockage | 20 | 20 est le plus petit |
Virtual Private Cloud (VPC) | Le VPC que j'ai créé plus tôt | |
Groupe de sous-section | 先ほど作ったGroupe de sous-section | |
Groupe de sécurité VPC existant | Le groupe de sécurité que vous avez créé précédemment | |
Authentification de la base de données | Authentification par mot de passe | |
Nom de la première base de données | production | |
Groupe de paramètres DB | default | Cette fois, réglez-le par défaut. (Tu peux le faire toi-même!) |
Groupe d'options | default | Cette fois, réglez-le par défaut. (Tu peux le faire toi-même!) |
Après un certain temps, il sera disponible, puis la création de RDS est terminée.
yml:./back/config/database.yml
production:
<<: *default
host: <%= Rails.application.credentials.rds[:host] %>
database: <%= Rails.application.credentials.rds[:database] %>
username: <%= Rails.application.credentials.rds[:username] %>
password: <%= Rails.application.credentials.rds[:password] %>
./
docker-compose run -e EDITOR="vi" back rails credentials:edit
Ensuite, l'écran vim apparaîtra, alors entrez les paramètres suivants.
rds:
host: {point final}
database: {nom de la base de données (créé au début)}
username: {Définir le nom d'utilisateur}
password: {Définir le mot de passe}
Créons un équilibreur de charge à partir d'EC2> Créer un équilibreur de charge.
front
back Enregistrez le VPC et le sous-réseau que vous avez créés précédemment dans la zone de disponibilité.
Sélectionnez le certificat que vous avez créé précédemment. Si vous n'avez pas encore été certifié, attendez une minute.
Veuillez joindre le groupe de sécurité que vous avez créé précédemment.
Créez un nouveau groupe cible. Cette fois en face, pour démarrer en ** mode hôte ** dans EC2 généré par ECS Définissez la cible sur l'instance et acceptez le port à 3000. À l'arrière, la cible est ip car elle démarre en ** mode awsvpc ** dans le conteneur dans l'instance d'ECS. Cela fait référence à l'adresse IP privée du conteneur.
front
back
Comme nous le verrons plus tard, ne vous inquiétez pas, la cible sera sélectionnée automatiquement au démarrage du service ECS. Créons un équilibreur de route tel qu'il est!
À partir de Route53> Zone hôte, ajoutez un enregistrement A et définissez-le comme suit. Veuillez traiter le recto et le verso de la même manière.
js:./front/plugins/axios.js
import axios from "axios"
export default axios.create({
//baseURL: "http://localhost:3000"
baseURL: "https://www.qiita-sample-api.work"
})
** * Rendons aws cli disponible! ** ** Installez l'AWS CLI version 1 sur macOS Installez l'AWS CLI
Créez un référentiel à partir d'Amazon ECR. Veuillez remplir le nom du référentiel et le créer tel quel. Sélectionnez un référentiel et appuyez sur la commande push pour afficher les commandes à pousser vers le référentiel. Créez un référentiel pour l'avant et l'arrière et exécutez-le dans l'environnement local.
Lorsque vous exécutez ces commandes, une image est créée en fonction du Dockerfile dans le répertoire. Il sera dans le même état que lorsque la construction de docker-compose est effectuée dans l'environnement local. En utilisant l'image créée ici et poussée vers ECR, chargez-la sur ECS et démarrez-la.
Veuillez noter que vous devez vérifier dans quel référentiel vous voulez pousser, ** avant ou arrière, puis vous déplacer vers le répertoire où se trouve le Dockerfile avant de l'exécuter. ** **
Dans ECS
Cluster> Services> Tâches
C'est devenu la taille des grains.
Un cluster est un cadre logique, une boîte.
Le service est comme la mise à l'échelle automatique + ALB qui démarre sur le cluster.
Gérez automatiquement le nombre de tâches et configurez les paramètres réseau.
Considérez une tâche comme une unité qui exécute une image Docker.
Le service crée des tâches en fonction de la définition de la tâche. En le comparant de force, le moule taiyaki est un service, et le taiyaki lui-même est comme une tâche. Le cluster est le stand d'un magasin de taiyaki.
Cette fois, j'ai choisi EC2 Linux + réseau
Pour la mise en réseau, sélectionnez le VPC / sous-réseau (avant) que vous avez créé précédemment. Sélectionnez également Activé pour Attribution automatique de l'adresse IP publique. Définissons la paire de clés afin que vous puissiez vous connecter avec ssh.
Paires de clés Amazon EC2 et instances Linux
Après avoir créé le cluster, si l'instance EC2 est démarrée comme indiqué ci-dessous, elle réussit. Bonne chose Si les instances EC2 ne sont pas liées, les groupes de sécurité et les tables de routage sont souvent le problème.
Sélectionnez Créer une nouvelle définition de tâche à partir d'ECS
Sélectionnez EC2
front
Configuration | Remarques | |
---|---|---|
Nom de la définition de tâche | qiita-sample-front | Tout est OK |
Rôle de la tâche | Rôles autorisés à exécuter ECS | |
Mode réseau | hôte | |
Rôle d'exécution de tâche | Rôles autorisés à exécuter ECS | |
Mémoire de tâches(MiB) | 700 | S'adapte à la taille de l'instance |
CPU de tâche(unité) | 256 | S'adapte à la taille de l'instance |
back
Configuration | Remarques | |
---|---|---|
Nom de la définition de tâche | qiita-sample-back | Tout est OK |
Rôle de la tâche | Rôles autorisés à exécuter ECS | |
Mode réseau | aws-vpc | |
Rôle d'exécution de tâche | Rôles autorisés à exécuter ECS | |
Mémoire de tâches(MiB) | 400 | S'adapte à la taille de l'instance |
CPU de tâche(unité) | 128 | S'adapte à la taille de l'instance |
Créez un service à partir de la balise de service du cluster.
front
Configuration | Remarques | |
---|---|---|
Type de lancement | EC2 | |
Définition de tâche | Ce que j'ai créé plus tôt | |
Nom du service | qiita-front | Tout est OK |
Type de service | REPLICA | |
Nombre de tâches | 1 | 1~Tout ce qui précède est OK |
Pour l'équilibrage de charge, sélectionnez Equilibreur de charge d'application et sélectionnez l'ALB et la cible créés précédemment.
back
Configuration | Remarques | |
---|---|---|
Type de lancement | EC2 | |
Définition de tâche | Ce que j'ai créé plus tôt | |
Nom du service | qiita-back | Tout est OK |
Type de service | REPLICA | |
Nombre de tâches | 1 | 1~Tout ce qui précède est OK |
Dans la configuration du réseau, sélectionnez le VPC et le groupe de sécurité de sous-réseau arrière créés précédemment. Pour l'équilibrage de charge, sélectionnez Equilibreur de charge d'application et sélectionnez l'ALB et la cible créés précédemment.
Une fois créée comme ci-dessus, une tâche doit être ajoutée automatiquement. Si cela ressemble à ce qui suit, c'est OK! Le conteneur aurait dû être démarré à l'intérieur d'EC2 à partir de l'image en toute sécurité.
db:migrate
Vous pouvez créer une définition de tâche et exécuter la tâche, mais cette fois je vais ssh me connecter à l'instance EC2, puis aller à l'intérieur du conteneur docker et essayer rails db: migrate
.
À l'origine, je devais créer une base de données (db: create), mais cette fois j'ai défini RDS comme production dans la base de données initiale lors de sa création, et ce n'est pas nécessaire car elle a déjà été créée.
[Fichier Pem DL](https://qiita.com/Shogo1222/items/dcbc1e50f6fc83f48b44#ecs%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF% E3% 83% BC% E3% 81% AE% E4% BD% 9C% E6% 88% 90)
ssh -i {chemin du fichier pem} ec2-user@{IP publique de l'instance}
__| __| __|
_| ( \__ \ Amazon Linux 2 (ECS Optimized)
____|\___|____/
For documentation, visit http://aws.amazon.com/documentation/ecs
Dans une instance EC2
docker ps
Affiche le conteneur en cours d'exécution. Spécifiez l'ID CONTAINER des rails exécutant le conteneur et saisissez la commande suivante pour le placer dans le conteneur Docker.
Dans une instance EC2
docker exec -it {CONTAINER ID} sh
Ici, spécifions l'environnement et db: migrate!
Dans le conteneur Docker
rails db:migrate RAILS_ENV=production
Je vous remercie pour votre travail acharné!
ttps: // www. {Domaine frontal défini par moi-même} / users C'est OK si vous pouvez accéder et enregistrer l'utilisateur ainsi que local, comme indiqué dans l'écran ci-dessous. ttps: // www. {Domaine arrière défini par moi-même} / users C'est OK si vous accédez et que le json de l'utilisateur enregistré est renvoyé.
Après avoir poussé à master dans le dernier, CircleCI, mettons à jour la définition de la tâche automatiquement, mettons à jour le service ECS et rendons possible la mise à jour de la tâche.
Pousser du local au github
→ Démarrez CircleCI depuis github
→ Exécutez docker build sur CircleCI
→ Poussez l'image vers ECR sur CircleCI
→ Mettre à jour le service ECS ...
Ce sera.
La différence avec la construction locale est la présence ou l'absence de variables d'environnement.
La compilation exécutée sur CircleCI ** fait référence au code source dans le référentiel git ** et est également ** en cours d'exécution dans une machine virtuelle **. Si les variables d'environnement requises pour exécuter Rails n'existent pas sur le référentiel git, les variables d'environnement ne peuvent pas être référencées et échoueront. Cependant, CircleCI vous permet de définir des variables d'environnement sur la machine virtuelle.
Project Settings>Environment Variables
AWS_ACCESS_KEY_ID //Clé d'accès AWS
AWS_SECRET_ACCESS_KEY //Clé d'accès secrète AWS
AWS_ACCOUNT_ID //Voir l'URL ci-dessous
AWS_ECR_ACCOUNT_URL //Exemple d'URL ECR:{identifiant de compte}.dkr.ecr.{Région}.amazonaws.com
AWS_REGION //Région
RAILS_MASTER_KEY // ./back/config/Master ci-dessous.valeur de la clé
AWS_RESOURCE_NAME_PREFIX //Préfixe du service que j'ai créé (qiita cette fois-sample)
CLUSTER_NAME //Le nom du cluster créé précédemment
REPO_NAME_FRONT //Nom du référentiel ECR du front
REPO_NAME_BACK //Nom du référentiel ECR du dos
FAMILY_NAME_FRONT //Le nom de la définition de tâche de front
FAMILY_NAME_BACK //Le nom de la définition de tâche de retour
SERVICE_NAME_FRONT //Le nom du service ECS frontal créé précédemment
SERVICE_NAME_BACK //Le nom du service ECS frontal créé précédemment
yml:./front/.circleci/config.yml
version: 2.1
orbs:
aws-ecr: circleci/[email protected]
aws-ecs: circleci/[email protected]
#Tâche à exécuter
jobs:
#travail à construire
build:
machine:
image: circleci/classic:edge
steps:
- checkout
- run:
name: docker-compose build
command: docker-compose build
#travail à tester
test:
machine:
image: circleci/classic:edge
steps:
- checkout
- run:
name: docker-compose up -d
command: docker-compose up -d
- run: sleep 30
- run:
name: docker-compose run back rails db:create RAILS_ENV=test
command: docker-compose run back rails db:create RAILS_ENV=test
- run:
name: docker-compose run back rails db:migrate RAILS_ENV=test
command: docker-compose run back rails db:migrate RAILS_ENV=test
- run:
name: docker-compose run back bundle exec rspec spec
command: docker-compose run back bundle exec rspec spec
- run:
name: docker-compose down
command: docker-compose down
#Workflow pour contrôler la commande
workflows:
build_and_test_and_deploy:
jobs:
- build
- test:
requires:
- build
- aws-ecr/build-and-push-image:
name: 'build-and-push-back'
account-url: AWS_ECR_ACCOUNT_URL
region: AWS_REGION
repo: ${REPO_NAME_BACK}
tag: "${CIRCLE_SHA1}"
path: './back'
dockerfile: back/Dockerfile.pro
extra-build-args: '--build-arg RAILS_MASTER_KEY=$RAILS_MASTER_KEY'
requires:
- test
filters:
branches:
only:
- master
- aws-ecr/build-and-push-image:
name: 'build-and-push-front'
account-url: AWS_ECR_ACCOUNT_URL
region: AWS_REGION
repo: ${REPO_NAME_FRONT}
tag: "${CIRCLE_SHA1}"
path: './front'
dockerfile: front/Dockerfile.pro
requires:
- test
filters:
branches:
only:
- master
- aws-ecs/deploy-service-update:
family: ${FAMILY_NAME_BACK}
service-name: ${SERVICE_NAME_BACK}
cluster-name: ${CLUSTER_NAME}
#"container="Veuillez noter que c'est le nom du conteneur défini dans la définition de tâche.
container-image-name-updates: 'container=${AWS_RESOURCE_NAME_PREFIX}-back,image-and-tag=${AWS_ECR_ACCOUNT_URL}/${REPO_NAME_BACK}:${CIRCLE_SHA1}'
requires:
- build-and-push-back
filters:
branches:
only:
- master
- aws-ecs/deploy-service-update:
family: ${FAMILY_NAME_FRONT}
service-name: ${SERVICE_NAME_FRONT}
cluster-name: ${CLUSTER_NAME}
#"container="Veuillez noter que c'est le nom du conteneur défini dans la définition de tâche.
container-image-name-updates: 'container=${AWS_RESOURCE_NAME_PREFIX}-front,image-and-tag=${AWS_ECR_ACCOUNT_URL}/${REPO_NAME_FRONT}:${CIRCLE_SHA1}'
requires:
- build-and-push-front
filters:
branches:
only:
- master
dockerfile:./back.Dockerfile.pro
#Spécifier une image
FROM ruby:2.6.3-alpine3.10
#Télécharger les packages requis
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev make gcc libc-dev nodejs tzdata mysql-dev mysql-client yarn" \
DEV_PACKAGES="build-base curl-dev" \
HOME="/app" \
LANG=C.UTF-8 \
TZ=Asia/Tokyo
#Déplacer vers le répertoire de travail
WORKDIR ${HOME}
#Copiez les fichiers nécessaires de l'hôte (fichiers sur votre ordinateur) vers Docker
ADD Gemfile ${HOME}/Gemfile
ADD Gemfile.lock ${HOME}/Gemfile.lock
RUN apk update && \
apk upgrade && \
apk add --update --no-cache ${RUNTIME_PACKAGES} && \
apk add --update --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \
bundle install -j4 && \
apk del build-dependencies && \
rm -rf /usr/local/bundle/cache/* \
/usr/local/share/.cache/* \
/var/cache/* \
/tmp/* \
/usr/lib/mysqld* \
/usr/bin/mysql*
#Copiez les fichiers nécessaires de l'hôte (fichiers sur votre ordinateur) vers Docker
ADD . ${HOME}
#Ouvrir le port 3000
EXPOSE 3000
#Exécuter la commande
CMD ["bundle", "exec", "rails", "s", "puma", "-b", "0.0.0.0", "-p", "3000", "-e", "production"]
dockerfile:./front/Dockerfile.pro
FROM node:12.5.0-alpine
ENV HOME="/app" \
LANG=C.UTF-8 \
TZ=Asia/Tokyo
ENV HOST 0.0.0.0
WORKDIR ${HOME}
COPY package.json .
COPY . .
RUN apk update && \
apk upgrade && \
npm install -g n && \
yarn install &&\
rm -rf /var/cache/apk/*
RUN yarn run build
EXPOSE 3000
CMD ["yarn", "start"]
yml:./docker-compose.yml
version: "3"
services:
db:
image: mysql:5.7
env_file:
- ./back/environments/db.env
restart: always
volumes:
- db-data:/var/lib/mysql:cached
back:
build: back/
# rm -f tmp/pids/server.Utile lorsque vous ne parvenez pas à effacer le serveur de rails avec pid
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
env_file:
- ./back/environments/db.env
environment: #ajouter à
RAILS_MASTER_KEY: ${RAILS_MASTER_KEY}
volumes:
- ./back:/app:cached
depends_on:
- db
#Port de l'ordinateur hôte: port dans Docker
ports:
- 3000:3000
front:
build: front/
command: yarn run dev
volumes:
- ./front:/app:cached
ports:
#Port de l'ordinateur hôte: port dans Docker
- 8080:3000
depends_on:
- back
volumes:
public-data:
tmp-data:
log-data:
db-data:
Je vous remercie pour votre travail acharné! Comme indiqué ci-dessous, si toutes les étapes réussissent, le déploiement est terminé avec succès.
Ceux qui veulent en savoir plus sur VPC, le réseau AWS, etc. Cours AWS appris avec le VPC vidéo [section1] Région, zone de disponibilité, sous-zone
Ceux qui veulent en savoir plus sur le réseau de Docker et ECS Cours Docker à rattraper à partir de maintenant! Visez le Container Master avec AWS ECS et Fargate! ~ Série 1ère ~
C'est un moment vraiment pratique pour apprendre des vidéos ... Je l'ai répété environ 30 fois.
Je vous remercie pour votre travail acharné. Vous pouvez désormais déployer Nuxt et Rails en production à l'aide d'ECS / ECR / CircleCI. Ce n'est qu'un exemple, et je pense qu'il existe d'autres bonnes configurations. Cependant, une fois que vous l'avez construit et débogué, vous saurez comment le faire. (J'ai encore plus Il y a peut-être des fautes de frappe ou des erreurs dans cet article. Dans un tel cas, j'apprécierais que vous jetiez doucement Masakari.
La prochaine fois, j'aimerais pouvoir écrire sur terraform.
Recommended Posts