AWS3(IAMで作業用ユーザーを作成)

その2から続く

IAMで作業用ユーザーを作成しよう。

IAMとは?

Identity and Access Management (IAM)の略でAWSのサービスを利用するユーザー権限を管理するサービスです。

ルートユーザーとは?

そのアカウントのすべてのAWSサービスとAWSリソース全てに完全なアクセス権を持つ特権ユーザーの事です。

つまりなんでもできてしまうので極力使わないようにします。

ルートユーザーはどのような時に使う?

アカウントの変更・解約・サポートプランの変更等をする時のみ使用します。

作業用ユーザー(IAMユーザー)とは?

AWSで作成するユーザーのことです。

認証情報とアクセス許可の権限を個別に変更できます。

作業者ごとに個別に作成して権限を与えます。

IAMユーザーはどのような時に使う?

通常の作業はIAMユーザーで行います。

ユーザー名(Sampleの部分)をクリックして「マイアカウント」をクリックします。

IAMアクセスのアクティブ化をチェックして「更新」をクリックします。

「IAM ユーザー/ロールによる請求情報へのアクセスは有効になっています。」となっているのを確認します。

IAMで検索して「IAM」をクリックします。

ダッシュボードの「ユーザー」をクリックして「ユーザーを追加」をクリックします。

①ユーザー名を入力
②AWSマネジメントコンソールへのアクセスをチェック
③カスタムパスワードをチェックして入力
④「次のステップ」をクリックします。

タグの追加は今回はなしで「次のステップ」をクリックします。

内容に問題ないか確認して「ユーザーの作成」をクリックします。

「.csvのダウンロード」をクリックしてから「閉じる」をクリックします。

csvを保存します。名前は自分がわかりやすいのでOKです

IAMユーザーでログインするには?

先程保存したcsvファイルを開きます。

https://から始まるリンクをクリックします。

すると↓のような画面が開かれるのでユーザー名、パスワードを入力して「サインイン」をクリックします。(アカウントIDはリンクから飛んだ時自動で入力される。)

オレンジ色のユーザー名(Sampleの部分)をクリックしてIAMユーザーであることを確認できたら完了です!

その4に続く

AWSのまとめ2(料金アラートを設定(CloudWatch))

その1から続く

料金アラートを設定しよう

編集追記※2022年現在はこちらの方法でできるようです

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html

①CloudWatchを検索して「CloudWatch」をクリックします。

②左のダッシュボードの請求をクリックして下のアラーム作成をクリックします。

③通知の送信先を入力して「次へ」をクリックします。

④アラーム名とアラームの説明を入力(なくてもOK)して「次へ」をクリックします。

⑤内容に問題ないことを確認して「アラームの作成」をクリックします。

続きを読む

GitHub(新たにプロジェクトを始めたとき見る 備忘録)

新たにプロジェクトを始めたとき見るやつ

RubyMineを使っていて普通のGit操作を少し忘れかけていたので、備忘録として

cd

デスクトップで作業したので

cd desktop

ディレクトリを作成

mkdir rails

railsに移動

cd rails

rails newにて作成

rails new api --api
Bundle complete! 8 Gemfile dependencies, 51 gems now installed.

Use `bundle info [gemname]` to see where a bundled gem is installed.

run  bundle binstubs bundler

↑のような文言が出たらrails new に成功しているので

apiに移動

cd api

サーバーを起動

rails s

モデルの生成

rails g model Todo title:string user_id:integer

migrateして反映させる

rails db:migrate

コントローラーの作成

rails g controller v1::todos

本編(ここでGitHub登場)

cd ..

初期化処理をする

git init
Initialized empty Git repository 

↑のような表示になってればOKです。

git status
On branch master

No commits yet

Untracked files:

  (use "git add <file>..." to include in what will be committed)

api/

cdで作業フォルダまで移動

cd api
git config --global user.name ユーザー名
git config --global user.email メールアドレス

git addでステージまで

 git add -A             
 git commit -m "add new file" 
git remote add origin https://github.com/自分のGitHubを記述
git push origin master 
Enumerating objects: 84, done.

Counting objects: 100% (84/84), done.

Delta compression using up to 8 threads

Compressing objects: 100% (69/69), done.

Writing objects: 100% (84/84), 20.69 KiB | 2.30 MiB/s, done.

Total 84 (delta 0), reused 0 (delta 0)

remote: 

↑のような文言が出たらOK

AWS①(AWS概要とアカウントの作成)

AWSって何?

AWSはクラウドサービス

サービスが豊富(EC2、RDS、S3など高負荷に耐えられる信頼性の高いシステムを少ない手間で運用できる)

リソースが柔軟、必要な時に必要な分だけ調達できる
大型アプデのとき→サーバーを増やそうっていうのができる
使った分だけ払う従量課金制

インフラとは?

Infrastructure=基盤
システムやサービスの基盤となる設備でITではサーバーとネットワークだよ。

インフラを学ぶことで得られるメリット

自分でサービスを作れる、リリースできる。
開発する際のテスト環境を自分で作れる。
システム全体で対応できる。
障害があったときどこに問題があるか切り分けられる。
対応策を考える時にアプリだけでなくシステム全体で対応できるようになる。

どのようにインフラを構築するか

サーバー構成

どのようなサーバーが必要かを考える
サーバー設置、OSインストール、各種設定
必要なソフトウェアをインストールし設定

ネットワーク構成

構築したサーバーをネットワークに接続する
IPアドレスの範囲を決める
サーバーにIPアドレスを割り当てる
ドメイン名とIPアドレスの対応を割り当てる

サーバーやクライアントってそもそも何?

サーバーとはクライアントに対してサービスを提供するコンピュータ
クライアントはサービスのリクエストをしてきたものスマホPCなど

続きを読む

1対多のモデルについて

経緯

開発しているアプリで必要になったのでまとめ

何がしたいか

usersテーブルに紐付いているIfには複数のThenがあるというのを実装したかった。

参考

Rails Tutorial14章

モデル同士のアソシエーションの記述

モデルとテーブルの関係1(user)

もととなるuserテーブルを作ります。

 migration_file

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string  :name, null: false
      t.string  :email, null: false, unique: true 
      t.timestamps
    end
  end
end

・user.rb
userはたくさんのsituation(if)を持っていて、
situation(if)を通してたくさんのbehavior(then)を持っています。

モデルとテーブルの関係2(behavior)

migration_file
class CreateBehaviors < ActiveRecord::Migration[5.1]
  def change
    create_table :behaviors do |t|
      t.text :name, null: false, unique:true

      t.timestamps
    end
  end
end

reference(参照)はテーブル同士の関係性を示します。

モデルとテーブルの関係3(situation)

ここでbehavior(then)とuserの間を結ぶ中間テーブルを作成しますが、
そこでreferenceというパラメータを使います。

class CreateSituations < ActiveRecord::Migration[5.1]
  def change
    create_table :situations do |t|
      t.references :user, foreign_key: true
      t.references :behavior, foreign_key: true

      t.timestamps
    end
  end
end

・user.rb
userはたくさんのbehavior(then)を持っていて、
situation(if)を通してたくさんのbehavior(then)を持っています。

中間テーブルを通して繋がっているものには
through: :situationsというkeyをつけます。

user.rb
class User < ApplicationRecord
  has_many :behaviors, through: :situations, dependent: :destroy
  has_many :situations,

behavior.rb

User.rbとほぼ同じです。
accepts_nested_attributes_for というkeyは、
他のモデルを一括で更新、保存できるようにするものです。
ここではbehavior(then)を保存するのと同時にsituationsを更新できるようにしています。

behavior.rb

class Behavior < ApplicationRecord
  has_many :users, through: :situations
  has_many :situations
  accepts_nested_attributes_for :situations
end

situation.rb

group_userは1つのuser、1つのbehaviorに属しています。
よって、このように記述します。

class Situation < ApplicationRecord
  belongs_to :user
  belongs_to :behavior
end

Docker+rails環境下でモデルの追加方法と1対多の紐付け

データベースを作成するコマンド

docker-compose exec web bundle exec rake db:create

モデルを追加するコマンド

docker-compose run web bundle exec rails g model task user:references name:string cotent:text

モデルを削除したいときのコマンド

docker-compose run web bundle exec rails destroy model task

データベースを削除する場合はこうする

class CreateMacs < ActiveRecord::Migration[5.1]
 def change drop_table :macs
 end
end

マイグレートするためのコマンド

docker-compose exec web bundle exec rake db:migrate

1つ前にロールバックしたいときのコマンド

docker-compose exec web bundle exec rails db:rollback

seedファイルを使う時に、まずはリセット

docker-compose run web bundle exec rails db:migrate:reset

データベース上にサンプルユーザーを生成する

docker-compose run web bundle exec rails db:seed

1対多の場合は1の方(例としてuserとする)has_many :tasks, dependent: :destroyを追加記述することで、userを消したときに紐付いているtaskも削除されるようにできる!

Railsのgem「annotate」の使い方(Docker環境)

annotateとは?

モデルにデータベースのスキーマ構造をannotate(注釈)してくれるGem

テーブルを確認する時にDBに潜る必要がなくなるよ。

Dockerでの使い方

Gemfileのgroup :development doに

gem 'annotate'

を記述します。

docker-compose down でコンテナを削除

docker-compose build でコンテナを作り直し

docker-compose up -dで起動してから次のコマンドをする

docker-compose exec web bundle exec annotate 

変わらなかったときは、次のコマンドをする。

docker-compose exec web bundle exec rails g annotate:install

(次回のマイグレーション以降、自動でアノテーションしてくれるコマンド)

もう一度↓をコマンド

docker-compose exec web bundle exec annotate

Annotated (7): app/models/task.rb, test/models/task_test.rb, test/fixtures/tasks.yml, test/fixtures/tasks.yml, app/models/user.rb, test/models/user_test.rb, test/fixtures/users.yml

↑のようにAnnotetedとなっていれば成功していて、次のように

例:app/models/user.rb

# == Schema Information
#
# Table name: users
#
#  id              :bigint           not null, primary key
#  admin           :boolean          default(FALSE)
#  email           :string(255)
#  name            :string(255)
#  password_digest :string(255)
#  remember_digest :string(255)
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#
# Indexes
#
#  index_users_on_email  (email) UNIQUE
#
class User < ApplicationRecord
  has_many :tasks, dependent: :destroy
  attr_accessor :remember_token
  before_save { email.downcase! }
  validates :name, presence: true, length: {maximum: 15}
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
  validates :email, presence: true, length: {maximum: 100},
            format: {with: VALID_EMAIL_REGEX},
            uniqueness: {case_sensitive: false}
  has_secure_password
  validates :password, presence: true, length: {minimum: 5}, allow_nil: true

# == Schema Informationから始まるテーブル情報が記述されていればOKだよ

Rails+Docker環境下で(モデルにカラムを追加する)

Rails+Docker環境下でモデルにカラムを追加するには?

docker-compose run web bundle exec rails g migration AddYYYToXXX カラム名:データ型 (XXXはテーブル名、YYYはカラム名)

docker-compose run web bundle exec rails g migration AddDetailsToLists event:text

複数追加のときはAddDetailsToListsのようにカラム名は任意で良い(単体の場合は追加したいカラム名)

↑のようにマイグレーションファイルが生成される

マイグレートする

docker-compose run web bundle exec rake db:migrate

↑のようにマイグレート成功していればOK!

Docker環境下のpry-byebugの使い方(デバッグ)

Gemfileに以下を記述します。

group :development do
  gem 'pry-byebug' ←追加
end

docker-compose buildでコンテナを作る。

docker-compose build

docker-compose up -dでコンテナを起動する

docker-compose up -d

docker psでNAMESを確認

docker ps

docker attach lifehack_web_1

newメソッドにbinding.pryを追加

class TasksController < ApplicationController
  def new
    @task = Task.new
    binding.pry
  end
end

http://localhost:3000/tasks/newを開くかリロードして

ターミナルが↑のような表示になったらOK

@taskにいろいろ値を入れてみる

@task.title = 'task1'

@task.content = 'content'

@task.priority = 3

exitでデバッガーから抜けると

先程入力したオブジェクトがフォームにセットされた!

使い終わったらbinding.pryを消して

コントロールキー^を押しながらp,qキーの順に押すとアタッチが解除できる!

Docker環境でrails cするには?

Docker環境でrails cするには?

1:まずdocker-compose ps で確認する

docker-compose ps

赤枠の部分が重要

コンテナに接続する

#赤枠の部分(各々違うので注意)を↓に
docker exec -it lifehack_web_1 bash
bundle exec rails c

irb(main):001:0>というふうに表示されたらOKです。

もとに戻りたい時(コンテナの接続を外す)

exit

exit

でもとに戻ることができます。