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

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

API Gateway + Lambdaのマルチリージョン構成をServerless Frameworkで作る

# 概要
Amazon API Gateway + AWS Lambda で作るサーバーレスなアプリケーションを、マルチリージョン構成にする。
普段から使っているServerless Frameworkで構築してみた。

# 参考
以下のAWSブログの記事が参考になる。記事自体は古いが構成は変わらない。

[Building a Multi-region Serverless Application with Amazon API Gateway and AWS Lambda](
https://aws.amazon.com/jp/blogs/compute/building-a-multi-region-serverless-application-with-amazon-api-gateway-and-aws-lambda/)

# 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/d688f2de-348f-0872-2c08-4275efa9e15f.png)

元記事を表示

AWS EC2 インスタンスの情報をssh configに記載して簡単にssh接続する

# 目的

– ssh configファイルにAWS EC2のインスタンス情報を記載して短いコマンドでssh接続する方法をまとめる

# 実施環境

– ハードウェア環境(ssh接続元)

| 項目 | 情報 |
| — | — |
| 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 |

– EC2インスタンス環境(ssh接続先)

| 項目 | 情報 | 備考 |
| — | — | — |
| インスタンス種類 | AmazonLinux2 | こちらの方法で構築→[AWS EC2 をMacで使ってみよう!](https://qiita.com/miriwo/items/a1ab84c09

元記事を表示

JMESPathでAWS CLIコマンドの出力結果を抽出する

#はじめに
AWS CLIのコマンドで情報を出力させる際に、JMESPathを使って必要な部分だけ抽出するのに苦労しました。
この記事だけでは実用のイメージが湧きづらいかもしれませんが、JMESPathを使って抽出するやり方の参考になれば幸いです。

結局は以下のサイトを参考にすればおおよそ問題ないかと思いますが、自分がやってみたことをここに記載したいと思います。
参考:https://jmespath.org/tutorial.html#list-and-slice-projections

##やりたいこと
AWS CLIのコマンド「describe-listeners」で、リスナーが2つある場合において、
出力結果に1つのみTargetGroupArnを表示させたい。
(リスナーが2つあると、リスナーごとのTargetGroupArnがそれぞれ表示されるので、1つのみ抽出する)

##やってみた
まずはdescribe-listenersの引数 “–query Listeners[]”を使って、全てのリスナーをjson形式で表示してみます。
json形式でListeners[]

元記事を表示

WindowsのイベントログをS3に保存

元々AWS CLIやAWS SDKを使ってプログラムを書いていたので、
Windowsのイベントログを月に1回 S3に保管して管理できないかふと思ってやってみた結果を記載

## 前提
Ⅰ AWS上にWindowsサーバを作成して、IAMのロールにてS3とSNSの適切な権限のロールを作成してWindwsサーバにIAMロールを割り当てています。
Ⅱ S3にバケットを作成しWindowsサーバからのみバケット操作できるようにバケットポリシーを作成しております。
Ⅲ 作成したWinodwsサーバには、AWS CLI v2をインストールしています。インストール手順については[こちら](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-windows.html#cliv2-windows-install)を参考にして下さい。
Ⅳ S3にイベントログを保存できなかった時にエラー処理として、SNSで通知する仕様にしております。

## 作ったPowerShellのスクリプト

特に何か記載することはなく、各プログ

元記事を表示

クラウドの実務未経験でもAWS SAAに1.5ヶ月で合格した話

AWSのSAAの合格体験記です。
これから取ろうとしている人の参考になればいいなと思い、記事投稿します。

# 取ろうと思ったきっかけ
## 新しい技術に触れてみたかったから
オンプレでやってたことがポチポチやるだけで実装できちゃうなんて、近未来的で楽しくないですか?

## 自身のスキルアップのため
クラウドに触れたこともないエンジニアであることに危機感を感じました。
「じゃあクラウド使う現場に行けばいいじゃん」って思われるかもしれませんが、そういったところへ行くには大概**クラウド技術の実務経験が必要です。**
クラウドを使う業務に携わるためには、クラウド技術の業務経験が必須級なのです。鶏が先か、卵が先か。みたいな話ですね。。。
このジレンマを破るために武器として、資格を取得しておくという選択肢は、アリなんじゃないかと思います。
世の中には資格否定派の方もいらっしゃると思いますが、持っていないよりマシじゃないでしょうか?
また、インフラ界隈は資格肯定派が多いようにも感じます。
## ~~流行ってるから~~
上記は半分冗談ですが半分本気です。
使われていない技術をいくら一生懸命勉強し

元記事を表示

API GatewayのマッピングテンプレートでBodyのJSONを書き換える

API GatewayにPOST/PUTされてきたJSONのBody(`$input`)を、マッピングテンプレートで中身を少しだけ書き換えてバックエンドへProxyしたい時:

“`
#set($body = $input.path(‘$’))
#set($body.url = “https://example.tld/thingy/$body.id”)
$input.json(‘$’)
“`

これだけで`url`属性が`#set`で指定したURLに置き換わった状態のJSON文字列が生成される。

`#set`での属性置き換え後、最後にJSON文字列化する部分が`$body.json(‘$’)`では **ない** 点に注意。`.json(‘$’)`は`$input`にしか定義されていない。

すべて参照渡しでまぁJavaScriptみたいなもんだよと言われれば、この使い方も、そんな気もしなくもないが、それにしても、

**わかりにくすぎない!?**

たったこれだけのことをするのに1日潰れてしまった……。

ref:

* https://stackoverflow.com/qu

元記事を表示

AWS Systems Managerのパッチマネージャーを使ってパッチ適用を自動化する

# はじめに
本記事は[AWS Well-Architected Labs – Operational Excellence – 100 – INVENTORY AND PATCH MANAGEMENT](https://wellarchitectedlabs.com/operational-excellence/100_labs/100_inventory_patch_management/)のポイントやハンズオン手順をまとめたものになります。AWS Well-Architected Labsについて知りたい方は[こちら](https://qiita.com/chanhama/items/b40fd218865d9bce7723)をご覧ください。

# パッチ適用
パッチ適用運用はやらないといけないけど、手動で行う場合は面倒臭い作業です。数台のサーバーならまだしも数が多いとさらに大変です。パッチ適用は**トイル**の代表格と言っても過言ではないでしょう。そんなパッチ適用を**パッチマネージャー**を使えば**自動化**することができます。

# パッチ適用自動化を行う上でのAWSサー

元記事を表示

一時クレデンシャルを発行するローカルIMDSを作った

# はじめに

AWSを使う上でクレデンシャルをEC2インスタンス上(~/.aws/credentials)に保存したり
プログラムの設定ファイルに指定することは、セキュリティ上の観点から推奨されません。
(というかアクセスキーを発行すること自体がセキュリティリスクになります)
通常は、IAMロールをEC2に紐づけてIMDS(インスタンスメタデータサービス)から一時的な
クレデンシャルを取得してAWSリソースにアクセスにすると思います。

この一時クレデンシャルを提供するのが、IMDS(後述)と呼ばれるサービスですが、
ローカルで動くIMDSもどきを作ってみたので、その紹介です。

# インスタンスメタデータサービス(IMDS)とは

[このページ](https://aws.amazon.com/jp/blogs/news/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)を抜粋

“`
インスタンスメタデータサービス(IMDS)は、一

元記事を表示

SageMakerを使って機械学習に入門してみる

# はじめに

AWS公式の[Amazon SageMaker の開始方法](https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/gs.html)の手順に沿って、機械学習モデルを構築してデプロイするまでの流れを実践してみる事にしました。

本記事は自身のハンズオン学習メモとして投稿します。

# 目次
– [機械学習とは](#機械学習とは)
– [SageMakerの概要](#SageMakerの概要)
– [チュートリアル](#チュートリアル)
– [おわりに](#おわりに)

# 機械学習とは

ここでは割愛。概要を把握するには以下を参照。

[一から始める機械学習(機械学習概要)](https://qiita.com/taki_tflare/items/42a40119d3d8e622edd2)

# SageMakerの概要

詳しくはAWS公式の[Amazon SageMaker のドキュメント](https://docs.aws.amazon.com/sagemaker/index.html)を参照。

>Amaz

元記事を表示

本番環境とcredentials.yml.enc

#この記事で伝えたいこと
production環境の秘匿情報をcredentialsで扱う前に**しっかり調べましょう**。
ただのコピペダメ絶対。

#基礎知識 暗号化と復号について
**〜開発環境〜**
“`$ rails new“`した時config/master.keyと共にcredentials.yml.encは作成されるようです。
そしてこのmaster.keyを使用して暗号化、復号します。
(master.keyは大切に保管しましょう)

秘匿情報の編集には以下のコマンドを実行します。

“`
$ rails credentials:edit #master.keyが存在しない時実行すると新たに作成する
“`

**〜本番環境〜**
暗号化と復号にはsecret_key_baseも必要になります。
ローカルで“`$ rails secret“`コマンドを実行し作成します。
事前にローカルのmaster.keyをサーバーにも配置しておくこと。

#本番環境で気をつけること
credentials.yml.encの暗号化、復号にはmaster.

元記事を表示

AWS KMSを理解する

AWS KMSはマネージドでは暗号化に使う鍵を管理してくれるサービスです。
が、、ややこしい

暗号化の方法

* サーバーサイド暗号化
* クライアントサイド暗号化

の二種類あります。そしてAWS KMSの特徴である[Envelop Encryption](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#envelopingO)はクライアントサイド暗号化で使用できます。サーバーサイド暗号化ではCMK(Customer Managed Key)を使用した通常の暗号化が可能です。AWS KMSのEnvelop EncryptionではデータをCDK(Customer Data Key)で暗号化し、CDKをCMKで暗号化し、CMKをAWS内で管理・保管してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624064/60f0be4a-7fd6-2eff-538a-95495f81b12d.

元記事を表示

Amplifyで、STSの認証を直接行う

Amazon CognitoのIDプールを使って外部プロバイダーがウェブベースの認証を提供する場合に、**Cognitoが発行する認証の有効期限を伸ばす**ことがそのままでは難しかったので、その調査の記録を書いておきます。

# そもそもの認証フロー

開発者認証or外部プロバイダーどちらを使ったとしても、Amplifyの認証を素直に使うと下の拡張認証フローになります。

スクリーンショット 2020-07-20 17.48.09.png

> 引用元:
https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-flow.html

この図を見てもらうとわかるのですが、最終的な認証情報はAWS STSから渡ってきま

元記事を表示

terraform: AWS provider や s3 backend の設定に role の arn をハードコードせずに switch role や MFA 環境で実行する方法

# 概要

terraform を MFA 認証有の IAM ユーザ権限で switch role しつつ実行するのに手間どったので、対応方法を記載しておきます。
実行時に使用する switch role 先の arn を aws provider や s3 backend 設定にハードコードすると簡単にできるらしいのですが、role は環境(開発/テスト/本番)依存するものなので、ハードコードしたくないですよね。

同じようなことで困っている人は世の中にそこそこいて、関連する issue がいくつか挙がっています。
その中で、terraform の開発者っぽい人が、”terraform は自動実行を意識しているので、MFA の one time password を interactive に入力するとか対応しねーんだよ!” と言っているコメントがあったので、それをヒントに workaround を調査しました。

# MFA および switch role 環境の場合

## 事前の設定

~/.aws/config, credentials ファイルは通常通り設定済みとします。#

元記事を表示

[AWS] ECSの環境で、ディスク使用量のメトリクスを収集してみる

# はじめに
ECSには、Container Insightsという、CloudWatchにメトリクスデータを流す機能があり、コンテナのメトリクスを収集する機能があります。
ところが、ここではディスク使用量について収集することができません(収集可能なメトリクスは後述)。
そこで、さくっとContainer Insightsを使わずにディスク使用量を収集する方法について書き残しておきます。

# メトリクスの収集
まず、EC2でもそうですが、デフォルトのままでは、インスタンスの中のメトリクスを収集することができません。
メトリクスを収集するためには、CloudWatch Agentをインスタンス内にインストール、起動するなどが必要です。
ECSの場合は、「はじめに」でも触れましたが、Container Insightsという機能があり、これをクラスターに適用すると、クラスター内のコンテナについてのメトリクスが収集できるようになります。

## Container Insightsで収集可能なメトリクス
では、Container Insightsで収集可能な標準的なメトリクスについて、まと

元記事を表示

AWSから請求書が届いた

先月からAmazonWebServiceを利用し始めました。

サーバーとかすぐに構築できて便利だなーって思いながら使っていました。

先日、請求書がきたので確認して見たら料金が2000円を超えていた。

内訳がきになるので明細書を見て見る。

どうやらNATゲートウェイに対して請求がきていたようです。

料金について調べてみる。

以下AWS公式サイトから抜粋
https://aws.amazon.com/jp/vpc/pricing/

===========================================
NAT ゲートウェイ料金

VPC 内に NAT ゲートウェイを作成することを選択した場合は、NAT ゲートウェイがプロビジョニングされ利用可能であった “NAT ゲートウェイ時間” に対して料金が請求されます。データ処理料金は、トラフィックの送信元か送信先にかかわらず、NAT ゲートウェイで処理されたギガバイト単位で適用されます。1 時間未満の NAT ゲートウェイ時間は、1 時間分として請求されます。また、NAT ゲートウェイを介し

元記事を表示

Java で Amazon SES SMTP を使用してメールを送信する

会員がログインパスワードを忘れたとき、登録してあるメールアドレスにメールを送信してその中のリンクを押すとパスワードがリセットされる、というのをやりたかったので、AWS 上のWebアプリにメール送信機能を実装。

メール送信機能は jar ファイルにして部品化。

プログラミングより AWS の設定が面倒臭い気がしました。

#1.環境
VS Code
Java Extension Pack
Spring Boot Extension Pack

#2.SMTP認証情報の習得

以下の URL の内容の通り、AWS のコンソールにログインして「Amazon SES コンソールを使用して Amazon SES SMTP 認証情報を取得する」の1~6を実施してSMTPユーザー名とSMTPパスワードを取得します。

取得するとメールサーバー名とポート番号も表示されます。

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/smtp-credentials.html

#3.Gradle Project の作成

VS Cod

元記事を表示

Template error: Fn::Select cannot select nonexistent value at index 1

## 問題

以下のCloudFormationテンプレートでサブネットを東京リージョンに構築しようとしたところ、表題のエラーを吐きました。

“`yaml
Resources:

PrivateSubnet2:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.0.2.0/24
VpcId: !Ref CFnVPC
AvailabilityZone: !Select [ 1, !GetAZs ]
MapPublicIpOnLaunch: true
Tags:
– Key: Name
Value: PrivateSubnet2
“`

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6ebcd95a-57b5-b87c-cbee-e8270bedd003.png)

## 原因

`Fn::GetAZs`はアカウント

元記事を表示

AWS HoneyCodeに詳しい人に聞いてみた

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

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

どこの誰から聞いたとは書けないんですが、まとまって聞いたので参考までにメモってみました。
そんなに深い内容ではありませんのであしからず。。。

###HoneyCodeのコンセプト
4つの概念で構成されています。4つの概念を簡単に表現してもらいました。
・Tables:包含されたデータベースの活用
・App builder:GUIによるアプリ開発
・Automations:ワークフローの自動化、Cronの設定、通知
・Teams:ACLの設定

###環境
開発環境と動作環境は異なっているようです。
開発環境:Chrome
動作環境:Chrome、Edge、Firefox、Safari

###Honeycodeコミュニティでオススメは?
Honeycode  coursesで学ぶのが一番近道

##

元記事を表示

aws の練習

AWSでサーバーを立ち上げ、Apache をインストールするまで。もしくはmysqlの設定まで。udemy の aws 講座の内容です。

## VPC(Virtual Private Could)の作成
ログインしてVPC dashboardへ。
Create VPC
Name tag に名前。
IPv4 CIDR に10.0.0.0/16

Subntets から Create subnet
Name tag を入力
VPCを選択
Availability Zone を選択
IPv4 CIDR block に 10.0.10.0/24

##create internet gateway
Action からVPCにアタッチ。
vpc を選択
ルートテーブルの作成
name を入れて
vpc を選ぶ。
subnet 関連付け

## create ec2 instance

AMIの選択。ex. Amazon Linux
Instance Type の選択 General purpose t2.micro(無料なので)
Step 3 Coufigure Instance Det

元記事を表示

AWS Lambda+API Gateway+DynamoDBでCRUD APIを作るのをGolangでやってみた

# この記事について
Developers.IO 2020のサーバーレスセッションに触発されました。
[[動画公開] 初めてのサーバーレスアプリケーション開発 #devio2020](https://dev.classmethod.jp/articles/devio2020-first-serverless-application/)

というわけで、Golangを用いてAWSで基本的なサーバーレスをやってみたその手順をまとめました。
具体的には以下の手順を紹介します。

1. GolangでLambdaを動かしAPI Gatewayと連携させる
2. LambdaとDynamoDBと連携してAPIを作る

## 使用する環境・バージョン
– OS : macOS Mojave 10.14.5
– Golang : version go1.14 darwin/amd64

## 読者に求める前提知識
Golangの基本的な文法がわかること。

# Lambda関数の作成
## コンソールで関数を作成
AWS Lambdaのコンソールを開くと、以下のような画面になります。

元記事を表示

OTHERカテゴリの最新記事