プログラミングとうさぎのおとぎ話

37歳にして未経験からプログラミング勉強を始めました。

追記:AWSのインスタンスの起動と停止の自動化

先日、上記のタイトルでインスタンスの自動化をしましたが、料金について補足です。AWSインスタンスはEIPが関連付けされたまま停止すると料金が発生するようです。これはインスタンスを停止したまま固定のIP(EIP)を維持するための料金のようです。実際に、私も料金がかかっていました😱 。料金をかけないよにするにはEIPを開放するしか内容ですね。

 

■ Elastic IPの料金を理解する

次の条件がすべて満たされている限り、Elastic IP アドレスに料金は発生しません。

と記述があります。

 

つまり、インスタンスに1つのEIPが関連付けられて、しかも実行中で、各種要素との関連付けがしてあるものが無料とこと。

↓これを参照ください。

aws.amazon.com

 

EIPが関連付けてあるインスタンスの停止は少額の費用が発生する。

↓のElastic IPを参照ください。

aws.amazon.com

 

EC2が無料枠内であれば上記の内容であればEIPの使用は無料になるということですね。そんなに高額の請求ではなかったですが、少額でも知らない間に料金が発生しているのは恐ろしいですね😂

 

 

AWSのインスタンスの起動と停止の自動化

本日、学習した内容は「AWSインスタンスの起動と停止の自動化」です。

なぜ自動化したのかというと、

 

①チーム開発でデプロイを担当でAWSに公開用のインスタンスを生成している。

AWSのEC2利用は、750時間/月であれば無料を選択しているが、24時間インスタンスが実行中なので、気付いたら80%使用してますよアラームが届く。

③その度にAWSへログインしてインスタンスの停止や実行をするのではめんどいな。

 

以上の理由で自動化にTRYして見ました😎

 

AWSの詳しい料金体系はこちらで確認してください👇

AWS の料金モデルとクラウドによるコスト削減 | AWS

aws.amazon.com

 

■ 自動化の手順

1, ロールの作成

AWSのアカウントを作成してある前提で進めます。

AWSにログインしたら、

左上のサービスを選択→検索欄にIAMと入力→IAMへ移動。

IAMのサイドバーのロールを選択→ロールの作成を選択。

f:id:chacha-boy:20201129003024p:plain

 

続いて、AWSサービスのEC2を選択して、次のステップへ。
f:id:chacha-boy:20201129003112p:plain

 

検索欄にAmazonSSMAutomationRoleを入力して、チェックボックスにチェックを入れて次のステップへ。(すいません🙇‍♂️画像ではチェック入っていませんね💦チェック入れてください)

f:id:chacha-boy:20201129003642p:plain

 

タグの追加は何もなしで、次のステップへ。

 

ロール名を好きなように入力して、ロール作成。

f:id:chacha-boy:20201129004201p:plain

 

 

IAMのサイドバーのロールを選択すると上記で作成したロール名が出てきます。

作成したロールを選択する。

選択したら、信頼関係のタグを選択して、信頼関係の編集を選択する。

f:id:chacha-boy:20201129004653p:plain

 

下図のように編集して、信頼ポリシーの更新を選択。

f:id:chacha-boy:20201129004946p:plain

 

すると信頼されたエンティティにevents.amazonaws.comが追加される。

f:id:chacha-boy:20201129005242p:plain

 

これでロールの作成が完了!

 

2, CloudWatchを利用してインスタンスの停止 

左上のサービスを選択→検索欄にCloudWatchと入力→CloudWatchへ移動。

IAMのサイドバーのルールを選択→ルールの作成を選択。

f:id:chacha-boy:20201129010130p:plain

 

ルールの作成は、

①スケジュールを選択。

②Cron式を選択。

③停止する日時をCron式で記述。

Cron式の書き方はこちら→ルールのスケジュール式 - Amazon CloudWatch Events

日時はUTC世界標準時)で記述するため、日本時間はマイナス9時間にする。

(例;日本時間午後12時→UTC午後3時となる)

ターゲットの追加を選択。

④ターゲット:SSM Automation を選択。

⑤ドキュメント:AWS-StopEC2Instanceを選択。

⑥定数を選択。

⑦InstanceId:停止したいインスタンスIDを入力。

⑧既存のロールを使用を選択。

⑨先ほど作成したロール名を選択。

⑩設定の詳細を選択。

f:id:chacha-boy:20201129010824p:plain

 

ルール名と説明文が記入できるので好きに記入する。

ルールを作成すると一覧に作成したルールが表示される。

f:id:chacha-boy:20201129012110p:plain

3, CloudWatchを利用してインスタンスの起動

起動は停止と同じようにルールを作成する。ただし以下の点を変更する。

①起動させる日時。Cron式は同じ。

②ドキュメント:AWS-StopEC2Instanceを選択。

 

ルールの一覧を確認すると、停止と起動が表示されている。

f:id:chacha-boy:20201129012808p:plain


以上でインスタンスの自動化の完了です。

お疲れ様です😎

 

AWSは便利な機能がいっぱいあるようですね😂


 

 

商品の出品機能が実装できました😎

●ようやく完成!

 techcampの最終課題でフリマ系アプリをチーム開発しています。商品出品機能の担当になり、四苦八苦しながらようやく実装できました。

 

●苦労したこと

① activehashの定義 

クラス名にA_Bのようなアンダースコアを入れると定義されないエラー。解決はクラス名にアンダースコアを使用しないクラス名とした。

 

② ancestryの内容の記述 

カテゴリーの内容を親子孫まで選択できる仕様にしたいので500ラインくらいまで記述した。技術より記述に時間がかかった。メンズ→トップス→Tシャツ見たいのを12親、それにぶら下がる約5〜10子、さらに下層の5〜10孫なのでなんと通りあるのー😱

 

③ 商品の出品時のバリデーション 

 class Image < ApplicationRecord
 belongs_to :item
 mount_uploader :photo, ImagesUploader
 validates :photo, item_id, presence: true
 end

上記の場合、belongs_to :itemでitem_idにpresence :trueが効いているのでvalidatesに記述する必要はないということを知らずに記述してありエラーが発生😂

 

④ スペルミス

結構スペルミスが多くて、itemがtimeだったりした😂

 

結構エラーが多くて、その度にネットで検索して、それでも解決できなければメンターさん(皆さんいい人。優しく教えてくれました🙏)に教えていただきました。なので、エラーの原因究明の力がついたと感じます。

 

ブログ再開です🐰

ブログを再開🐰

全然記事を書いていませんでした。書かなきゃいけないと思うと書けないんですよね。

なので、自分の学習のためのアウトプットの場にしようと考えました。

日々、プログラミングの学習に励んでいますのでそこでの内容と、時々うさぎ🐰をかきます。

 

今日の学習📕

現在、フリマ系のアプリを開発しています。

商品出品機能が担当です。これ結構大変ですね😂

エラーばっかりなので、エラーの発見についてのお話です。

機能は記述はできたので実際にローカル環境で出品できるか検証しました。

しかし、必須事項を入力しても「必須事項を入力してください」と返されました😭

早速、検証開始!

■必須事項が入力されていないと返されたのでしっかりと内容が入っているか?

コントローラーの@item=Item.new(item_params)以下にbinding.pry。


def create
@item = Item.new(item_params)
binding.pry
if @item.save
redirect_to root_path, notice: '商品を出品しました'
else
flash.now[:alert] = '必須事項を入力してください'
render :new
end
end

 商品を出品してみる。

ターミナルで変数やストロングパラメーターの中身の確認。

pry() > @item ←入力した変数の中身を確認。

pry() > item_params ←ストロングパラメーターの中身を確認。

pry() > @item.save ←保存できるかの確認。true=成功、false=失敗

pry() > @item.save! ←失敗の原因を調査。この!が便利😎

するとValidation failed:Name can't be blank,Category must existが出てくる。

これはバリデーションが効いていて、nameが空はだめ、categoryはなくてはならないという事になる。なので、nameを記述し忘れているとか、モデルの記述ミスとかが大半の原因となる。

 

何かエラーが起きたらbinding.pryを効かせて内容を確認すると結構すぐに解決できることが多い。

 

今日の復習

1、エラーが出たらbinding.pry

2、ターミナルで変数やストロングパラメーターの中身を確認。

3、エラーの原因の調査にはをつけて

 

 

初めまして😋

初めまして。

37歳、人生折り返し地点に差し掛かりそうな時にプログラミングの勉強を始めました。
脳みそが溶けかかっているこの歳になって、なぜ始めたかは以下の3点になります。

 

1、将来に漠然とした不安がある。

2、現在勤務している会社の行き先に不安がある。

3、もしものとき、再就職するためのスキルがない!

 

私にとって特に3番がコンプレックスですね。😢

 

遅咲きではありますが、頑張ってプログラミングを勉強します😆

 

このブログでは、その日に勉強したプログラミングの学習を上げていきます。

これらか勉強される方はご参考にしてください。

プログラミングの先輩方にはご教授をお願いします。

 

在籍している学校:TECH CAMP