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

AWS関連のことを調べてみた2020年08月01日
目次

【AppSync・Amplify】データのIDや作成時刻を自動で設定するリゾルバ

# はじめに

AWSのAppSyncやAmplifyを使用することで、GraphQLのAPIを容易に構築することができます。

`mutation`でデータを作成するときに、`ID`や`createdAt`の値をAWS側で自動で割り振ることができます。

そのためには、リクエストマッピングテンプレートに以下を設定します。

# `ID`や`createdAt`を自動で設定する例

“`q
{
“version”: “2017-02-28”,
“operation”: “PutItem”,
“key”: {
“ID”: { “S”: “$util.autoId()” },
“createdAt”: { “S”: “$util.time.nowFormatted(“yyyy-MM-dd HH:mm:ssZ”, “+09:00″) ” }
},
“attributeValues”: $util.dynamodb.toMapValuesJson($ctx.args.input),
}
“`

# まとめ

`$util.autoId()`や`$ut

元記事を表示

【AppSync・Amplify】ページングを実現する[ nextToken ]のリゾルバ設定

# はじめに

AWSのAppSyncやAmplifyを使用することで、GraphQLのAPIを容易に構築することができます。

返却されるデータをページ分割し、リクエストに応じて追加のデータを取り出すことができます。
そのためには、nextTokenをAPIから返却させ、次のリクエストに含める必要があります。

# レスポンスにnextTokenを含める方法

レスポンスにnextTokenを含めるには、以下の項目を設定します。

“`q
// 1回のリクエストで帰ってくるデータは最大20件に設定
“limit”: $util.defaultIfNull($ctx.args.first, 20),

“nextToken”: $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
“`

“`q
:リクエストマッピングテンプレートの例
{
“version”: “2017-02-28”,
“operation”: “Query”,
“query”: {

},

元記事を表示

【AppSync・Amplify】GraphQLで新しい順にデータを取得する時のリゾルバ

# はじめに

AWSのAppSyncやAmplifyを使用することで、GraphQLのAPIを容易に構築することができます。

返却されるデータの調整はフロント側でも可能ですが、
エンドポイント側で DynamoDB のリゾルバーのマッピングテンプレートを適切に設定しておくことが重要です。

# 新しい順にデータを取得する方法

データを追加された新しい順に取り出すには、以下の項目を設定します。

“`
“scanIndexForward”: false,
“`

“`:リクエストマッピングテンプレートの例
{
“version”: “2017-02-28”,
“operation”: “Query”,
“query”: {

},

“scanIndexForward”: false,
“select”: “ALL_ATTRIBUTES”,
}
“`

# まとめ

`scanIndexForward`を`false`に設定することで、新しいデータから順に返却されます。

元記事を表示

yps並走記録 Task3  SQL:テーブル作成(復習)バッチ作成(復習)~php.ini設定~GitHubにファイルをアップロード~WordPress5.4.2セットアップ

早くも3週目になりました、yps
今回はなるべくリアルタイムで課題をやりながらログを取っていきたいと思います。

##まずはSQL周りの復習

###MySQLのエンコード設定を直します

エンコード設定をutf8mb4に戻す(mysql cliから日本語扱えるようにutf8にしてた)
`sudo vi /etc/my.cnf`

最終行に以下を追記

“`
[client]
default-character-set=utf8mb4
“`

編集を保存し、mysqlを再起動
`sudo systemctl restart mysql`

###練習で使うデータをダウンロード
`cd /tmp`
`sudo yum install wget`
`wget http://tech.pjin.jp/wp-content/uploads/2016/04/worldcup2014.zip`
`unzip http://worldcup2014.zip`

データの確認
`ls -la worldcup2014.sql`

###データベース作成
MySQLにログインして…
`mysql –

元記事を表示

Terraformで、AWS Lambda関数を登録して動かしてみる

# What’s?

* はじめてのAWS Lambdaを試してみたい
* AWS LambdaのデプロイはTerraformで行いたい

というお題で。

やっておきたいこと、動かし方としては

* AWS Lambda関数は、Terraformでzip圧縮してアップロードする
* AWS Lambda関数からログを出力する
* Amazon CloudWatch Logsへ出力するようにロググループを作成する
* AWS Lambda関数から環境変数を読み込む
* 環境変数の暗号化にはAWS KMSのCMKを用いる
* 動作確認はAWS CLIで行う

というところで。

# 環境

今回の環境は、こちらです。

“`shell
$ terraform version
Terraform v0.12.29
+ provider.archive v1.3.0
+ provider.aws v2.70.0

$ aws –version
aws-cli/2.0.36 Python/3.7.3 Linux/4.15.0-112-generic exe/x86_64

元記事を表示

AWS Honeycodeでガソリン管理アプリを10分で作ってみた

いつも忘れないように、コンセプトから。

###コンセプト
・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
 →ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
 →アカウントを不正に使われるととんでもない額を請求されるので防ぐ

前回と前々回に簡単にHoneycodeを調べてみました。
https://qiita.com/auf/items/08cde2ce3f88e0f3ed44
https://qiita.com/auf/items/b3a239adda19f7d8079f

今回はちょっとアプリでも作ってみようというトライです。何にしようかなと考えていたんですが、私は興味もあって、ガソリンの給油量を管理しているんですが、いつもはGmailの下書きにメモしておいて、あとでExcel集計していました。特段不便でもなかったのですが、そもそもガソリンスタンドで直接データを入れたら便利じゃね?という発想です。

ちなみに、勘ででやってみようということで、上記の2回調べた以上の前提知識はありません。実際に触るという意味では初見でした

元記事を表示

Amazon Redshiftの一時停止/再開のDescriptionはどこに表示されるのか?

#はじめに
AWSのRedshiftは停止/再開アクションをスケジュールで自動化することが可能です。
コンソールからスケジュール設定をする際に、スケジュールのDescriptionを付けることが
可能ですが、どこでDescriptionが確認できるのかがわからなかったので、探ってみました。

##スケジュール設定
Descriptionを見ることのみが目的なので、設定は適当にします。
以下の赤枠の記載内容を後に確認します。
![rapture_20200731223538.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535463/d529c1b3-9805-11c3-d435-abf71f592e70.png)

##設定後の確認
Amazon Redshift > クラスター > 設定対象のクラスター > スケジュール(タブ)
赤枠のところが設定されたスケジュールですが、スケジュール名の隣にはDescriptionは表示されていません。
![rapture_20200731223627.png](h

元記事を表示

DynamoDBのデータをnode.jsのReadableStreamに流す

DynamoDBテーブルのデータをざーっと `ReadableStream` に流し込みたかったが、どうやってバックプレッシャーに対応すればいいのか分からなかったので対応させてみた。

# やりたいこと

– DynamoDBからデータを読み込む(基本は内部バッファサイズ分)
– `ReadableStream` にpush
– ひたすら読み込んではpush
– 詰まったら一時停止
– 次回開始位置をpushしきれなかったアイテムに設定
– またpushできるようになったら続きから読み込み再開
– 以下繰り返し
– 全て読み込んでpushし終わったら処理終了

# DynamoDBのQuery/ScanとLimit

DynamoDBのQuery/Scan操作では `Limit` を指定することで取得件数を制限することができる。
ただ `Limit` は検索結果の件数制限でなので、`QueryFilter` や `ScanFilter` を掛けると検索結果がさらにフィルタリングされ指定した件数より少ない件数が返ってくる場合がある。

クエリーで検索し、指定件数分の結果が揃ったら、クエリ

元記事を表示

EC2をリバースプロキシサーバ化してElasticSearchServiceのAPIを外部から叩けるようにする

#経緯

Amazon Elasticsearch Serviceを使用してELasticSearchの検証環境を用意したが
Globalに公開できず検証しづらかったので、EC2をプロキシサーバにして外部からAPIを叩けるようにした。
セキュリティ的な問題はあるが検証環境であるということと自宅IPに絞ったので今回は甘めに

## ざっくり構成
![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273496/5d652ffd-c9d7-bf64-b9fc-3e5f8f9708e6.png)

## EC2を作成

EC2を作成し、PublicSubnetを紐づけます。

## EC2用のセキュリティーグループを作成し、EC2に紐づける

今回EC2はHTTPでAPIを叩くようとSSHでリバースプロキシの設定をするために
インバウンドルールで80ポートと22ポートを解放するようにセキュリティーグループを設定します。

![スクリーンショット 2020-07-10 19.06.01.png](htt

元記事を表示

「ほん訳コンニャク」 を食べて 論文を読もう

# TL;DR;

以下の「ほん訳こんにゃく」を作った。

[![Translation-Gummy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308700/aa1d86f1-cb24-0a09-f119-915a5fa2166c.png)](https://elb.translation-gummy.com/)

## 作りたかったもの

 研究室配属で、かねてから取り組みたかった **「シナプス可塑性におけるmiRNA機能とそれらが記憶や学習などの高次認知機能に与える影響の解明」** を自分の研究テーマ(※暫定)にすることができ、生物系の論文を読む機会が圧倒的に増えたのですが、元々深層学習系統の論文しか読んでいなかったため、常識や背景知識不足に悩まされ、[DeepL](https://www.deepl.com/en/translator)や[Go

Lake Formation の使い方的な③(クロスアカウントアクセス)

# クロスアカウントアクセスとは

ログ収集AWSアカウント(データレイクAWSアカウント)のデータカタログを、別のAWSアカウントからアクセスして利用する。

S3上の実データもGlueデータカタログのテーブル情報などのメタデータもログ収集アカウントにある状態で、別のAWSアカウントからリソースリンク(シンボリックリンクみたいな定義)を介して権限制御しつつアクセスできる。
例えばログ収集AWSアカウントのGlueテーブルを、別のAWSアカウントのAthenaで使いクエリ実行する。

# 前提環境

* AWSアカウントA:ログ収集用アカウント
* AWSアカウントB:それ以外の自社サービスで使うアカウント

# アカウントAの操作

## アカウントAの状況

### Athenaでクエリできている

S3にデータがあり、Glueでデータベースやテーブルを作成し、以下のようにAthenaでクエリができる状態

データベース名:default
テーブル名:in0

スクリーンショット 0002-07-31 11.59.12.png

【AWS×WordPress】504 Gateway Time-outが出た

#はじめに
AWS(AWS Linuxインスタンス)上でWordPressをたてて使用していたが、ある日突然504 Gateway Time-outが出た。
スクリーンショット 2020-07-31 8.31.56.png

#504 Gateway Time-outの意味
[Wikipedia](https://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89)によると、5XXはサーバエラーを指し、504は「ゲートウェイタイムアウト。ゲートウェイ・プロキシサーバはURIから推測されるサーバからの適切なレスポンスがなくタイムアウトした。」を意味する。サーバ側のエラーとい

PHPでAWS CLIを用いてS3に画像をアップする

EC2環境上でPHPのexec関数とAWS CLIを用いてS3に画像をアップしようと思ったら、嵌ったので備忘録メモです。

まず、事前にEC2上で

“`
$ aws configure
“`
を叩いて、アクセスキー ID、シークレットアクセスキー、AWSリージョン、出力形式を入力した後に、PHPファイルに

“`php5
exec(‘aws s3 sync ./upload s3://{バケット名}/img –acl public-read –delete’, $out);
“`
を挿入し、実行してみましたが$outに結果が返らず、S3にもアップされませんでした。
そこで、PHPのファイル上に事前に次の形式でアクセスキー ID、シークレットアクセスキー、AWSリージョンを記述したあとにexec関数を記述すると動作しました。

“`php5

$region = ‘ap-northeast-1’;
$key = ‘****’;
$secret = ‘**********************’;
putenv(‘AWS_DEFAULT_REGION=’ . $re

CloudWatchEventsの変数と定数をAWS BatchのJobコマンドに渡したい

# やりたいこと
CloudWatchEvents(CWE)を使ってAWS BatchにJobを投入する。
JobコマンドではCWE動いた時の時刻と任意の定数を使いたい。
そのために必要なものを設定していく。

Jobコマンドでやりたいことのイメージ

“`bash
$ exec –time {時刻} –target {定数}
“`

## Jobコマンドで変数や定数を扱うために
CWE動いた時刻や任意の定数をコマンドで扱うために、CWEから値を受け取って扱う。
Jobでは受け取った値が特定のJSON形式でないと扱うことができず、コマンドで扱う際は特殊な書き方をする必要がある。

### Jobが扱える形式
Jobコマンドから扱えるのはJSON形式のParameters配下のプロパティのみ。
この形式を考慮してCWEのインプットの設定をする必要がある

“`json
{
“Parameters”:{
“time”: “2015-11-11T21:29:54Z”,
“target”: “01234”
}
}
“`

Parame

【AWS】暗号化されたスナップショットからボリュームの再作成ができない

# 問題
暗号化されたボリュームのスナップショットからボリュームの再作成ができない。
リクエストは成功するけど、コンソール上に一向に表示されない。
暗号化されていないボリュームを、暗号化ボリュームとして再作成することはできてたのに。

# 原因
KMSポリシーにて、IAMユーザに`kms:ReEncrypt`がアタッチされていないことが原因でした。
CloudTrailのイベント履歴から`フィルター:イベント名:ReEncrypt`と検索してみると、当該リクエストが`エラーコード:AccessDenied`となっていました。

# 解決
IAMに`kms:ReEncrypt`がアタッチして、ボリューム作成するとすぐにコンソールにひょうじされました。暗号化(Encryp)と再暗号化(ReEncryp)で権限が区別されていることに注意が必要ですね。

【初学者向け】Route53でドメイン取得してポートフォリオに紐つける手順

# 前提条件
EC2でアプリをデプロイしている事
→もしまだデプロイ出来ていないのなら[こちら](https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1#nginx%E3%81%AE%E8%A8%AD%E5%AE%9A)の記事を参考にしてください。私も同じ様にやってきました。

# 手順
他にも沢山の参考記事がある為そちらを参考にしましたが、ドメイン取得に関しては[こちら](https://qiita.com/nakanishi03/items/25278fb4dfad60ebfac4)の記事で問題なく出来ます。
ただしこの記事にもある様にnginxで確実にエラーが出ます。
![nginx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431966/01253118-0605-16d3-e27e-754f63575a08.png)

なので、デプロイの時と同様に

“`
[name(自分の名前)|~]$cd /etc/nginx/con

AWSのDMS(Data Migration Service)を使ったDB移行のために、新機能の「移行前評価(Premigration assessments)」を試してみた!

# 前提

ハピタスにはデータベースインスタンスが複数存在しています。
データベースインスタンスごとに役割がおおよそ決められており、効果的に活用できていれば
メンテナンスも部分的にできたり、負荷分散も適切に行えたり、有用な構成だったと思います。

しかしながら、長年様々なエンジニアによって改修が行われ、データベースインスタンス同士の依存関係も大きくなり、
一つのデータベースであれば単純に WEB アプリケーション上で一つのSQLで完結できたはずのものが
php を介して、SQL の問い合わせ結果を使いマージして、複雑な処理を行うため
その処理がボトルネックになってきています。メンテナンスもハピタスのインフラの歴史的な背景の理由などで複雑化しています。

そこで DMS を使って、データベースの統合を進めています。

## 元々

![Untitled Diagram-Page-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218682/474a443e-ba56-f4c8-e1a3-94f9b634

Elastic Beanstalkのデプロイポリシーまとめ

# Elastic Beanstalkのデプロイポリシーまとめ
AWS デベロッパーアソシエイトを勉強中です。

公式がこちらのページで説明していますが、
文章が分かりづらく、整理のために投稿します。
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html

## 前提
– ELBが1つ
– ELBに4つのEC2インスタンスが紐付いている

## ローリングの時に使用するバッチについて説明
設定の画面で、バッチサイズの割合を決めることができると思います。

その割合と、インスタンス数を掛け算したものが、
バッチのインスタンス数になります。


バッチサイズ:25%
インスタンス数:4台
0.25(25%) × 4(台) = 1(台)

## All at once(一度に全て)
### 説明
名前の通り、全てのEC2インスタンスに対して、
同時にデプロイを行います。

### デメリット
短時間ではありますが、サービスが停止する時間が

【初心者】AWS Cloud Practitioner Essentials (Second Edition) をやった

#はじめに
AWSにはトレーニングの一環として[AWS Cloud Practitioner Essentials (Second Edition)][link-1]というコンテンツが用意されています。
[link-1]:https://www.aws.training/Details/Curriculum?id=34408

レベル感は「基礎レベルのコース」であるため、AWSのプラクティショナーを目指して勉強を始めた方向けくらいだと思います。

実際にこちらを一通り視聴し、学習した結果の所感を書いてみようと思います。

# 行ったコンテンツ
– M0-コースの紹介
– M1-AWSクラウドの紹介
– M2-AWSの主要なサービス
– M3-AWSの統合サービス
– M4-AWSのアーキテクチャ
– M5-AWSのセキュリティ
– M6-料金とサポート
– M7-コースのまとめ
– コースの最後の知識の確認

# 前提条件
– **Amazonアカウント**または**APNパートナーセントラルアカウント**を所持していること。

# 注意事項
– **以下の知識があること(推奨)**

せっかく RAML で API ドキュメントを作ってもローカルでしか閲覧できないのは悲しいよねって話

## はじめに

API ドキュメントの管理を Excel や Word などから [Raml](https://raml.org/) のような API ドキュメンテーションツールに切り替えるチームも増えていると思います。しかし作成した API ドキュメントはプロジェクトを `git clone` してローカルで閲覧する、というようなちょっと残念な方法をとっているチームもあるような気がします。

そこで本記事では、作成した API ドキュメントを AWS にサクッと数分でホスティングする方法をまとめました。本記事では API ドキュメントを対象としますが、ホスティング対象は静的コンテンツであれば何でも構いません。

## 注意

本記事では Route 53 のような **無料利用枠のない** サービスを使うため、静的コンテンツを公開したままにしておくと一月あたり 100 円程度ですが課金されます ( [Amazon Route 53 料金表](https://aws.amazon.com/jp/route53/pricing/) ) 。

もし課金されたくない場合は本記事の内容を実施