AWS関連のことを調べてみた2019年11月16日

AWS関連のことを調べてみた2019年11月16日
目次

Pulumiを使ってみた【AWS】

# はじめに
今まではTerraformとほんの少しのCloudFormationでAWS環境を管理しています。
上記のツール群は日々アップデートされていますが、それら以外にも頻繁にアップデートされていたり新たなツールが出てきたりと目まぐるしく変化するためキャッチアップを怠ってました…。
今更感もありますが、触ってみようと思います。

# Pulumiとは
>Create, deploy, and manage modern cloud software.
A single workflow for provisioning cloud apps and infrastructure, in any cloud environment, public, private, or hybrid.

https://www.pulumi.com/product/
と公式に記載があるとおり、アプリケーションとインフラストラクチャを管理・デプロイできるツールです。
複数の**言語**とプロバイダーに対応しています。

対応言語は下記の言語です。

– `TypeScript`
– `Java

元記事を表示

【AWS/RDS】今夜勝ちたいスロークエリログ出力

AWSにapi作ったんだけど(非公開)、相当数の同時接続時に速さが足りないと言われたんで、
とりま原因究明のためにRDS(MariaDB)からスロークエリログを吐き出してCloudWatchで眺めてみた。
その軌跡です。

深奥まで知る必要はないけどとりあえず**今夜勝ちたい**人向けです。
#環境
本記事は**AWS RDS(MariaDB10.2)**で試しています。
以降はこの前提で進めますがバージョン違いやMysqlでも基本同じな模様。
Auroraは若干微妙に違うので他の記事をご参照下さい。
# 作業工程
やることは大きく2つ。

– パラメータグループの設定(DBエンジンのパラメータ設定)
– ログエクスポートの設定(CloudWatchへの出力設定)

### tips
RDSでは新しくデータベースを作成する際に、エンジン毎にデフォルトで用意されているパラメータ&オプショングループを選択できます。

できますが下記理由からオリジナルを作ることをお勧めします。(特にパラメータ)

– デフォルトグループは設定値が変更不可
– グループの付け替えは再起動が必要

## パラ

元記事を表示

【AWS EC2】bundler -v -bash: bundler: コマンドが見つかりません

rbenvうっかり入れ忘れなので、下記のコマンドを入力すればOK。
バージョンはご自身の環境に合わせてください。

“`
$ rbenv install 2.5.1
$ rbenv global 2.5.1
$ rbenv rehash #rehashを行う
$ ruby -v # バージョンを確認
“`

元記事を表示

Amazon Linux2 にdockerをインストールしようとしたらはまった話

Amazon Linuxはちょっと違うので備忘録。
2019/11/15日時点での対応

# Amazon Linux2にDockerのインストールを試みる
ちょっと簡単に開発環境を作りたかったので、EC2上にDockerをインストールしようとしました。
DockerはいつもCentOS方式でインストールしてましたんで、[ここ](https://docs.docker.com/install/linux/docker-ce/centos/)を参照しながらインストール。

“`
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ sudo yum-config-manager \
–add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
“`

元記事を表示

Deeplearning on AWS をやってみたの巻き

#目的
Deep Learning を学ぶ

#目標
よくある犬の学習をやってみる
学習させてみる
Deep Learning 周辺ツールを使ってみる

#結果
sage maker を使うと学習効率がいいね!

機械学習を学びたい人にとって、環境設定やAPI 連携などの”機械学習を使うための環境構築” は、障壁になりそう。
最初は、AWS トレーニング等を通じて、1回教えてもらうと学びたいところへジャンプしやすそう。

周辺ツールとして、
コンテナ やLambda などのオンプレミスサーバ構築と比べ、高速化を実感しながら、機械学習を体験できた。
今までより、OS起動、OS設定でつまずかない分、気楽でした!

#できたこと
よくある画像認識のスコアリング。今回は、ビーグル犬を判定!
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184724/099572ca-b427-b46c-dd27-9294f4e4a0cf.png)

#やったこと
サンプル画像とサンプルコードで、コンテナ作った

元記事を表示

CloudFormation Resource Importで既存のスタックをリファクタリング!

## はじめに
CloudFormation で全世界待望?のリソースインポート機能がリリースされました。

**AWS CloudFormation Launches Resource Import**
https://aws.amazon.com/jp/about-aws/whats-new/2019/11/aws-cloudformation-launches-resource-import/

CloudFormationで管理されていないリソースをスタックに取り込むことができるようになったわけですが、
このリソースインポート機能を活用することで既存のスタック間でリソースを移動したり
複雑化したスタックのリファクタリングを行ったりすることもできます。

## スタック分割を例に考える
既存のスタックを分割しようとする場合、概ね以下のような流れとなります。

1. ソーステンプレート内の分割対象のリソースに対し `DeletionPolicy: Retain` を指定し、適用する
1. 分割対象のリソースをソーステンプレートから削除し、ターゲットテンプレートに追加する
1. 既存

元記事を表示

AWSソリューションアーキテクトアソシエイトに不合格だったので勉強法をまとめます

#本記事の結論
・始めて試験を受けるのであればどんな問題がでるか確認のためAWS模擬試験を受けてみる。
・模擬試験を参考にどの教材があっているか決める

#教材
・Udemy-これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(初心者向け21時間完全コース)
・AWS模擬試験

#学習方法
・通勤時間を使って毎日Udemyの模擬試験を10問解く
Udemyではハンズオンもありましたがハンズオンを行わずに模擬試験のみを2か月した。
Udemyの模擬試験が90%程とれるようになったのでAWSの模擬試験を受ける

・AWS模擬試験を受けたがスコアが思うようにならなかった。
Udemyの模擬試験とAWSの模擬試験にレベルの違いがあった。
↓AWS模擬試験の結果

“`
総合スコア: 52%
トピックレベルスコア:
1.0  Design Resilient Architectures: 44%
2.0  Define Performant Architectures: 71%
3.0  Specify Secure Applications and Arc

元記事を表示

AWS Elastic Beanstalkで定期処理実行(cron)

## Heroku Schedulerでできたことを、Elastic Beanstalkでも行いたい
運用しているRailsアプリの本番環境を、HerokuからElastic Beanstalkに移行させました。
その際タスクの定期処理を行う方法で少し苦労したので、メモ的にシェアしておきます。

以前はHeroku Schedulerでrakeコマンドを呼び出せましたが、EBでそれを行うにはEC2内でcronを使うか、ワーカー環境でPOSTメソッドを呼び出す方法があるみたいです。今回は安く済ませたいので、前者を選びました。
後者の方法はこちらが参考になります。
https://qiita.com/tomoeine/items/38a9b2123e3afa1d5cd0

## 方法
このファイルを.ebextensionsに置くだけでOKです。あとは`eb deploy`すれば、自動でcronのファイルを作成し自動実行してくれます。
`eb ssh`で/etc/cron.dを確認してみてください。

“`configuration:.ebextensions/cron-sample.c

元記事を表示

各種 PaaS FaaS 実行環境 (プログラミング言語とバージョン) まとめ (2019年11月15日現在)

## 概要

– 各種 PaaS FaaS で使える実行環境 (プログラミング言語とそのバージョン) をまとめる
– 公式ドキュメントも資料によってバージョン番号が明示されていなかったり異なっていることがあるので細かいバージョンについての正確さは期待できない

## 各種 PaaS で使える実行環境 (プログラミング言語とそのバージョン)

| |AWS Elastic Beanstalk |Azure App Service |Google App Engine |
|———|———————-|———————————|——————————|
|.NET Core|.NET Core 2.2.7, 3.0.0|.NET Core 1.0, 1.1, 2.0, 2.1, 2.2|.NET Core |
|Go |Go 1.13

元記事を表示

AWS CDKのDynamoデプロイ時に、Cannot update GSI’s properties other than Provisioned Throughput. You can create a new GSI with a different name のエラーが出たときのメモ

## 事象
DynamoDBをCloudFormationでデプロイしているが、GSIの設定をアップデートするときに、以下のエラーが発生した。

“`
Cannot update GSI’s properties other than Provisioned Throughput. You can create a new GSI with a different name
“`

## 解決策
「更新」はできないので、「削除」してから「作成」する。

“`
new dynamoDb.CfnTable(scope, ‘[tableName]’, {
tableName: tableName,
attributeDefinitions: […],
keySchema: [],
billingMode: …,
tags: …,
});
“`

GSI設定を除いたものをデプロイする。

“`
new dynamoDb.CfnTable(scope, ‘[tableNa

元記事を表示

Laravel 6.x(またはLumen 6.x)でDynamoDBに接続する

#SDKのインストール
[AWS SDK for PHP](https://aws.amazon.com/jp/sdk-for-php/)をLaravelに取り込みましょう。
プロジェクトルートで下記コマンドを実行します。

“`bash
$ composer require aws/aws-sdk-php
“`
これでvendor配下にSDKがインストールされます。

# DynamoDBに接続する
AWS SDK for PHPでつなぐにはこのようにします。

**下記の例ではクレデンシャルを含めていますが、この方法は推奨されていないので注意してください**
[ハードコードされた認証情報の使用](https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/guide_credentials_hardcoded.html)

“`php
use Aws\Sdk;

$awsSdk = new Sdk([
‘credentials’ => [
‘key’ => アクセスキー,

元記事を表示

ElasticBeanstalkにアップロードするファイルを.gitignoreとは別に.ebignoreで指定する

ElasticBeanstalkでは

“`
eb deploy [環境名]
“`

とすると実行したディレクトリの.gitignoreを元にプロダクトコードがzipされS3にアップロードされてebの環境に上がります。

CircleCIなどのCIツールを使っていると.gitignoreで除外したい部分とアップロードしたい部分がずれてきて別々になってきます。

そういったときは`.ebignore`というファイルを使って指定することができます。

記法は.gitignoreと同じです。

元記事を表示

Session Manager で SSH/SCP をトンネリングして EC2 接続

# 今更ながらこれやってみる
[セッションマネージャーが SSH と SCP のトンネリングサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2019/07/session-manager-launches-tunneling-support-for-ssh-and-scp/)

# これができることで
セキュリティグループで SSH 22番ポートを開ける必要がなくなり、踏み台も不要、 EIP も不要になるので、コスト削減につながりますよね。

# 前提
今回の手順は Client: Mac, Server: Amazon Linux 2 で実施する場合。

### Client
– awscli 1.16.12 以上
– Session Manager Plugin 1.1.23.0 以上
– Session Manager のエンドユーザーポリシー権限を持った IAM User
– [クイックスタート Session Manager のデフォルト IAM ポリシー](https://docs.aws.amazon.

元記事を表示

ELB切り替え時の動作確認 (hostsファイルを編集する)

# これはなんですか

– DNSのレコード登録が済んでないALBに対してリスナールールの動作確認をした時のメモです
– hostファイルを編集して名前解決する方法です。

# 先にまとめ

– hostsファイルはローカルで名前解決するためのもの
– macOSのhostsファイルは `/private/etc/hosts` にある
– Windowsの場合は `C:\Windows\System32\drivers\etc\hosts` にある
– DNSレコード登録前にLBの動作確認がしたければ、hostsファイルにLBのIPと対象のHostを書いて名前解決の動作をエミュレートすればよい
– HTTP接続するだけなら `curl -H ‘Host:example.com’ ‘http://xxx…………….’` とした方が楽だが、HTTPS接続がしたければhostsを使う必要がある

# hosts ファイルとは

ローカルで名前を解決してくれるやつです。以下ざっくり説明です。
https://wa3.i-3-i.info/word16

元記事を表示

aws cloud9 ruby on rails migration 後にしたこと

まずは “`bundle install“`

# mysql が動かない。
– “`sudo apt-get install libmysqlclient-dev “` して mysql を入れる
– bundle installを再実行.. ok
– c9 の 設定のままだと、 root@local.host につながらない、とかなった。
– db に root接続して、user を作り (user をつくるところは、https://www.lucidar.me/en/aws-cloud9/install-mysql-and-phpmyadmin-on-aws-cloud9/ を参考にした)
– その情報をもとに database.yml を設定変更

“`
username: <%=ENV['C9_USER']%>
# password: <%=ENV['C9_USER']%>
“`
もともとこんな感じになってたので、設定変更。
これで、 rails db:create, db:migrate … ok

# rails server を動かす IP とか若干

元記事を表示

AWS DynamoDBをjsでいじるときに非同期処理で詰まった話

# AWS DynamoDBをjsでいじるときに非同期処理で詰まった話

## 初めに

このお話は、単に私がJavaScriptの非同期処理を理解していなかっただけなので、プロの皆さんでしたら余裕で回避できる問題だと思います。

私みたいな初学者で、同じようなことに詰まっている方がこの記事を見て解決していただけたら幸いです。

## 私がやりたかったこと

DynamoDBのCRUD操作を関数内で行い、実行結果を戻り値として受け取る といったことをしたかったのですが、戻り値に値が入っていない状態で返されてしまいました。

“`javascript
// 問題のあるコード
function getHoge(){
let hoge;

let params = {
TableName: ‘table’,
Key:{
“id”: “01”
}
};

documentClient.put(params, function(err, data){
if(e

元記事を表示

別のAWSアカウントのSNSに通知を飛ばす方法

#背景・やりたいこと
何かある度に(例えば、ヘルスチェックのエラーだったり、負荷が高くなったり、オートスケールが走ったり)
管理用のメールアドレスに通知を飛ばしたかったりする。
もちろんそういう場合はCloudWatchなどで監視して、SNSに通知を飛ばし、そこからメールを飛ばす構成が一般である。

SNSにアクセスして、新しくトピックを作成し、更にそこに新しいサブスクリプションを追加し、
送信したいメールアドレスを追加して、認証メールを受け取って承認すれば、
このトピックあての通知は設定したメールに通知されるようになる。
後はCloudWatchのアラームが上がったときなどにこのトピックあてに通してあげればよいわけだ。
![構成1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361076/c37a0085-c877-ec39-2ec5-d2411b7369af.png)

しかし、アカウントがひとつの場合は、ここまでの設定でやりたいことが解決するのだが
AWSアカウントを様々な事情で複数持っている

元記事を表示

AWS ACM で com.amazon.coral.service.InternalFailure エラーが出る

ACM で証明書のリクエストを行ったら、`com.amazon.coral.service.InternalFailure` エラーが表示された。

実行していた IAM ユーザは、AdministratorAccess ポリシーと下記のように `NotIpAddress` による IP 制限ポリシーをアタッチしていた。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html

“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Deny”,
“Action”: “*”,
“Resource”: “*”,
“Condition”: {
“NotIpAddress”: {

元記事を表示

AWS IoT エラー AMQJS0008I Socket closed

# AMQJS0008I Socket closed

PCからAWS IoTに向けて、メッセージを送信したが、
タイトルのエラーが表示された。

# 結論
モノに対してポリシーをアタッチする必要がある。
(チュートリアルの中で、アタッチしたつもりだったが、漏れていたみたい?)

# 対応
管理→モノ→対象のモノを選択
![ 2019-11-15 10.14.47.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290588/38140e3b-69b5-2541-db46-ab7c596e6d7b.jpeg)

セキュリティを選択し、対象のセキュリティを選択
![ 2019-11-15 10.15.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290588/81f1ee5f-f87b-c65f-f174-f9a9addc49d7.jpeg)

右上からポリシーのアタッチを選択する
![ 2019-11-15 10.1

元記事を表示

Amazon RDS for MySQL でスナップショットから復元したDBにアクセスする

某案件で Amazon RDS for MySQL を利用しています。
追加開発で既存テーブルにカラム追加をしてAPIを新設してほしいという作業依頼がきました。

追加対象のテーブルの現在のレコード数を聞くと、7桁レベルのレコードがあるようです。
そこへ ALTER TABLE 〜 を流すと、どのくらい時間がかかるのだろうか? リリース時、本番環境で流せるレベルだろうか?

ふと気になったので先輩に相談し、スナップショットからデータベースを復元し、検証用のデータベースを作成して試してみることにしました。
スナップショットは毎晩深夜に自動取得されているものを使います。

Amazon RDS > スナップショット で表示される一覧から、復元したいスナップショットを選択して 「スナップショットから復元」を選択します。

データベース名の入力が必須、インスタンスタイプがデフォルトで本番環境と異なったものが選択されていたので、選択し直しました。
これは本番環境のインスタンスタイプが “旧世代のインスタンスタイプ” という扱いになってしまったからかもしれません。

それと念の為、本番環境とは別の

元記事を表示

OTHERカテゴリの最新記事