AWS関連のことを調べてみた2020年06月30日

AWS関連のことを調べてみた2020年06月30日

モノリスはクラピカ

Reactを学習中のRailsエンジニアです。学習していて思うのは、Reactは(サービス開発全体のことを考えると)Railsよりはるか学習コストが高いということ。似たようなサービスを作るために必要な手数も、考えなければいけないこともかなり多いです。

正直最初は「技術が大好きなエンジニアの自己満だろ」「Railsに飽きた奴らがやってるだけだろ」くらいに思っていたのですが、そうとも限らないことが腹落ちして理解できるようになったので、現在の考えをまとめてみようと思います。

## おことわり
この記事の中で登場する`SPA`という単語は`フロントエンドとバックエンドを明確に分けて開発されるアプリケーション`くらいの意味として解釈してください。フロントエンドのロジックをNuxt.jsで作ってNetlifyにデプロイして、Goで作ったAPIをAWSで動かす、みたいな構成のやつです。乱暴ですみません。他に良い表現があればコメントください。

`モノリス`はRailsやLarabelでviewファイルの生成まで行っているアプリケーションを指します。

SPA⇄MPA
マイクロサービス⇄モノリス

元記事を表示

MacOSで仮想環境を作るソリューションを比較してみた

## 背景
目的:MacOS Mojave (Version 10.14)でWindowsのVMを利用したい
(最終の目的はWindowsサーバーで色々作業するため、WindowsサーバーのGUIが要る)

## 仮想環境主なソリューション
### クラウド型仮想デスクトップサービス
#### 説明
マネージド仮想デスクトップ、DaaS(Desktop as a Services)/ VDI(Virtual Desktop Infrastructure)も呼ぶ
#### 代表製品
* AWSの[Amazon Workspace](https://aws.amazon.com/jp/workspaces/)(無料枠あり)
* AzureのWindows Virtual Desktop(無料枠あり)
* IBMのVMware Horizon on IBM Cloud(無料枠なさそう)

### ホストOS + リモートデスクトップアプリ + リモートサーバー
#### 説明
手元のコンピュータからネットワークで接続された他のコンピューターのGUIやデスクトップ環境を操作するアプリである

元記事を表示

TerraformでALBを作成する

# はじめに

この記事の続きです。今回はALBを作成します。
[TerraformでEC2、セキュリティグループを作成する](https://qiita.com/gogo-muscle/items/7e3e4b3bf99366a665ee)

以下がディレクトリ構成です。

~~~shell
% tree +[master]
.
├── README.md
├── main.tf
├── modules #追記
│   ├── alb
│   │   ├── Create-alb.tf #作成
│   │   ├── outputs.tf   #作成
│   │   └── variables.tf  #作成
│   ├── ec2
│   │   ├── Create-ec2.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── rds

元記事を表示

サーバレスアーキテクチャにおけるアクセス制御について

# はじめに

Webサービスには、認証・認可が必要な場合が多く、それをアプリで実現しようとすると手間が掛かります。
サーバレスアーキテクチャでは、認証・認可をAWSのサービスをうまく使って実装することで、開発にかかる期間を短縮できます。
また、IDやパスワード忘れなどのよくある問い合わせにも、一切コードを書かずに対応できる仕組みがあります。

# 認証と認可

混同しがちなのですが、認証と認可を改めて確認してください。

よくわかる認証と認可
https://dev.classmethod.jp/articles/authentication-and-authorization/

## 認証

通信の相手が誰(何)であるかを確認すること。

## 認可

とある特定の条件に対して、リソースアクセスの権限を与えること。

# AWSサービスそれぞれの役割

API Gateway、Cognito、Lambdaの3つの役割を記載します。

– API Gatewayは、アプリケーションがバックエンドサービスからのデータ、ビジネスロジック、機能にアクセスするための「フロントドア」とし

元記事を表示

【AWS】VPCってなに?

# AWS VPCとは何か
個人的なメモです。

[AWS公式ユーザーガイド](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html)

Amazon VPCは仮想ネットワークを構築できるAWSサービスの一つです。

ネットワークはリージョン毎に構築します。
EC2などでサーバーをたてる際は、VPCで構築したネットワーク内に設置します。

## リージョン

– AWSのサービスが提供されている各地域のこと。[参照](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions)
– リージョンによって、提供されているサービスは異なるが、基本的なサービスは使える。[参照](https://aws.amazon.com/jp/about-aws/global-infrastructure/regional

元記事を表示

消せないプロセスID(PID)の消去方法!(Vim、Viでの操作不能の対処)

**$ sudo visudoのコマンド入力できなくなり凄く困ったので解決方法を記載します!**

 何かの不具合で、`.ssh % `の状態もしくは`[ec2-user@ip-xx-x-x-xxx] $`から強制終了されるとターミナルでのコマンド入力ができなくなる時があります。

 私も、過去に似たような経験をしたことがあり、多分**プロセスID**が正常に切られなかったため、`ec2-user `にログインした際、`$ sudo visudo`が入力できないと予測しました。
**発生したエラーは下記です**

“`言語:エラー文
visudo: /etc/sudoers がビジー状態です。後で再試行してください
“`

 この問題を可決するのに凄く時間を費やしたので、プロセスID(PID)の**一般的な消去方法**と**プロセスID(PID)が無限に増殖する際の消去方法**について記載したいと思います。

# 1. 基本のプロセスID(PID)の消去方法!

**1. ターミナルでルートディレクトリーに移動する。または、`.ssh % `の状態もしくは`[ec2-user@ip

元記事を表示

S3に保存されたMP3ファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする

# S3に保存されたMP3ファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする

## はじめに
前回の[S3に保存されたwavファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする](https://qiita.com/haruhiko28/items/55cc892eb2c41f8f12cf)に引き続き、
今回はMP3ファイルを対象に、S3に保存されたMP3ファイルをLambdaでGoogle Cloud Speech-to-Textを使って文字起こしする手順をまとめます。

重複する点が非常に多いので、相違点になるコードの部分だけ([前回](https://qiita.com/haruhiko28/items/55cc892eb2c41f8f12cf)でいう5-9のみ)ご紹介します。

## Code
実行するコードは以下になります。

“`javascript
const AWS = require(‘aws-sdk’);
const speech = require(‘@googl

元記事を表示

Buildspec.ymlでコマンド結果を変数として扱う

#curlコマンドの結果をymlの変数に格納して使う

##envには文字列しか入らない
buildspecのenv>variablesには文字列しか入らないです。

例えば、

“`
https://hoge/fuga/version
“`

のように何かしらのversionを取得するapiがあったときに

“`
env:
variables:
VERSION: `curl https://hoge/fuga/version | jq ‘.[].version’`
“`

として `VERSION` に入れようとしてもコマンドがそのまま変数に入ってしまう。

## `phases` で指定
以下のように `phases` の中で指定するとその後の処理で使えます。

“`
phases:
pre_build:
commands:
………
build:
commands:
– VERSION=`curl https://hoge/fuga/version | jq ‘.[].version’`

元記事を表示

AWSでRESTで送信したものをWebSocketでリアルタイムに受け取るサーバレスシステム

#はじめに
オンラインイベントで応援ボタンなど押した時に、現地で一方向の情報として受信し、それをトリガーにエフェクトなど表示したいことがあります。
方法としてはSocket通信や、MQTTなどを利用したり、ngrokなどのローカル環境をネット上で受けれるようにするサービスを使うなどあります。
ただ、クライアントが数百人など多数の環境になるとソケットを大量に張る必要がある、サービスの上限制限や毎回URLが変わるなど運用が面倒なことなどが考えられます。
今回はそれらを回避しつつ、サーバレス環境でコストも少なくしたシステムを作ってみます。

#全体構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58795/13a3d737-ea38-411f-c338-5e2f3abfc591.png)

送信する方はRESTで送ることで接続数に依存せずコストを下げることが可能です。
特にいつ押されるかわからないため、無駄にSocketなどを張って時間課金のコストを増やすということをしないようにします。

元記事を表示

【自作】自動デプロイ、AWSの各種サービス起動について

### 1)背景
自動デプロイはcapstranoなどありますが、簡単に自動化するため、以下のshellを作成しました。このshellを使えば、手数はかなり減ります。

### 2)環境

| 項目 | 内容 |
|:—————–|:——————:|
| OS.Amazon Linux AMI | release 2018.03 |
| Ruby | v2.5.1 |
| Ruby On Rails | v5.2.4.3 |
| MySQL | v5.6 |
| Unicorn | v5.4.1 |

### 3)内

AWS Amplify + Nuxt.js でユーザーログイン可能なウェブチャットアプリを作成

AWSのAmplifyは、GraphQLを設計するだけで、バックエンド側コードとかリソースとかその設定を自動生成してくれるので、フロントエンドのコードをjsとかで書くだけでウェブアプリケーションを作れてしまいます。
ドキュメントを一通り読んでみて勉強を兼ねてユーザー管理できるウェブチャットアプリを作ってみたのでメモ

# 前提
– AWSのアカウントは取得済み
– Amplify CLIはインストール+設定済み
– Nuxt.jsをインストールする準備は完了済み

## 環境
– フロント: NuxtJS + Vuetify
– バックエンド: AWS Amplify
– API設計: GraphQL

環境のための参考資料:
[Amplify CLI インストール](https://docs.amplify.aws/start/getting-started/installation/q/integration/vue)
[Nuxt.js インストール](https://ja.nuxtjs.org/guide/installation)

# 作るもの

かんたんなウェブチャットツー

Laravel S3で複数の画像をアップロードする

## LaravelでAWS S3へ画像をアップロードする

### 前提条件
AWS S3でユーザ登録とバケットの作成ができていること。
[まだ作成してない方はこちらが参考になります](https://qiita.com/nobu0717/items/4425c02157bc5e88d7b6)

### S3パッケージインストール
パッケージはflysystem-aws-s3-v3を使用します。
以下を実行してインストールしてください。

“`
composer require league/flysystem-aws-s3-v3
“`
### ファイルシステム設定
/config/filesystems.phpを以下のように編集します。

“`
‘default’ => env(‘FILESYSTEM_DRIVER’, ‘local’),

// 追記
‘cloud’ => env(‘FILESYSTEM_CLOUD’, ‘s3’),

// 〜 略 〜

‘disks’ => [
‘local’ => [
// 〜 略 〜
]

AWS Transit Gateway にざっくり触れる【初心者】

![2020-06-25_14h21_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/b1c23a77-a701-e7c7-5beb-028aa221ec4c.png)

#はじめに
今回は AWS Transit Gateway というサービスについて、便利なところをピックアップしてご紹介していきます。
Transit Gateway は中央※ハブを介して、 VPC とオンプレミスネットワークを接続するクラウドルーターだと言われています。
ネットワークが簡素化され、VPCの複雑なピアリング接続をしなくてよくなります。

![2020-06-25_14h28_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/bd9404cb-2b63-4f50-d897-b304cba3e92c.png)
パッと見て分かる通り、ごちゃごちゃVPC同士を繋げなくて良いので、管理がとてもしやすそうですよね

AWS DocumentDBのBATCH INSERT処理ベンチマーク

## はじめに

AWSのDocumentDBに関して、膨大なデータ数を格納する上で要する時間について確認しました。
かなり雑な確認方法ではありますが、データサイズ対処理性能に対して、おおよその指標として、メモ代わりに記載します。

かなりのDB初学者の記載なので、必要な情報の欠損や、考慮漏れ、アドバイス等あればコメントいただければと思います。

## 確認方法

### 環境

AWSに以下のInstanceを立てて、測定を行っています。

“`
# DB
db.r5.4xlarge
L3 Mem: 64G, vCPU: 16

# CLIENT
r5.16xlarge
L3 Mem: 512G, vCPU: 64
“`

### 手順

予め以下のコードによって、$5 \times 10^4$個の疑似ドキュメントを作成し、並列処理でDocumentDBに投入しています。
測定する時間としては、生成後のINSERT処理開始から、終了までを測定しており、疑似Document生成の時間は含みません。

DocumentDBのAPIには、

RedshiftでUNLOADしたgzipファイルをLambdaのPythonで処理をして再びgzipしてS3へアップする

# やりたいこと
タイトルの通りですが、Redshiftにデータウェアハウスがあり、普段ELTで処理することが多いのですが、プログラミングによるデータ加工が必要な場合もあります。

RedshiftのUNLOADを利用することでRedshiftからSQLの結果をS3にgzipファイルを作成することが出来ますので、S3へのputイベントをトリガーにLambdaで処理して再びgzipした状態でS3にアップ、ということをしてみました。

# UNLOAD
Lambdaは現時点では3008MBが最大となります。今回のような処理はファイルサイズが増えると必然利用メモリ量が増えてしまいます。
そこで、[MAXFILESIZE パラメータ](https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_UNLOAD.html) を設定することでLambdaへ渡すファイルサイズを調整します。
完全なるケースバイケースですが、今回は50MBで設定してみました。

# Lambda上のコード
トリガ設定は割愛します。

“`
import json
imp

Terraformで最新のECS Optimized AMIのidを取得する方法

AWS公式ドキュメントにSSMパラメータストアから取得できることが記載されています。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html

“`console
$ aws ssm get-parameters –names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended
“`

Terraformでimage_idのみ利用したい場合は、下記のコードで取得可能です。

“`
data “aws_ssm_parameter” “ecs_ami_id” {
name = “/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id”
}

# Launch COnfigration等で利用する側
image_id = data.aws_ssm_parameter.ecs_ami_id.value
“`

Amazon Aurora, Redshift, DynamoDBのワークロード別性能を比較する

# はじめに

AWSが提供する代表的なDBサービスには、クラウド前提で設計されたRDBの[Amazon Aurora](https://aws.amazon.com/jp/rds/aurora/)、 データ分析特化型RDBの[Amazon Redshift](https://aws.amazon.com/jp/redshift/)、ワイドカラム型DB(NoSQL)の[Amazon DynamoDB](https://aws.amazon.com/jp/dynamodb/)[^1]があります。AWSの各DBサービスの使い分けについては、一般的には概ね業務系システムのDBにはAuroraやDynamoDB、分析系システムのDBにはRedshiftを利用すれば良いとされていますが[^2]、その根拠について定量的に確かめてみたいと思ったので、実際にOLTP/OLAPワークロード別の負荷をかけて各DBサービスの性能特性の違いについて確認してみました。

[^1]: AWS公式サイトではDynamoDBはワイドカラムストアではなくKVSおよびドキュメント型DBと分類されていますが、代表的なワイド

C#のみを使って、今ソーシャルゲームアプリを作るとしたら

# はじめに

現在進行形でC#のみを使って個人でソシャゲ作りを試しているyoship1639です。
本記事はQiita夏祭り2020「[〇〇(言語)のみを使って、今△△(アプリ)を作るとしたら](https://qiita.com/official-events/5d181aadf5db26b73d33)」のテーマに沿った内容となっています。

近年のソーシャルゲーム界隈は多様化が進んでクライアントサイドだけではなくサーバーサイドもあらゆる言語やフレームワークが試みられていますが、クライアントもサーバーも統一の言語で構成されているのはほとんどないかと思われます。言語にはその言語の得意分野があると思うので。

しかし、今まさに私が開発中の環境が好きな言語で開発しやすいという理由でクライアントもサーバーもC#で構成した作りになっているので、どのような構成でどうすれば最低限のソシャゲの基盤が作れるかを、解説が長くなり過ぎないようにまとめることが出来ればと思います。

三部構成で、クライアント実装、サーバー実装、AWS EC2へのデプロイまで解説できればと思っています。
Let’s、C#のみ

(自分用)AWS_Flask_3(AWS上でFlaskをインストール/動かす)

# 項目
1. AWSにFlaskをインストール
2. 実際に動かしてみる

# 1.AWSにFlaskをインストール
– 前回でもうPythonは入れてあると言う前提

“`bash:ターミナル
# ホームディレクトリへ
$$ cd

# Python仮想環境を作る(myenvは他の名前でもよいぞ)
$$ python3 -m venv myenv

# Python仮想環境を有効化する
$$ source myenv/bin/activate
# 左の環境名だったりの所に(myenv) と表示されれば成功

# pipを一応最新にしておく
$$ pip install –upgrade pip

# Flaskをインストール
$$ pip install flask

# ちゃんとpipにモジュールがあるか確認
$$ pip freeze
“`

# 2.実際に動かしてみる
“`bash:ターミナル
# pyファイルを作成、今回はApacheで動かすので/var/www/htmlの中に作る
$$ vi /var/www/html/test.py
“`

“`pytho

ノーコードツール(特にHoneycode)を触ってみた

2020年6月25日(JPT)にAWSからノーコードツールである「Amazon Honeycode」がローンチされました(β版?)。のでちょっと触ってみました。

# はじめに
とある市役所でのkintoneの事例([「手間がめちゃくちゃ減った」 郵送とオンラインのハイブリッド給付金申請、非エンジニアの市職員が開発 経緯を聞いた](https://news.yahoo.co.jp/articles/9675a22ed41b48849ea514456bd4ca2fe75e29bd))もすごいとおもっていたり、ちょうどノーコードツールをあれこれ探っていたので、まさにタイムリーと思いました。具体的にはエクセル(A3で3枚くらい)の「セキュリティチェックシート」をアプリ化することを考えていたのですが、どういう入力方法にすれば楽なんだろうと模索するためにノーコードツールを探していました。ということで今回は「[クラスメソッド 標準セキュリティチェックシートを公開しました]
(https://dev.classmethod.jp/articles/cm-standard-security-check