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

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

CodeBuildでバッチビルド(並列ビルド)を導入しようとしたけどできなかった話

# 概要

元々、単一のLambda関数のビルドからデプロイまでをCodeBuildを利用して行っていたのですが、Lambda関数をいくつか追加する要件が発生したため、一つのCodeBuildから複数のアプリケーションをビルドし、それぞれのLambda関数にデプロイをできるように変更しました。
この時点では特にデプロイ時間も気にならないほど速かったため直列でビルドする定義で設定を行いました。並列ビルドも考えたのですが、これを行うためにはCodePipelineでビルドステージを複数作る必要があり、インフラ定義もいじらないといけないため、作業ボリュームが見合っていないと感じたため実施しない判断をしました。

しかし、2020/7/30に「[AWS CodeBuild がビルドプロジェクトの並列実行と協調実行のサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2020/07/aws-codebuild-now-supports-parallel-and-coordinated-executions-of-a-build-proje

元記事を表示

Blue/GreenデプロイメントではRoute53の加重ルーティングを使うといいらしい

Blue/Greenデプロイメントすらもわからなかったので
自分の知識として。

## Blue/Greenデプロイメントとは
従来のアプリと新バージョンのアプリ(テスト済み)を構築し、
ダウンタイムなしに従来のアプリから新アプリに切り替えていく方法。

参考:[「Blue-Green Deployment」とは何か、マーチン・ファウラー氏の解説](https://www.publickey1.jp/blog/14/blue-green_deployment.html)

## AWSで実現するBlue/Greenデプロイメント
Blue/Greenの構築方法は下記のawsのドキュメントがある。
[AWS のブルー/グリーンデプロイ](https://aws.amazon.com/jp/quickstart/architecture/blue-green-deployment/)

その環境をRoute53でルーティングし、加重ルーティングすることで新バージョンのテストもできるらしい。

(aws SSA-C02の勉強にて学んだこと)

元記事を表示

AWS EC2 AmazonLinux2インスタンスにMailCatcherを導入する

# 目的

– MailCatcherの実装方法をまとめる。

# 前提条件

– 下記、または下記に準ずる方法でCentOS7のPCが構築されていること。
– [Cent0S7をPCにインストールする](https://miriwo.hatenablog.com/entry/2020/08/09/144030)

# 前提情報

– 本説明で実行するコマンドは特筆しない場合、CentOS7のPCにssh接続を行い実行する物とする。

# 読後感

– MailCatcherを起動しブラウザから確認することができる。
– 筆者は下記作業後のインスタンスに対しMailCatcherの導入を実施する。
– [AWS EC2 AmazonLinux2だけでLaravelのアプリをデプロイする](https://qiita.com/miriwo/items/b39d1ac6289c54cc2cfd)
– `http://インスタンスのグローバル(パブリック)IPv4アドレス:1080`でMailCatcherをブラウザで表示することができる。

# 概要

1. インスタンスの

元記事を表示

TypeScript + Jestでaws-sdkをmockする

## この記事について
最近よくTypeScriptでAWSのリソース操作を行うのですが、動作確認を行うたびにリソースを作ったり消したりするのが面倒くさいと感じていました。
ましてやユニットコードなんて書いてもその時のリソース状況にがっつり依存するなあ・・・と少しナイーブになっていました。

そんな中、最近やっとaws-sdkのモック化に成功したのでメモとして残しておきます。

動作確認元のDynamoDBテーブル定義や詳細は[この記事](https://www.ooooouchi.info/entry/2020/09/04/094500
)を参照してください。
CloudFormationの内容と実プロジェクトのリポジトリを記載しています。

## Jest
https://jestjs.io/
Facebook製のテストフレームワークです。
概要や基本的な書き方は[この記事](https://qiita.com/chimame/items/e97883fd46b67529d59f)が参考になります。

## Jest導入
“`sh
yarn add jest @types/jes

元記事を表示

Amazon IVS を利用して簡易的な動画配信プラットフォームサービスを作る

# 概要
本記事では、2020/07/15にGAとなった [Amazon Interactive Video Service](https://aws.amazon.com/jp/ivs/) (以下 IVS) を利用して、簡易的な動画配信プラットフォームサービスを作成する。
尚、実装は PHP / Lumen を用いて実装している。

# IVS とは
簡単にセットアップが可能なマネージド型のライブストリーミング用のサービスで、低遅延な映像体験も特徴のひとつである。
IVSに最適化されたプレイヤーSDKも提供しており、プラットフォーム間の機能差異を意識することなく、サービスの提供を可能としている。
https://aws.amazon.com/jp/ivs/features/

# プラットフォーム実装のための構成
簡易的な動画配信プラットフォームを作成するためには以下の構成で実現することが可能である。

![Untitled (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61893/19285

元記事を表示

【AWS】RDS改めてまとめてみた

#RDS
様々なデータベースソフトウェアに対応したフルマネージド型のリレーショナルデータベース

##利用できるデータベースエンジン
– MySQL
– ORACLE
– Microsoft SQL Server
– PostgreSQL
– MariaDB
– Amazon Aurora

##RDSの制約事項
– バージョンが限定される
– キャパシティに上限がある
– OSへのログインができない
– ファイルシステムへのアクセスができない
– IPアドレスが固定できない
– 一部機能が使えない
– 個別パッチは適用できない

##RDSの特徴
– 用意にマルチAZによるMaster/Slave構成を構築できる
– 戦勝専門のリードレプリカを最大5台(Auroraは15台)設置することができ、読み取り処理をスケールアウトできる
– 自動/手動でスナップショットを取得して保存管理し、耐障害性を高めることができる
– インスタンスタイプを変更してスケールアップ/ダウンを実施可能
– ストレージサイズは拡張はできるが縮小はできない
– データベースシャーディングを利用してRDSの書き込み

元記事を表示

aws Lambda でPillowを利用でこまった話

## 背景
Python のPillow を利用したLambda FunctionをLocalでは問題なく実行できるのにcdkでDeployしたら以下
のようまエラーではまってました。

“`
cannot import name ‘_imaging’ from ‘PIL’ (/var/task/PIL/__init__.py)
“`

## 最初にDeployした方法(エラー再現パタン)

– cdk の指定

“`python:
create_func = lambda.Function(self, “createFunction”,
code=lambda.Code.asset(‘functions/artifacts’),
handler=”create.lambda_handler”,
runtime=lambda.Runtime.PYTHON_3_8,

元記事を表示

Amazon Linux2 で Puppeteer/Chrome headless ブラウザが動かない

## はじめに
Amazon Linux2 上で、Puppeteer から Chrome を起動しようとしたところ、起動しなかった。ググったところ、こうすれば動く!みたいなものはいくつか出てきたが、「なんで?」が不明なものが多かった。

先に結論として、Chrome を起動するために必要なライブラリが足らなかったのが原因で、それは、yum install では、すんなり入らない(ものがある)ので、調べて入れる必要がある。

## 実行環境
“`
$ node -v
v14.9.0
$ npm -v
6.14.8
“`

## Chrome のインストール
[puppeteerを使ってCentOSでheadless chromeを動かす](https://qiita.com/isante-kishiyo/items/309296e64ed34d3ee7b8)

ここに書いてある通り。

以下を追加

“`/etc/yum.repos.d/google.chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.g

元記事を表示

apex いなくなっちゃったのね…

AWS Lambda で開発し始めた頃よくお世話になった [apex](https://github.com/apex/apex), いつの間にか公開中止になってたんですね。CircleCI で古いブランチのワークフローを回そうとして 404 と言われて、初めて気づきました。

確かに近頃は serverless だの SAM だの CDK だのと より便利なツールが増えてきて私もそっちばかり使ってましたが(Layer に対応してくれなかったのは痛かった)、CloudFormation 使わずに手軽にデプロイできるツールとしては存在意義はあったと今でも思ってます。

今までありがとう、apex。君のことは忘れないよ。

元記事を表示

【†ちょっと尖ったハンネメーカー†】AWS S3 + API Gateway + Lambda + DynamoDB でアプリを作ってみる

# 作ったもの

「デーモン小暮」「ジミー大西」「ギャル曽根」「ヘルシェイク矢野」…
**カタカナ語+名字**の芸名やハンドルネームって尖ってて憧れますよね。
今回は、そんなちょっと尖ったハンドルネームを自動で生成する**「†ちょっと尖ったハンネメーカー†」**を作成しました。

https://togattahanne.hamabe.info

hanne.gif名

# 目的

[先日始めてVue.jsに触れ](https://qiita.com/hamahamabe/items/465a8ac1a5f929e10fed)、フロントエンドについて少しだけわかったところで今回は引き続きAWSの学習の意味を込めて、**S3の静的ホスティング + CloudFrontで公開したページ(Vue.js)**と、

元記事を表示

データベースに関して(AWS)~備忘録~

### データベースに関して
データベースとは関連したデータの形式をそろえ、収集・整理し検索などの操作やデータ管理を実行するシステム。データを集めるだけでなくコントロールしたり制御したりする役割がある。このデータベースを実現したシステムをDBMSという。データベースはデータの追加・参照・更新・削除などのデータ操作を容易に実行するソフトウェアやデータモデルと一体になったものです。この追加・参照・更新・削除を総称してCRUDと呼び、このCRUDを実現するのがデータベースになります。データベースはデータベースを異状なく実行することが出来、データを安全に保護しつつ、保存・操作ができる仕組みを提供している。
データベースには大きく「リレーショナルデータベース」と「非リレーショナルデータベース」の2つに分けられる。非リレーショナルデータベースをNoSQL DBとも言い、リレーショナルデータ構造を持たないデータであるため、画像・音声・JSON・テキストなどが例としてあげられる。

・データベースとストレージの違い
データベースとストレージの違いは、ストレージはコンピューターの主要な構成要素の一つで

元記事を表示

AWS Workspacesをpythonで追加する。

リモートワークでAWSのworkspacesを使う企業が増えてきていますが、workspacesのユーザを作るのをコンソールからだと面倒ですよね?
あまりAPI経由でやったという記事がなかったので参考までにのせます。今回はpythonで実施していますが、AWS cliからでも簡単にできると思います。

# 前提
以下の作業が完了していること
– EC2の立ち上げ および python3,boto3のインストール
– Simple ADの作成
– WorkDocsの作成

#手順
1. EC2にRoleを付与
注意したいのはここでユーザを作るのはworkdocsを使用するみたいです。
workdocsとworkspacesの2つをroleに追加しましょう。
![role.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702821/44d02b12-b326-6980-c372-294d7ef24942.png)

1. ADにユーザを追加
pythonでADにユーザ追加します。1.で述べたようにw

元記事を表示

【AWS】「CloudWatch Logsを文字列検知してログ内容をメールを送信してみた」をやってみた

#はじめに
「[CloudWatch Logs を文字列検知してログ内容をメールを送信してみた](https://dev.classmethod.jp/articles/notification_cloudwatchlogs_subscriptoinfilter/)」について、キャプチャがなくて戸惑ったり一部やり方を変えて行ったので、備忘録として残したい。

#手順
##SNSトピックの作成
SNS>トピック>トピックの作成を選択する。名前と表示名(オプション)を入力する。
![スクリーンショット 2020-09-02 17.57.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449478/08552096-783f-739b-b29b-288abe998c02.png)
トピックの作成を選択する。
![スクリーンショット 2020-09-02 17.57.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44

元記事を表示

ウサギでもできるAWS Systems ManagerによるVSS Snapshotの取得

さて、前回の記事から半年くらい間が空いてしまいましたが、皆様いかがお過ごしでしょうか。
この半年間、ちょうどコロナ騒動で生活リズムに変化があった方も多いのではないでしょうか。
私も毎日出勤していた生活だったのが、すっかり在宅ワークに変わってしまい、ほとんど電車に乗ることが無くなってしまいました。
さらに、飲みに行くことも全く無くなり、ランチであちこちのお店を巡る楽しみもゼロになりました。
その代わりランチはほぼ毎日自宅で自炊しているため、60分間という割と短い時間内に手早く調理できて、如何に美味しいものを作れるか、など、食材を考えたりする機会が増えました。まぁこれまで一番多かったメニューはそうめんですが(笑)

他にも、通勤時間が無くなったため、スマホに入れたアニメを見る時間もゼロになったり、幼稚園バスの朝晩の送り迎えは妻から私の担当に、毎日も掃除機も私。その代わり妻は勤務日数と時間を増やしてパートから契約社員になったり・・・と、家庭内もいろいろな変化が出始めています。
と、近況はともかく。。。

今回は、今担当している案件で必要になるかもしれない技術を検証しておこうと思います。

元記事を表示

databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(後編)~

#はじめに
公式ドキュメントやってみたシリーズ第2弾です。
今回のテーマは
「Secure access to S3 buckets using instance profiles」です。
インスタンスプロファイルを使用してセキュアにS3バケットにアクセスする方法をdatabricks公式ドキュメントの手順に従ってやってみたいと思います。

#今回の作業内容
今回行う作業は以下の8項目です。

※0.ターゲットS3バケットの作成

1. S3バケットにアクセスするためのインスタンスプロファイルを作成

2. ターゲットのS3バケットのバケットポリシーの作成

3. databricks on AWSデプロイ時のIAMロールの確認

4. ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与

5. インスタンスプロファイルをdatabricksにアタッチ

6. インスタンスプロファイルを使用してクラスタを立ち上げる

7. ノートブックから今回設定したS3へのアクセスを確認する

作業自体がやや長いのと、
細かいロールやポリシーの設定があるため

– 前編(0~3)→

元記事を表示

databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~

#はじめに
公式ドキュメントやってみたシリーズ第2弾です。
今回のテーマは
「Secure access to S3 buckets using instance profiles」です。
インスタンスプロファイルを使用してセキュアにS3バケットにアクセスする方法をdatabricks公式ドキュメントの手順に従ってやってみたいと思います。

#今回の作業内容
今回行う作業は以下の8項目です。

※0.ターゲットS3バケットの作成

1. S3バケットにアクセスするためのインスタンスプロファイルを作成

2. ターゲットのS3バケットのバケットポリシーの作成

3. databricks on AWSデプロイ時のIAMロールの確認

4. ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与

5. インスタンスプロファイルをdatabricksにアタッチ

6. インスタンスプロファイルを使用してクラスタを立ち上げる

7. ノートブックから今回設定したS3へのアクセスを確認する

作業自体がやや長いのと、
細かいロールやポリシーの設定があるため

– 前編(0~4)

元記事を表示

AWS Glueジョブで変換後のファイルが複数出来る際に見るページ

# はじめに
AWS Glueジョブ実行後の結果を見ると、複数ファイルが出来てしまいました。
1つでいいんだが!と思い、1つにまとめる方法について調べました。

# repartitionをしよう
`DynamicFrame`でも`DataFrame`でも同じやり方でOKです。
どちらのクラスにも`repartition`という分割し直しをしてくれるメソッドがあ利、それを使うことで変換後のファイルもその数で出力してくれます。

自動生成したスクリプトを修正した例を載せておきます。

“` python
glueContext.create_dynamic_frame.from_catalog(database = “default”, table_name = “data_source”, transformation_ctx = “datasource0”).repartition(1)
“`

分割したい数は指定可能なので、もっと分割したいよということであれば数字部分を変更してください。

元記事を表示

AWS Glueジョブが毎回データ元を全部読み込むから重複データが出来まくりなのをやめたい

# はじめに
AWS Glue便利ですね!
Athenaのパーティション使いながら元データ加工してInsertが簡単に出来ちゃうので、ビックデータ扱うのには便利です。
でも、何も考えずに設定すると全ファイルを毎回読み込むため、ジョブを実行するたびにデータが重複していきます。

なので、前回までの処理を記憶して、新規ファイルだけジョブ実行してもらうための設定を記載します。

# 削除は出来なさそう。更新も出来ない
基本的にAthenaはInsertしか出来ません。
UpdateだったりDeleteだったりは出来ません。
Deleteはファイルだったり行消しちゃえばできるといえばできるので、正確ではない表現です。

# ジョブブックマークを設定するのです
ジョブ作成する際に`詳細プロパティ`内にある`ジョブブックマーク`を有効化するだけです。
こうすることで処理済みデータを記憶してくれるので、実行済みのデータは無視するようになります。

# 参考URL
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/monitor-continuation

元記事を表示

API Gateway HTTP APIのCloudMap統合でディスカバリー&ロードバランシング

API Gateway HTTP APIとCloudMapのプライベート統合についての記事が、あまり見つからなかったので書くことにした。

HTTP APIにはプライベート統合という機能があり、NLB/ALB/CloudMap経由でVPC内のサーバーにリクエストをお届けできる。
ELBのようにリクエストを仲介する形ではなく、CloudMapは振り分け先の選別に利用されるだけ。
[HTTP API のプライベート統合の使用 | Amazon API Gateway開発者ガイド](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/http-api-develop-integrations-private.html)

# 検証環境

検証環境は、ECS/Fargate環境にPHPで `$_SERVER` の内容を表示するだけのコンテナを3つ配置した。また、ECSのサービス検出を利用してCloudMapにFargateタスクの情報を登録する形にした。

HTTP APIのルートは3つ。

– `GET /`

元記事を表示

自分の所有するEBS Snapshotの一覧を取得する

# 解説
Custom AMIを作ったけど、AMIを削除した後にSnapshot消し忘れたなんて経験はありませんか? Snapshotにも定期的な棚卸しが必要です。

基本的にはec2.describeSnapshotsを呼ぶだけなのですが、そのまま実行するとPublicなsnapshotが大量に取得されて悲しい気分になります。
OwnerIdsとして実行中のAWS Account IDを設定すれば良いのですが、より簡単な方法として”self”,”amazon”という二つのキーワードも利用できます。

APIリファレンスにより引用

“`typescript
/**
* Scopes the results to snapshots with the specified owners. You can specify a combination of AWS account IDs, self, and amazon.
*/
OwnerIds?: OwnerStringList;
“`

# サンプルコード

“`typescript
async fu

元記事を表示

OTHERカテゴリの最新記事