- 1. [AWS] AWSだけで完結する定期処理の作り方 [Lambda・CloudWatch]
- 2. ECSタスクへの機密情報の環境変数の設定
- 3. Oracle DBのマネージメントサービスを使用したくなった時にOCIとAWSのどちらにするか
- 4. Mysql2::Error: Table ‘○○_production.users’ doesn’t existを解消した話
- 5. AWS 上でマルチアカウントで複数サービスをホストする場合のアーキテクチャパターン (2)
- 6. 開発環境で更新したGithubのコードを本番環境でpull
- 7. ELBのhealth checkが永久にunhealthに・・・
- 8. すでに作ったLaravelプロジェクトにLaradockいれてEC2でデプロイする
- 9. AWS 上でマルチアカウントで複数サービスをホストする場合のアーキテクチャパターン (1)
- 10. 【Rails6.0×RDS(MySQL8.0)×Nginx×Unicorn】AWSへのデプロイ手順まとめ
- 11. EC2を複製(コピー)したい場合に「同様のものを起動」ボタンという罠
- 12. 【AWS】CloudFrontで署名付きURLの作成方法(プライベートコンテンツの配信)
- 13. EC2でyum installしようとしたらno space left on deviceが出た
- 14. [AWS] Terraform AWS Provider 3.0.0以降のACM書式変更について
- 15. 【AWS】 踏み台サーバーを使ったSSH接続の環境構築
- 16. EC2でマイナーバージョン指定でpsqlをアップデートする方法
- 17. AWS 認定 ソリューションアーキテクト – プロフェッショナルに向けて
- 18. Laravel ローカルアプリからAWS S3に画像をアップロードする
- 19. 【React】ユーザー認証をCognito + Amplifyで構築してみた ~ 構築準備編 ~
- 20. 【React】ユーザー認証をCognito + Amplifyで構築してみた ~ 構築完成編 ~
[AWS] AWSだけで完結する定期処理の作り方 [Lambda・CloudWatch]
# 概要
アプリ開発などでサーバレスな環境構築をすることがあると思います。
そう言った場合にAWSでだけで実装することができるバッチ処理の簡単な作り方をご紹介します。
色々やり方はありますが、今回はLambdaとCloudWatchに焦点を当ててご紹介します。また解説する内容は必要最低限のプログラムなどになりますので全体的には15分程で試すことが出来るかと思います。
# 1. Lambdaで処理を作ろう
まず定期処理が行われた際の実際の処理が行われるプログラムを作成していきます。![Screen Shot 2020-11-26 at 10.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652173/bebe4f2f-7a3d-8fc0-15f0-a65ad6fda9ad.png)
AWSのLambdaのトップページより”Create function”ボタンを押下しファンクション作成のページに遷移します。
![Screen Shot 2020-11-26 at 10.44.3
ECSタスクへの機密情報の環境変数の設定
# 概要
[Twelve-Factor App](https://12factor.net/ja/config)でも述べられているように、アプリケーションの設定は環境変数にしておいた方が色々と取り回しが効きやすいです。
問題は、パスワードなどの機密情報をどう管理してどうデプロイするかにあります。
AWSとECSには機密情報を環境変数として管理する問題を解決するサービスと機能が存在します。
その利用方法を解説します。# アーキテクチャ
環境変数を `AWS Systems Manager` の `パラメータストア` で管理します。
ECSタスク定義は `docker-compose` を利用します。
ECSとパラメータストアを連携させて環境変数を埋め込みます。## 環境変数管理
環境変数はGithubやGitlabで設定できる機能もありますが、AWSを使っているのであれば `Systems Manager` の `パラメータストア` を使うのが便利です。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/us
Oracle DBのマネージメントサービスを使用したくなった時にOCIとAWSのどちらにするか
ちょっと使ってみた上での感想。
Oracle DBのエンジニアが余ってて稼働を確保したい→OCI
Oracle DBが大得意なエンジニアがいてOracle DBの機能を活用したい→OCI
EEの機能を使いたい→OCI
Oracle DBを使わないといけないけど、Oracleの機能をあまり知らないので運用面としては他DBと同じように扱いたい→AWS
Oracle DBを酷使しないといけないけど、Oracleの機能をあまり知らないのでチューニングとかは自動でやってほしい、あとお金はたくさんある→OCI
なんとなくOracle DBをユーザー目線で使ってみたい→AWS
Oracle DBをどうしても運用したい→OCI
規模がでかい→OCI
初心者→AWS
Mysql2::Error: Table ‘○○_production.users’ doesn’t existを解消した話
表題が発生し、解消するまでの顛末をまとめました。原因は2つありました。
# 開発環境
ruby 2.6.5
Rails 6.0.3.2
capistrano 3.14.1
AWS EC2
webサーバーNginx
アプリケーションサーバーUnicorn# 事の発端
データベース関連の修正を行ったため、本番環境(EC2)で一度テーブルを落としてから再作成しました。
そしてマイグレーションを行った際、表題のエラーが発生しました。結論、原因は2つありました。# 原因その1 userを参照するreferencesメソッドが、userテーブルが作成される前に読み込まれていた
こちらの方がわかりやすくまとめられてます。
rails db:migrate:statusで確認すると、確かにテーブルのステータスがdownになっていました。
タイトルの通り、エラーメッセージの指摘は何ら矛盾がありませんでしたね。
ただ、開発環境ではエラーにはならず?アプリも正常に動いていたので、気づくのに
AWS 上でマルチアカウントで複数サービスをホストする場合のアーキテクチャパターン (2)
#はじめに
AWS 上でマルチアカウントで複数サービスをホストする場合のアーキテクチャパターンを紹介します。
この記事は2つ目で、[最初の記事](https://qiita.com/asahi0301/items/cde60e5196fd5d14e4ff)ではシングルアカウントでのパターンについて紹介しています。#マルチアカウントの場合
シングルアカウントパターンで紹介した構成がマルチアカウントでも可能なのかまず見てみましょう。## ALBがフロントパターン
まずはこちらです。
現時点では、ALBのアカウント間共有の機能はないので、ALBをアカウントAが持つ、App1をアカウントBが持つ、App2をアカウントCが持つ…といったことはできないです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107953/86d61539-4c85-9870-4562-2b78e330b556.png)## HTTP APIがフロントパターン
次にこちらです。
HTTP API と 内部A
開発環境で更新したGithubのコードを本番環境でpull
git fetch origin master
↓
git reset –hard origin/master(強制的にpullする)
↓
EC2インスタンス再起動(これをしないとunicornの起動時にエラー)
↓
unicorn_rails -c /var/www/rails/mumu(アプリの名前)/config/unicorn.conf.rb -D -E production(unicornの起動)
↓
sudo nginx -s reload(Nginxの再起動)
↓
sudo service mysqld start(mysqlを起動していなかったら)
ELBのhealth checkが永久にunhealthに・・・
久しぶりに記事を投稿させて頂きます!やっとポートフォリオの作成が一段落して、転職活動中なのですが、一段落したので書かせていただきます。今回の内容は検索しても中々原因を見つけられず、たまたま原因を発見したので、初学者の方で同じように詰まっている方向けに簡単にアウトプット致します!
## 内容
今回railsで作成したポートフォリオをEC2上にnginxとともに立てました。それから、[acm](https://aws.amazon.com/jp/certificate-manager/)を利用するためにelbを導入したのですが、elbを立ててEC2上のnginxを再起動してもelbのhelth checkがunhealthに・・・。nginxのlistenポートやその他設定を何度確認するも分からず・・・。## 原因
nginx側でhttp2を認識していないことが原因でした。これだけで半日使ってしまいました・・・## 解決
elbの作成時にターゲットグループのprotcol versionを1に落として作成したところ解決しました!あと、試してはないのですが、[こちらの記事](h
すでに作ったLaravelプロジェクトにLaradockいれてEC2でデプロイする
#背景
Laravelでプロジェクトつくって、EC2にデプロイする手順は下記の通りかと思っています。(間違っていたらすいません)
1.Laradockをいれる。
2.プロジェクトをLaradock配下でcomposerで作成する。
3.作成したプロジェクトをコーディングしていく。
4.githubにあげる。
5.EC2/VPCでgit cloneしてLaradock起動する。最初にLaradockで作っていくのが良い例かと思いますが、
初心者であった自分はdockerはポートフォリオ作成と並行して勉強していたので、あとからdockerをプロジェクトに入れることが必要になりました。。。
Laradockを最初から使わずに制作していた自分みたいな人にむけて、他の人の参考にでもなればと思い、メモとして残しておきたいと思います。#参考にしたサイト
大いに参考にさせていただいたサイトは次のものです。
既存のLaravelプロジェクトにLaradockを導入する方法は下記のとおりです。A : https://qiita.com/segur/items/600eaef70fef896f2
AWS 上でマルチアカウントで複数サービスをホストする場合のアーキテクチャパターン (1)
#はじめに
AWS 上でマルチアカウントで複数サービスをホストする場合のアーキテクチャパターンを紹介します。
書いてみると改めて長くなってしまったので、この記事はシングルアカウントでのパターン紹介です。#シングルアカウントの場合
まず、マルチアカウントの前に、シングルアカウント(AWSのアカウントIDが1つ。その上に複数サービスをホスト)の場合のパターンを考えてみます。## ALBをフロントにして、ALBのルーティングでサービスを分けるパターン
構成図だとこんな感じです。
ALBのルーティング機能で、パスごとにリクエストを分けています。
この構成図だとシンプルにパスでルーティングを変えていますが、HTTP Header に応じて、ルーティング先を変えるといったことも可能です。ルーティング先は、EC2でもコンテナでもLambdaでも、ALBのターゲットグループが対応しているリソースであれば、柔軟に変更可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107953
【Rails6.0×RDS(MySQL8.0)×Nginx×Unicorn】AWSへのデプロイ手順まとめ
3度目のデプロイなのにほとんどやり方がわかっておらずまた勉強し直したので、その備忘録として投稿します。もう何番煎じか分かりませんが、筆者がハマってしまったエラーとその対策についても細かく書きました。また、なぜインストールするのかについてもまとめました。
## 環境
– Ruby 2.7.1
– Rails 6.0.3.4
– MySQL 8.0
– Node.js 10.21.0
– Unicorn 5.7.0
– Nginx 1.12.2## 前提
EC2とRDSは環境によって差異が少ないため作成手順を省略し、以下を前提とします。– AWSでEC2インスタンス作成済み
– EC2インスタンスへElastic IPを関連付け済み
– RDSのインスタンス及びデータベース作成済み## EC2へログイン
何度もEC2にログインすることになるので、まずはログインを下記コマンドで行えるように設定します。“`bash:ローカル
$ ssh アプリ名_key_rsa
“`通常の方法でEC2にログイン(鍵はDesktopにあるとします)
“`bash:ローカル
$ cd
EC2を複製(コピー)したい場合に「同様のものを起動」ボタンという罠
小ネタです。
EC2インスタンスを複製、コピーしたい場合に、– AMI(イメージ)の作成
– ↑で作成したAMIからEC2を作成という手順をするのが[正解](https://qiita.com/ponsuke0531/items/ceca4ac18c097f8b24b8)ですが、**「同様のものを起動」** という、一発でコピーしてくれそうなボタンがあります。
![インスタンス___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32169/5c8b4aad-40ad-4e55-4c58-a0f590fe167e.png)
が、これは罠で、インスタンスのコピーではなく、一部設定のみを引き継ぐ、というものです。EC2内部のファイル諸々はコピーされません。
[AWSのdoc](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/launch-more-like-this.html)
【AWS】CloudFrontで署名付きURLの作成方法(プライベートコンテンツの配信)
## 導入
CloudFrontでプライベートコンテンツを配信する場合、署名付きURLを発行する必要性がある。
署名付きURLを発行することによって、下記のことを設定することが出来る。– URLに期限をつけることが出来る。
– URLを知っているだけではアクセス出来ない。また、CloudFrontで署名付きURLを発行するためには、2つの方法がある。
1. CloudFrontキーペアを使用する方法
2. 信頼されたキーグループを使用した方法1の方法は、以前から存在していたが、
CloudFrontキーペアを作成するにあたって、AWSのrootユーザーを使用しなければならないということもあり、現在は **非推奨** の方法となっている。2の方法は、最近追加された方法で、
CloudFrontのAPIを使用すれば、キーペアの作成やローテーションの自動化をすることができ、AWSのrootユーザーを使用せずに(IAMユーザーで)使用することが可能となっている。今回は、2の方法を使用し署名付きURLを発行してみる。
## キーペアの作成
1. 公開・秘密鍵の作成
2.
EC2でyum installしようとしたらno space left on deviceが出た
# ディスクの利用状況確認
いっぱいだった“`
df
“`
# メモリの利用状況確認
Swap領域(4G)は殆ど使われていなかった“`
free
“`# Swap領域への割当を減らそう
## 破棄
“`
swapoff /swapfile
rm /swapfile
“`
## 作成
“`
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
“`## ちゃんと減っているか確認
“`
free
“`参考URL
https://qiita.com/cyborg__ninja/items/891a1f5acf7c14237939
[AWS] Terraform AWS Provider 3.0.0以降のACM書式変更について
## 概要
Terraform で`ACM(AWS Certificate Manager)` を使用しSSL証明書を作成する際に、`AWS Provider`のversionによって書き方が異なっていたため変更点をまとめます。
## 環境
* Mac
“`
$ terraform version
Terraform v0.13.5
+ provider registry.terraform.io/hashicorp/aws v3.17.0
“`### Version3.0.0以前
無料証明書の検証用レコードは以下の様に`[0]`としてリスト形式で記載する必要があります。
https://registry.terraform.io/providers/hashicorp/aws/2.70.0/docs/resources/acm_certificate_validation
例
“`
resource “aws_route53_record” “example_certificate” {
name = aws_acm_certificate.exampl
【AWS】 踏み台サーバーを使ったSSH接続の環境構築
#はじめに
プログラミングスクールの演習で踏み台サーバー経由で公開されていないサーバーへのアクセスを可能にする環境の構築をしたのでアウトプットもかねてメモを残します。#完成図
![スクリーンショット 2020-11-25 13.10.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/744673/a939b1f8-cd9e-da22-8dbe-aad26f40bcac.png)※サブネットはAZが同じものを利用すると通信のレイテンシを抑えられますが
今回はカリキュラムの構成上異なるAZ間での構築となります。
#構築要件構築要件は以下の通りです。
– サーバーBはインターネットに公開されていない
– サーバーA(踏み台サーバー)へのアクセスは、PCからターミナルでSSHで接続できる
– サーバーBは、サーバーA(踏み台サーバー)からのみアクセスできる#前提
以下のように異なるAZにパブリックサブネットとプライベートサブネットを持つVPCが構築されていることを前提とします。
![スクリー
EC2でマイナーバージョン指定でpsqlをアップデートする方法
RPMをインストール
“`
sudo rpm -ivh –nodeps https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
“`AmazonLinux2 はredhat7をベースにしているようなので$releaseverを7に置換
“`
sudo sed -i “s/\$releasever/7/g” “/etc/yum.repos.d/pgdg-redhat-all.repo”
“`元々入っていたバージョンを削除
“`
sudo yum list installed | grep postgres
sudo yum remove postgresql-11.5-5.amzn2.0.1.x86_64
“`入れたいマイナーバージョンを指定してインストール
“`
sudo yum install postgresql11-server-11.6 postgresql11-11.6
“`参考U
AWS 認定 ソリューションアーキテクト – プロフェッショナルに向けて
#はじめに
難易度が高いといわれているソリューションアーキテクト – プロフェッショナル(SAP)に向けて、計画的に学習できるよう記録をつけていきます。
アソシエイトと比べて問題数や回答時間は増え、合格ラインも引き上げられているため、かなりの学習時間が求められます。
なんとなくでは絶対合格できないため、効果的な学習のをして少しでも合格確率を上げていきます。#学習教材
・[AWS Web問題集](https://aws.koiwaclub.com/)
・[udemy模擬問題集](https://www.udemy.com/course/aws-53225/)
・[AWS認定ソリューションアーキテクト-プロフェッショナル ~試験特性から導き出した演習問題と詳細解説 (日本語)] (https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%
Laravel ローカルアプリからAWS S3に画像をアップロードする
ode# 目次
– Macのローカルで作成したLaravelアプリから画像ファイルをS3にアップロードする方法をまとめる
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518)
【React】ユーザー認証をCognito + Amplifyで構築してみた ~ 構築準備編 ~
## はじめに
Reactで作成したWebアプリケーションのユーザー認証部分をCognito + Amplifyフレームワークで構築してみました。
本記事では、それぞれのサービスについて、Amplifyの設定方法についてまとめています。### 完成画面
今回は、ユーザー名、パスワードとワンタイムパスワードの2段階認証を行います。そして、サインインをしたユーザーを識別し、トップページには「{ユーザー名}さんこんにちは!」という文字が出るようにします。![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546572/8e01dda5-89f5-f5da-e792-038725e65f6f.gif)
## 方法検討
### 要件
認証方法を考えるにあたり、条件は以下の通りです。+ 静的コンテンツをS3に置いている
+ アプリケーション部分はLambdaで実装している
+ アプリケーション内でユーザーを管理しており、ユーザーに登録されている人だけ使えるようにし
【React】ユーザー認証をCognito + Amplifyで構築してみた ~ 構築完成編 ~
## はじめに
Reactで作成したWebアプリケーションのユーザー認証部分をCognito + Amplifyフレームワークで構築してみました。
本記事では、Cognitoのユーザープールの作成方法、Reactでのコード実装についてまとめています。### 完成画面
今回は、ユーザー名、パスワードとワンタイムパスワードの2段階認証を行います。そして、サインインをしたユーザーを識別し、トップページには「{ユーザー名}さんこんにちは!」という文字が出るようにします。![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546572/8e01dda5-89f5-f5da-e792-038725e65f6f.gif)
## 方法検討
### 要件
認証方法を考えるにあたり、条件は以下の通りです。+ 静的コンテンツをS3に置いている
+ アプリケーション部分はLambdaで実装している
+ アプリケーション内でユーザーを管理しており、ユーザーに登録されている人だ