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

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

Serverlessバッチで定期的にデータを集計するアーキテクチャーの紹介

# はじめに
本記事は [QualiArts Advent Calender 2019](https://qiita.com/advent-calendar/2019/qualiarts) 16日目の記事です。

昨日は @tnbe21 さんの [mongoDB3.2から3.4へのアップデート作業](https://qiita.com/tnbe21/items/4458f47a9a9e8d80c455) でした。
明日は @Koheinimi さんの xxxxx です。

# QualiArtsのエンジニア施策の紹介
QualiArtsでは2019年前期にイノテックレポートという技術レポートをエンジニアが書く施策がありました。
また、後期は[もくもく会](https://creator.game.cyberagent.co.jp/?p=6633)という隔週で2時間の業務時間内に勉強時間を確保するエンジニア施策があります。

# このアドベントカレンダーを書くにあたって
今回の内容はイノテックレポートの内容を外部用に加筆したもので、
このQittaはもくもく会の時間を使い編集しています

元記事を表示

Azure Managed Identityを使ってソースから資格情報を追い出す

# はじめに

クラウドでアプリケーションを開発するにあたり真っ先に考えるのが資格情報をどう取り扱うかですよね。

たとえば、FunctionsからBlobStorageにファイルを保存するときのことを考えてみましょう。
BlobStorageのストレージアカウントのアクセスキーをソースコードに直接書くことでアクセスすることは可能ですが、そのソースコードをそのままGithubにcommitしてしまい漏洩してしまう・・・なんてことは想像できますしAWSではよく話題になってますよね。

* [AWSが不正利用され300万円の請求が届いてから免除までの一部始終](https://qiita.com/AkiyoshiOkano/items/72002409e3be9215ae7e)
* [【実録】アクセスキー流出、攻撃者のとった行動とその対策](https://dev.classmethod.jp/cloud/aws/accesskey-leak/)
* [[まとめ] AWSのアクセスキーを安全に管理する方法](https://nishiyama.hatenablog.com/entry/ho

元記事を表示

AWS CDKを使ってDynamoDBとLambda環境を構築する

[前回](!https://qiita.com/chocomintkusoyaro/items/dda5054b5c7c64ee9bb5) の続きでLambdaとDynamoDBの環境を構築していきます。

## 作成する環境

以下のような環境を構築するコードとなっています。
IsolatedサブネットにLambda関数をデプロイし、VPC Gatewayを経由してDynamoDBテーブルのストリームをフェッチできるようにします。

![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203061/a74bca05-2904-ed16-4e3d-ef07fb4b2e1f.png)

## AWS CDKのインストール

“`
sudo npm install -g aws-cdk
“`

“`
cdk —version
1.18.0 (build bc924bc)
“`

“`
mkdir mini-cdk
cd mini-cdk
cdk init

元記事を表示

Amazon ECSを用いてRuby on Railsを起動し、運用時に起きた課題の解決案

# 書いたこと
– Amazon ECSを用いてRuby on Railsを動かす構成の紹介
– そこで出た課題と解決手法の紹介

# ECSを用いてRuby on Railsを動かす構成の紹介
– Amazon ECSとは
– Amazon Elastic Container Service
– コンテナオーケストレーションサービス
– Dockerコンテナ化されたアプリケーションをECSで定義してデプロイ・スケールができる

## ECSでの定義例
大きく分けて以下3つの定義をECS上で定義すれば環境が構築できる
![スクリーンショット 2019-12-14 12.40.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140026/006be512-f5fb-2652-00c8-958ebfb4f5d7.png)

### 1. クラスタの定義
– グループの定義
– 「本番環境」など

### 2. サービスの定義
– クラスタ内で公開したいサービスの定義

元記事を表示

RUNTEQの動画配信基盤-HLSエンコード編-

# はじめに
本記事では動画のアップロードをトリガーとして, MediaConvertのジョブテンプレートからジョブを生成し, HLS形式へと変換するフローを解説します.

# S3バケットの作成
まずはmp4ファイルを格納するバケットと変換されたファイル群を格納するバケットを作成しましょう
(ここではあえてバケットを分けていますが,分けなくても問題ありません.)

# IAMの作成
### MediaConvert用のロール
`AmazonS3FullAccess`, `AmazonAPIGatewayInvokeFullAccess`をアタッチ.
### Lambda用のロール
LambdaからMediaConvertを呼び出すためのカスタムポリシーを作成します.

“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “VisualEditor0”,
“Effect”: “Allow”,
“Action”: [

元記事を表示

Pulumi(golang)でEKS環境を構築する

# はじめに
AWS環境構築をコード化するためのツールとしてAWS CDK、Terraform、Ansible、Pulumiなどがあります。
今回は記述言語をgolangとしてPulumiでEKS環境を構築します。

# Pulumiとは
「Modern Infrastructure as Code」を掲げた、クラウドインフラを構成するためのOSSです。
対応言語はJavaScript、TypeScript、Python、golangなどが挙げられます。
GCP、AWS、Azureに対応しており、Kubernetesリソースをデプロイすることも可能です。

まだ新しいこともあり公式ドキュメントや公式サンプルコードはTypeScript中心となっています。
普段バックエンドを触っている人にとってはgolangの方が嬉しいですね。

# 環境情報
macOS Mojave 10.14.1
pulumi: 1.7.0
golang: 1.12.4

# 実装
golangを使用して実装します。
事前にPulumiやgolangはインストールされていることは前提とします。

`$GOPATH/

元記事を表示

[AWS] VPCでネットワーク構築2

[[AWS] VPCでネットワーク構築1](https://qiita.com/hosochin/items/5124c017d80b506a63ce)
の続きです

ここでは作成したパブリックサブネットにWEBサーバ用のEC2インスタンスを作成していきます

### 1.インスタンスの作成
– サービス > EC2 > インスタンス > インスタンスの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384069/d9b4bccd-03f0-68bf-9c76-7e86a6b6aafc.png)

・ネットワークはVPC領域を選択
・サブネットはパブリックサブネットを選択
・プライマリIPは10.0.1.10を割り当てときます
・次のステップをクリック

### 2.ストレージの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384069/b2705cef-283c-f0be-12

元記事を表示

[AWS] VPCでネットワーク構築1

AWSでVPCネットワークを構築するメモ
今回はVPC領域をパブリックとプライベートのサブネットに分割して、それぞれにWEBサーバとDBサーバを構築してみました
参考:[Amazon Web Services 基礎からのネットワーク&サーバー構築](https://www.amazon.co.jp/dp/B06Y5ZSYY4/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

ちなみにVPCとは
> Virtual Private Cloud (VPC) は、AWS アカウント専用の仮想ネットワークです。VPC は、AWS クラウドの他の仮想ネットワークから論理的に切り離されており、AWS のリソース(例えば Amazon EC2 インスタンス)を VPC 内に起動できます。

### 完成イメージ
![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384069/6ebe6fff-ec32-a3c7-2b64-e942f4fe6

元記事を表示

SlackのWebhookをプロキシする仕組みを作る

Slackはさまざまなカスタマイズ機能を持っているのが魅力のツールです。例えばBotを作ったり、カスタムのslash commandを作ったりすることで、プラットフォームの拡張ができます。

Slack Botの作り方はいくつかあるのですが、Slackのリッチな機能を最大限に引き出すには、SlackからのWebhookを受けることが必要になってきます。すなわち、ボタンなどが付いたリッチなメッセージの投稿は難しくないのですが、投稿したメッセージのボタンやメニュー操作は、SlackからWebhookの形で通知される仕組みになっています。

※ この辺りの仕組みの詳細については、まとまっている記事がいくつもあるので省略します。

– [Slack Botの種類と大まかな作り方](https://qiita.com/namutaka/items/233a83100c94af033575)
– [slackで単純なボタン付きメッセージを送る](https://qiita.com/masakabe/items/c47fc98e939475594842)

Slackは当然publicなサービスなの

元記事を表示

EC2で、秒間数千回~レベルでElastiCacheやRDSに接続して、名前解決に失敗するときの対策

とある大規模WEBシステムをオンプレからAWSに移行したとき遭遇した題名の件のTIPSです。

データストア(RDSやElastiCahceなど)の接続に、エンドポイント(=固定IPをもたない)を使う、EC2を利用した中~大規模のシステムでは、必須の対策かもです。

# システム構成

システム構成としては、よくあるパターンのものとなります。

WEBアプリケーションサーバは、Elastic Beanstalk や Lambdaなどがよいとおもいつつも、WEBアプリケーションの複雑性からEC2をオートスケールで用意しました。

一方で、データストアは、ElastiCacheとAurora Mysqlを利用しています。

EC2及びデータストアは、潤沢なインスタンスサイズを利用していました。

# 処理量

ざっくりですが、WEBアプリケーションに対するアクセス、そのときに発生するElastiCahce及びAurora Mysqlといったデータストアのエンドポイントへのアクセスが、秒間数千を超えるときがあるレベルです。

# 事前対策

マネージドサービスであるElastiCacheとA

元記事を表示

AWS の利用料金の合計を Cost Explorer APIで取得する

# 概要
AWS の利用料総額を、Slack 通知する Lambda 関数を Python 3 で作成します。
Python/AWS 共に初心者レベルで修行中の身のため、極力単純な内容にしています。
勉強のため軽く見たいけど応用例みたいな記事しかなくて困ったので、そういった方の参考になれば幸いです。

# AWS 使用料金について
[Cost Explorer API](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/ce-what-is.html) を利用するため、1回の実行当たり 0.01 USD が最低でも発生します。
連続実行などはされないかと思いますがご注意ください。

また、この記事では AWS Cost Explorer 画面の(おそらく)デフォルトで選択されている 非ブレンドコスト ではなく、ブレンドコスト を Cost Explorer API にて取得します。

# Slack 設定
Slack 通知するための Incomming Webhook 設定は [こちらの記事](ht

元記事を表示

[AWS][CFn]IAMの設定

## はじめに

こんにちは。なじむです。
引き続き、クラスメソッドさんのブログ記事、[AWSアカウントを作ったら最初にやるべきこと ~令和元年版~](https://dev.classmethod.jp/cloud/aws/aws-1st-step-new-era-reiwa/)を参考にさせていただき、AWSでの初期設定をCloudFormationで実施していきます。
今回は「IAMの設定」をCloudFormationで実施していきます。IAMはAWSを使用する上で一番重要と言っても過言ではないと思います。その設定が少しでも楽になれば。

## 前提

今回は特定のIPからのアクセスのみを有効にします。ただし、特定のIPからのアクセスのみに制限してしまうと、AWS内部の通信(例えばEBSの暗号化)も制限してしまうことになるため以下の条件で設定します。

– コンソールにログインした後、スイッチロールを行い任意のロールにスイッチする
– 上述のスイッチロールは特定のIPからしか実行できないよう制限する
– スイッチロールした後はIPアドレスの制限を設けず、任意の操作を実行可能とする

元記事を表示

AWS CDKを使ってVPC/EC2/S3バケットを構築する

AWS CDKを使った基本的な環境を構築したくなったので、記事を投稿してみました。
また、退職して少しの間ニートになったので、CDK関連の記事を今後投稿してみようと思ってます。

## 作成する環境構成

以下のような環境を構築するためのCDKソースコードを作成します。
基本的な構成なのですが、CDKでコーディングすると楽しいのでおすすめです。

![SgF9dAJ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203061/9f158faf-53dc-c30c-09a4-ba314965b63b.png)

– CDKバージョン: v1.18.0
– TypeScript: v3.7.3

## AWS CDKのインストール

“`
sudo npm install -g aws-cdk
“`

“`
cdk —version
1.18.0 (build bc924bc)
“`

“`
mkdir mini-cdk
cd mini-cdk
cdk init app –langua

元記事を表示

AWS re:Invent 2019で発表されたサービス

# AWS re:Invent 2019

– 公式サイト:[re:Invent](https://reinvent.awsevents.com/)
– 期間:2019/12/01 – 12/06
– 場所:ラスベガス

## 発表されたサービス

### コンピューティング

– EC2
– Inf1 インスタンス
– 機械学習推論用
– M6g / C6g / R6g インスタンス
– Arm ベースのインスタンス
– Image Builder
– AMI 作成
– Nitro
– EC2 のディスクアクセス / ネットワークを高速化
– ECS
– Cluster Auto Scaling
– キャパシティプロバイダー
– Fargate
– Fargate Spot
– コスト削減
– Kubernetes サポート
– Compute Optimizer
– 最適なリソースを利用しているかアドバイス
– Outposts
– オンプ

元記事を表示

CircleCIを利用してAWS SAMで自動デプロイする(Python)

## 概要
AWS SAM + Pythonで開発したサーバーレスアプリケーションをCircleCIからデプロイする機会があったので、解説したいと思います。

下記の記事を参考にさせて頂きましたが、今回の設定では一部修正しないとうまく動作しない部分がありましたので、その点について記載したいと思います。
[CircleCI と GitHub で AWS SAM のサーバーレスアプリを自動デプロイしてみた (開発環境 & 本番環境) | Developers.IO](https://dev.classmethod.jp/cloud/aws/aws-sam-auto-deploy-for-circleci/)

Pythonでの経験が少ないため、間違った記載がありましたらご指摘いただけると嬉しいです?‍♀️
普段はAWS SAM + Goを利用することが多いです。

## ソースコード
https://github.com/kobayashi-m42/aws-sam-circleci-deploy-sample

## 解説
CircleCIの設定ファイルはこんな感じで作成しました。

実行

元記事を表示

GitHub Actions上でTerraform CI/CD環境を構築する

# はじめに
Github Actionsの正式版がリリースされて1ヶ月ほど経ちました。中々さわれてなかったのですが、TerraformのCI/CD環境構築の調査で動かしたのでその時のまとめです。

# サンプルプロジェクト
とりあえず試すだけであれば、Terraform公式が用意している[Terraform GitHub Actions](https://github.com/hashicorp/terraform-github-actions)を使えばすぐに終わってしまいます。
それだけだと面白くないのでなるべく実際の運用を想定して動かしていきます。とはいえあらゆるパターンを試すのは難しいので以下のようなサンプルプロジェクトを仮定します。

– providerはAWS
– moduleを使う
– workspaceを使う
– リポジトリ内に複数のmain.tfがある

ディレクトリ構成は以下。(ファイルの中身は本題ではないので割愛)

“`
├── modules
│ ├── ec2
│ │ ├── main.tf
│ │ └── variables.tf

元記事を表示

Amazon Personalize/Forecastハンズオンの私的補講

– Amazon Personalize
– Amazon Forecast

こちらの2つのサービスはAWSで提供されている機械学習サービスで、機械学習に詳しくなくても簡単に始められることが特徴です。
この2つのサービスを体験するためのハンズオン資料がAWSより公開されています。
https://pages.awscloud.com/event_JAPAN_Hands-on-Amazon-Personalize-Forecast-2019.html

先日こちらのハンズオンを資料を元に実際にやってみて、個人的に気になった箇所などを補足としてまとめてみます。

# Amazon Personalize

## ソリューションのレシピ(学習アルゴリズム)

– Automatic (AutoML)
– 適切なアルゴリズムをPersonalizeが判断して採用する
– 指定したレシピリストの中から選択する設定も可能
– 現状はHRNNとHRNN-Metadataの2択?今後レシピが増えると選択肢が増すかも
– HRNN
– Hierarchical

元記事を表示

AWS CLIのコマンド補完する設定

## Zshに設定する

パスを確認する

“`
$ which aws_completer
/usr/local/bin/aws_completer
“`

`.zshrc`に以下追加する

“`
source ‘/usr/local/bin/aws_zsh_completer.sh’
“`

`.zshrc`の内容を反映する。

“`
source ~/.zshrc
“`

## Bashに設定する

パスを確認する。

“`
$ which aws_bash_completer
/usr/local/bin/aws_bash_completer
“`

`.bashrc`に以下追加する。

“`
complete -C ‘/usr/local/aws/bin/aws_completer’ aws
“`

`.bashrc`の内容を反映する。

“`
source ~/.bashrc
“`

元記事を表示

ECSでTCPソケットエラー 事象と対応

# ECS + Nginx,GunicornでTCPソケットエラー

– Jmeterで負荷をかけると503 Bad Gatewayが多発した
– どうやらECSには以下の制約があるそう。

`net.core.somaxconn=128`
`現時点では Fargate では変更できないので、タスクを多く起動して頂くことで解決して下さい。`
[【週刊 Ask An Expert #04】AWS Loft Tokyo で受けた質問まとめ #AWSLoft](https://aws.amazon.com/jp/blogs/startup/weekly-aae-04/)

– 他にもDBのチューニングも考慮した方が良い

`ディスクI/O`
`RDSのパフォーマンスインサイトでIndexの分析`
  `パフォーマンスインサイトではIndexの使用率やクエリの結果が確認可能`

# 対応方法の検討
1 ECSを予め増やしておく
一番ナンセンスだが、即時で対応が可能。
ELB + ECSの環境であれば、最小コンテナ数と最大コンテナ数の設定を変えるだけで済む。必要に応じて、ELBのPr

元記事を表示

AWS Cloudwatchチートシート

# [アラームを評価する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)

– [期間]アラームの各データポイントを作成するためにメトリクスや式を評価する期間です。これは秒単位で表されます。期間として 1 分を選択した場合、1 分ごとに 1 つのデータポイントが存在します。

– [評価期間] は、アラームの状態を決定するまでに要する直近の期間 (データポイント) の数です。

– [Datapoints to Alarm (アラームを発生させるデータポイント数)] は、アラームが ALARM 状態に移るためにしきい値を超える必要がある評価期間内のデータポイントの数です。しきい値を超えたデータポイントは連続している必要はありませんが、すべてが [評価期間] に相当する直近のデータポイント数に含まれている必要があります。

元記事を表示

OTHERカテゴリの最新記事