AWS関連のことを調べてみた2022年02月19日

AWS関連のことを調べてみた2022年02月19日

ECSとStep Functionsで並列分散バッチ処理を行う 【CDK(TypeScript)版】

## はじめに

以下の記事で試したEventBridge、StepFunctions、ECS(Fargate)で構成されるバッチ処理と同等のものを、CDK(TypeScript)で記述・構築してみました。

https://qiita.com/ynstkt/items/c39abca73a02efaded1f

なお、アプリのDockerイメージをビルドしてECR登録する部分については、CI/CDパイプラインとして別途構築することになる想定のため、本記事の対象外とし、ECRのリポジトリ作成とDockerイメージ登録は既に済んでいる前提で記載しています。

## 準備

ちなみにCDK実行環境としてはdockerコンテナを使用しており、詳細は割愛しますが、node.jsの公式ベースイメージにTypeScriptとAWS CLIだけ追加インストールしたものになってます。

CDKプロジェクトを作成します。

“`bash
$ node –version
v16.13.2

$ tsc –version
4.5.5

$ cdk –version
2.9.0 (build a69

元記事を表示

Mangumを用いたFastAPI製APIのSAM Local実行方法 メモ

* Fast APIで作成したAPIをSAM Localで実行する方法についてメモする。

# Mangum

* ASGI(Asynchronous Server Gateway Interface)アプリをAWS Lambdaで動作させるためのアダプター
* FastAPIなどで実装したASGIアプリを、Lambda + API Gateway構成でサーバレスにWebアプリケーションとして動かす事が可能
* FastAPI利用者であれば、Lambda特有の文法を覚えずLambda利用をスモールスタートできる

## 手順

### 1.サンプルSAMプロジェクトを作成

“`shell
sam init
“`

※ランタイムはPython3.8を選択

* “template.yml`

* Hello World Exampleを利用する。
* 特に内容は変更しない。

* `requirements.txt`

“`
requests
mangum
uvicorn
fastapi
“`

※Mangum,FastAPIを利用する

元記事を表示

[AWS]CloudTrail攻略問題

# 問題
問1. CloudTrailはデフォルトで各種操作を記録している。その上で証跡を作成するメリットを以下から選択せよ。
a.90日以上データを保存できる
b.データイベントやInsightsイベントを設定できる
c.Cloudtrailから直接ログ情報をDLできる
d.S3に保存できる

問2. ログインイベントはどのリージョンの証跡に残されるか答えよ。

問3. ログインイベントなど特定のイベントに対してCloudWatchを使用せずに通知を鳴らす場合、必要となるサービスを2つ答えよ。

問4. S3上のデータ操作をイベントとして残したい場合に、証跡作成時にどのような設定が必要か答えよ。

問5. EventBridgeで各種イベントに対してアラートを発報したい場合、CloudTrail側で操作しなければいけないことを答えよ。

# 解答
問1. a.b.d
問2. バージニア北部(IAMなどのグローバルサービスに関するイベントはバージニア北部に記録される模様)
問3. EventBridge、SNS
問4. データイベントの有効化
問5. 証跡の作成(証跡無しではなぜか通知

元記事を表示

マルチフロントエンドのAmplifyの環境切り替え自動化とCI/CD(Expo+EAS Build)の設定

# 背景

– Amplifyで作られたWEBアプリケーションが既にある
– ExpoでiOS/Android版アプリの開発を始める
– アプリのリポジトリではAmplifyのBackendは編集しないが、Amplifyの認証くらいは使いたい
– [amplify-js](https://github.com/aws-amplify/amplify-js)には `aws-exports.js`だけあればよいので、そのファイルだけもらえるようなAmplifyの自動環境切り替えを実現したい
– フロントエンドのリポジトリでは `amplify/` フォルダを無視(.gitignoreしてエディタからも非表示)してしまいたい
– 自動化できた折りにはCI/CD(EAS Build)でも使いたい

# 参考

この辺りを参考にしていく

– [Team environments – Multiple frontends – AWS Amplify Docs](https://docs.amplify.aws/cli/teams/multi-frontend/)
– [Advanced

元記事を表示

pythonを利用したdynamoDBからのレコード取得(1MB以上のレコード数)

# はじめに
DynamoDBから大量にレコードを取得することに困ったので、備忘録

# 一度に取得できるデータ量について

一度に取得できるデータ量は1MBまでと決まっているので、それを超える量のデータは1度では取得しきれずに、複数回データを取得することが必要である。

## 複数回データを取得する方法

前回までのレコード取得でどこまでを取得しているかを引数に渡す必要がある。
全レコード取得できていないときには、responseに「LastEvaluatedKey」というキーを持っている。
そのキーを引数に入れて再度DBにアクセスすることで、続きからデータを取得することができる。
全件取得するためには、LastEvaluatedKeyが帰ってこなくなるまで、無限ループさせてやれば良い。

“`python
import boto3
from boto3.dynamodb.conditions import Key

dynamodb = boto3.resource(‘dynamodb’)
table = dynamodb.Table(‘TABLE_NAME’)

respon

元記事を表示

pythonを利用したdynamoDBの操作(GSI)

# はじめに
最初に設定したプライマリーキーでは、レコードの検索がうまく行かなかったので、GSIを使ってみた

# 目次
– GSIについて
– GSI利用時のDB探索の書き方

# GSIについて
パーティションキーやソートキーをプライマリーキー以外の組み合わせで追加することができるもの。
よくある例を出すと、IDをプライマリーキーとしておくと、IDでのみしか検索ができないが、GSIでパーティションキー、ソートキーをID以外のキーに貼っておくことで、ID以外のキーで検索することが可能となる。

# GSI利用時のDB探索の書き方
## GSIの貼り方
マネジメントコンソールで目的のテーブルを選択し、インデックスタブを開く。
インデックスの作成をクリックし、目的のキーをパーティションキー、ソートキーに設定する。
※注意点とし、パーティションキー、ソートキーに設定できるのは、文字列、数値、バイナリの3種類の型のみである。ブーリアンとかはNG。

## GSIを利用するpython書き方
GSIでデータを引くときには、引数にIndexNameを追加するだけでOK。
テーブルにpkというキ

元記事を表示

クロスリージョンのリードレプリカを作成に関するとある実験~Amazon Aurora~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/ad04a3cd-91cc-e381-19dd-450cc041d984.png)
※リードレプリカとリーダーインスタンスは同じです
※最初の画像はRDS(Aurora以外)の構成図であってAmazon Auroraの構成図ではありません。→ここでハマった

【まとめ】
– クロスリージョン系
・「クロスリージョンのリードレプリカの作成」で作成されたリードレプリカの正体はクラスターである(→一番気づくのに苦労した)
→ 要はクラスター内のリードレプリカやライターインスタンスがスタンドアロンに昇格するのは無理なのである。無理なのである!!!!
・リードレプリカ作成先のリージョンのクラスターは作成元のデータベースと同期される
・リードレプリカ作成先のリージョンのクラスターを昇格させると元のクラスターのデータベースと同期されなくなる
![image.png](https://qiita-image-store.s3.ap-northe

元記事を表示

pythonを利用したDynamoDBからのデータ取得(取得件数の制限)

# はじめに
dynamoDBから取得するレコード数の最大数を指定したかったので、調査した。

# レコード数制限のかけ方

queryなどの引数にLimitを追加するだけでOK。

“`python
import boto3
from boto3.dynamodb.conditions import Key

dynamodb = boto3.resource(‘dynamodb’)
table = dynamodb.Table(‘TABLE_NAME’)

# ここの引数にLimitを入れる
response = table.query(
        KeyConditionExpression = Key(‘pk’).eq(‘XXX’),
Limit = 3
)
“`

元記事を表示

【CloudFront】オリジンパスとパスルールがごっちゃになったのでメモ

# CloudFrontのオリジンパスとパスルールがごっちゃになったのでメモ

オリジンパスもパスルールも値としてパスを指定するので、
初見だとどっちがどっちかごっちゃになっちゃったので備忘録として

– 前提:
– `static`というバケット内に`photo1.jpg`というアクセスさせたい静的ファイルを配置
– URLの末尾が /* (デフォルト)の場合 : LBのオリジンに割り振りたい
– URLの末尾が /images/*の場合 : 静的ファイルを保存したS3バケットのオリジンに割り振りたい

# 正解
– パスルールを/images/*に設定して、オリジンパスは空白にする
– staticバケット内には`images`というフォルダを作成して、その中に`photo1.jpg`ファイルを配置する

# 以下勘違いによる失敗談

## オリジンパスがパスルールだと勘違いしていた

オリジンパスを設定したところでアクセス先オリジンを割り振りしてくれるわけではないのに、
パスルールと勘違いしてこっちだけ設定してたパターン

`images/*`のルールで`s3://s

元記事を表示

AWS Certified Data Analytics – Specialtyに合格したので勉強方法を書いておく

AWS Certified Data Analytics – Specialtyに合格したので、勉強方法を備忘として書いておきます。参考になれば幸いです。

職業:現在インフラエンジニア6年目でAWSをメインに設計構築をするようになって、2年くらい。
最近はもっぱらオンプレミスからAWSへの移行などのコンサルをやることが多いです。
AWSをやる前は、VMwareやWindows、Linuxなどいろいろやってましたが、
今では、AWSが得意!と言えるくらいになってます。

他のAWS関連の資格:
 ソリューションアーキテクトアソシエイト(SAA)(2018年取得)
 SysOpsアドミニストレータアソシエイト(SOA)(2019年取得)
 ソリューションアーキテクトプロフェッショナル(SAP)(2020年取得)
 セキュリティ – 専門知識(SCS)(2021年取得)
 デベロッパーアソシエイト(DVA)(2021年取得)
 クラウドプラクティショナー(CLF)(2021年取得)
 DevOpsプロフェッショナル (DOP)(2021年取得)
 データベース – 専門知識 (DBS) (

元記事を表示

プリンシパルがややこしい

## 勉強前イメージ

AWSアカウントってこと?IAMのやつ難しい・・・

## 調査

### IAMのプリンシパル とは

#### プリンシパル

アクションを実行する人、ユーザ、アプリケーションを指す

#### プリンシパル要素

リソースへのアクセスを許可または拒否するプリンシパル(↑でいうとアクションを実行する人、ユーザ等)を指定します。
リソースベースポリシーに記述します。
Webコンソールのロールから 信頼関係にて設定できます。

![1IAM Management Console – Google Chrome 2022-02-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/24d13ccf-c54d-a816-cd21-bdbebfa99f56.png)

ポリシーでは以下を指定できます。

– AWSアカウント・ルートユーザ
– IAMロール
– ロールセッション
– IAMユーザ
– フェデレーティッドユーザーセッション
– AWS のサービス
– すべての

元記事を表示

[AWS]今週の問題3週目

# 問題
問1. あなたはroute53で「hogehoge.com」ドメインを取得し、ACMでSSL証明書を発行した。この証明書をALBに設定することでインターネットからVPC内に来る通信に対して暗号化することができる。ではVPC内からVPC内への通信に対して暗号化さらにはどうすれば良いか答えよ。

問2. AWSはログイン後何時間で自動的にサインアウトされるか、またIAMロールのスイッチロールは最大何時間まだ認証情報が有効活か答えよ。

問3. アカウントAからアカウントBへAMIを共有したい。アカウントAのAMIを削除してもアカウントBに残す方法を答えよ。

問4. AMIの保存にいくら料金が答えよ。

問5. 以下の選択肢からルートテーブルの設定変更が必要なものを答えよ。
・インターフェイス型エンドポイント
・ゲートウェイ型エンドポイント
・NATゲートウェイ
・インターネットゲートウェイ

# 解答
問1. パブリックな通信と同じ証明書を利用すれば良い。証明書にはパブリックな通信かプライベートな通信かの情報は持っていない。

問2. 12時間後に自動的にサインアウトされる。ス

元記事を表示

AWSのお勉強(その1:EC2インスタンスの起動)

最近AWSを勉強しようと思い立ちました。

その自分用作業メモです。

今回は、AWS EC2 インスタンスの起動をやってみました。

##環境

Windows 10

##EC2インスタンスの起動

EC2のダッシュボード

リージョンはデフォで東京ですね。

[![Image from Gyazo](https://i.gyazo.com/87bfdd78dc312e80cee7ab1dbcd9b02a.png)](https://gyazo.com/87bfdd78dc312e80cee7ab1dbcd9b02a)

「インスタンス作成」ボタンからインスタンスの起動を始めます。
[![Image from Gyazo](https://i.gyazo.com/9c1d09a1c4b95223bd4ff7f273b46166.png)](https://gyazo.com/9c1d09a1c4b95223bd4ff7f273b46166)

### AMIの選択
まずはAMIを選択します。
AMIとは、Amazon Machine Image の略です。

Wiki によると

元記事を表示

CloudwatchのEC2自動復旧をlambdaで自動一括設定

Cloudwatchの機能を使ってEC2の自動復旧(オートリカバリー)を設定することができますが、管理しているEC2が増えてくるとアラーム設定自体がとても面倒で、かつ設定漏れのリスクも出てきます
そこで、EC2自動復旧の自動一括設定ができるようにします

#前提条件
+ 自動復旧がサポートされているEC2インスタンスタイプであること
[サポートされているEC2を確認](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/UsingAlarmActions.html)
+ Cloudwatch利用

#lambdaを使ってEC2のオートリカバリーを自動設定する
Cloudwatchで、EC2の「StatusCheckFailed_System」を検知し自動再起動する設定ができます
lambdaを使って、特定のタグを設定したEC2に対して、オートリカバリーのCloudwatchアラームを自動一括設定できるようにします

##まずは、lambdaを作成します
python 3.9でlambda関数を作成しました

`

元記事を表示

miHub で使用している技術を紹介します

# はじめに
みなさん、はじめまして。
MI-6株式会社でエンジニアリングマネージャーをしています [@_oliverSI](https://twitter.com/_oliverSI) です。MI-6株式会社では AI を用いて素材メーカーの研究開発を効率化する SaaS プロダクト「miHub」を開発しています。

初期のプロトタイプは2019年8月から開発を開始し、その後ユーザー数の増加もありインフラ刷新を経て現在の形に至っています。本記事では、miHub で使用している技術について、その選定経緯および変遷を紹介させていただきます。

# システム構成
まずざっくりとした現状のシステム構成ですが、以下のようになっています。フロントエンドと API サーバーは分離していて、SPAの構成となっております。開発スピードを優先して、モノリシックにした方が良いという意見もありましたが、プロダクトの方針として、使いやすさは重視したいということもあり、最終的に SPA の採用を決定しました。また、 API サーバーとは別に解析ワーカーを用意していて、時間のかかる解析処理を解析ワーカーで行うよ

元記事を表示

AWS セッションマネージャー アクセスユーザーとログインについて

sshではなくセッションマネージャー(ssm)でのログインに切り替えてしばらく経過。
もはや慣れたと思っていたら、突然思わぬ落とし穴があったので備忘録。

#ssmのログインユーザーは
デフォルトでssm-userというユーザーになっています。
このユーザーは実際はログインしている訳ではなく、シェルアクセスしているだけのようです。

ログイン直後の様子

“`shell
Starting session with SessionId: testuser-xxxxxxx
sh-4.2$
“`

https://dev.classmethod.jp/articles/mitigation-idea-for-session-manager/

なので`~/.bash_profile`に記載した内容なども実行されません。

使い勝手が悪い為、ec2-userで自動でログインするようにしたいです。
そのためには下記のような方法が考えられます。

① ssmコンソールのLinux shell profileに `sudo su – ec2-user`を追加する
![image.png](htt

元記事を表示

.NET 6.0とAlpineのバージョンアップで遭遇した問題二つ

# はじめに

.NET 6.0 のプログラムの修正が大体終わり、さて AWS の実行環境にデプロイしようかなというところで、2 つほどハマったのでメモしておきます。

| | 移行前 | 移行後 | 備考 |
| ———————————————————- | ————- | ———– | ——– |
| ベースイメージ | Alpine 3.11 | Alpine 3.14 | |
| .NET | .NET Core 3.1 | .NET 6.0 | |
| データベース
AW

元記事を表示

ControlTower⑩LogArchiveアカウント内バケットへのCloudWatchLogs集約

## ControlTower関連記事まとめ
[・ControlTower①マルチアカウント環境をセットアップする](https://qiita.com/tonkatsu_oishi/items/6890ecc24c3b3bf8ee32)
[・ControlTower②環境確認](https://qiita.com/tonkatsu_oishi/items/b6dc3d548461d21b440d)
[・ControlTower③SSOの確認・アカウントの追加・削除](https://qiita.com/tonkatsu_oishi/items/281ad127699115ff54c3)
[・ControlTower④ガードレールの設定](https://qiita.com/tonkatsu_oishi/items/4e7be29ffa6553322c65)
[・ControlTower⑤Auditアカウントに作成されるリソースについて](https://qiita.com/tonkatsu_oishi/private/82811c94ebdc6fe509f2)
[・ControlTo

元記事を表示

ControlTower⑨CloudWatchクロスアカウントダッシュボードの設定

## ControlTower関連記事まとめ
[・ControlTower①マルチアカウント環境をセットアップする](https://qiita.com/tonkatsu_oishi/items/6890ecc24c3b3bf8ee32)
[・ControlTower②環境確認](https://qiita.com/tonkatsu_oishi/items/b6dc3d548461d21b440d)
[・ControlTower③SSOの確認・アカウントの追加・削除](https://qiita.com/tonkatsu_oishi/items/281ad127699115ff54c3)
[・ControlTower④ガードレールの設定](https://qiita.com/tonkatsu_oishi/items/4e7be29ffa6553322c65)
[・ControlTower⑤Auditアカウントに作成されるリソースについて](https://qiita.com/tonkatsu_oishi/private/82811c94ebdc6fe509f2)
[・ControlTo

元記事を表示

ControlTower⑧GuardDutyの有効化

## ControlTower関連リンクまとめ
[・ControlTower①マルチアカウント環境をセットアップする](https://qiita.com/tonkatsu_oishi/items/6890ecc24c3b3bf8ee32)
[・ControlTower②環境確認](https://qiita.com/tonkatsu_oishi/items/b6dc3d548461d21b440d)
[・ControlTower③SSOの確認・アカウントの追加・削除](https://qiita.com/tonkatsu_oishi/items/281ad127699115ff54c3)
[・ControlTower④ガードレールの設定](https://qiita.com/tonkatsu_oishi/items/4e7be29ffa6553322c65)
[・ControlTower⑤Auditアカウントに作成されるリソースについて](https://qiita.com/tonkatsu_oishi/private/82811c94ebdc6fe509f2)
[・ControlT

元記事を表示

OTHERカテゴリの最新記事