- 1. GithubActions + LocalStack = AWS使うシステムのCI
- 2. Lambda で CloudWatch Logs のログを自動で S3 にアーカイブする、をちょこっと便利にした。
- 3. AWS Step Functions で簡易的なジョブ管理ステートマシンを作成してみる
- 4. Redshift Serverlessにタグ付けする
- 5. CloudFormationでポリシーを作成するとパラメータの末尾に:rootがついてしまう
- 6. AWSを用いたスケーラブルウェブサイトの構築
- 7. AWS License Manager とは
- 8. AWSにEC2(Ubuntu 22.04)を立ててJanusを使おう
- 9. EC2/RDS/Aurora自動起動・停止機能の作成方法(EventBridge+SystemsManagerの自作ランブック)
- 10. Pipenvの仮想環境内でChaliceを使用する際に遭遇した依存関係エラー
- 11. AWS(S3) Pre-signed URLで期限切れ(403 Request has expired)にハマった話
- 12. ソリューションアーキテクト対策_Route53篇
- 13. ソリューションアーキテクト対策_あまり馴染みの無いサービス篇
- 14. LambdaでSecretsManagerからシークレット情報を取得してみた
- 15. ソリューションアーキテクト対策_EBS篇
- 16. ソリューションアーキテクト対策_DB篇
- 17. Node.jsランタイムのLambdaでNodeモジュールを使いたいときにやったこと
- 18. 【AWS】【DMS】AWS CLIで DMS のテーブル統計をCSVで出力する方法
- 19. S3のファイルをcatみたいに標準出力する方法
- 20. CloudWatch Logs のログ調査がはかどる便利な方法
GithubActions + LocalStack = AWS使うシステムのCI
# この記事は?
[Github Actions](https://github.co.jp/features/actions)と[LocalStack](https://localstack.cloud/)を使って、インフラにAWSを利用しているシステムのCI環境を構築した時のメモ– **Github Actions**
– Githubにpushしたりmergeしたりしたら自動であれこれやらせたいときに使う機能
– masterのコードを取ってきてDockerコンテナ内でビルド&AWSへデプロイ等ができる
– Privateリポジトリかつフリープランなら月2,000分まで無料、Publicなら完全無料
– **LocalStack**
– Dockerコンテナ内に仮想のAWS環境を作れるツール
– 今回はGithub Actionsでこのコンテナにデプロイして統合テストを実行してみるLocalStack公式のドキュメントは↓
https://docs.localstack.cloud/ci/github-actions/
サンプルコードは↓
htt
Lambda で CloudWatch Logs のログを自動で S3 にアーカイブする、をちょこっと便利にした。
AWSで各種クラウドサービスのログを、CloudWatch Logで保管することができます。CloudWatch Logではログの保管日数を指定することができます。手動であればS3へログをエクスポートすることもできます。S3も保管したデータの保管日数を指定することができます。
となると、以下のような処理を自動で実装したいもの。
・各種ログをCloudWatch Logに保管する。
・ある程度の日数が経過したら、S3にログをアーカイブする。古いログはCloudWatch Logから自動削除。
・必要なだけS3で長期保管する。必要な保管期間を過ぎたログは、S3からも自動削除。しかし定期的に自動でS3へログをエクスポートする機能はありません。何度もググりましたが、皆さん同じ悩みをお持ちです(笑)
という事で、「CloudWatch Log」「S3」「エクスポート」「自動」といった用語でググれば、Lambdaで実装されている事例・記事が多く見つかります。本当に助かります。
# 【参考】
私がお世話になった記事です。https://qiita.com/tamura_CD/items
AWS Step Functions で簡易的なジョブ管理ステートマシンを作成してみる
AWS で簡易的なジョブ管理をしてみよう、という試みです。
# 概要
AWS 上でジョブ管理するにはどうしたら良い?という話がありましたので、自分なりに少し考えてみました。普通に考えれば、例えば以下のようになるかとおもいます。
* Cloud Watch Events、場合によっては Event Bridge を使ってジョブを起動する
* ジョブの流れは Step Functions で様々なフロー制御を組み込んで作成
* Step Functions から Lambda 関数、ECS RunTask、AWS Batch などを順次呼び出す
* ログは Cloud Watch Logs に格納
* 問題発生時には SNS から SES や Slack 連携などでアラートを発報するただですね、今回は以下のような制約をつけて考えてみました。
* 数人の小さなチームで、スケジュールがかなり厳しい中で開発する必要がある
* AWS に詳しいのは自分だけで、他のメンバーはこれから学ぶ必要があるこういった状態ですと、いまから AWS を学んでもらうのは効率が悪いです。期間も短いこと
Redshift Serverlessにタグ付けする
2022年9月現在、Redshift ServerlessにはAWS CLIを使用してのみタグを付与できる。
## 事前準備
AWS CLIを最新バージョンにする。
※`redshift-serverless`はCLIのバージョンが古いと使えない。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html## タグを付与できるリソース
* 名前空間
* ワークグループ## コマンド
タグ関連で使用可能なオペレーションは以下の3つ* TagResource(タグを付与する)
“`
aws redshift-serverless tag-resource –resource-arn 【名前空間 or ワークグループのarn】 –tags key=”Name”,value=”test”
“`* UntagResource(タグを削除する)
“`
aws redshift-serverless untag-resource –resource-arn 【名
CloudFormationでポリシーを作成するとパラメータの末尾に:rootがついてしまう
# はじめに
久しぶりにCloudFormationを使ってIaCに挑戦していたところ、作成したいリソース通りにならないという問題が発生したためまとめます
おそらく他の記事にもなかったため、つまずくと時間がかかるかと思いますので誰かの役に立てば嬉しいです
# 問題
S3のポリシーをCloudFormationで以下のように作成しました
“`yml:s3.yml
S3BucketPolicy:
Type: “AWS::S3::BucketPolicy”
Properties:
Bucket:
Ref: S3Bucket
PolicyDocument:
Statement:
– Action:
– “s3:ListBucket”
Effect: “Allow”
Resource:
Fn::Sub: “arn:aws:s3:::${BucketName}”
P
AWSを用いたスケーラブルウェブサイトの構築
## 目標
WordPressを具体例に,
* Amazon EC2
* Amazon Virtual Private Cloud (VPC)
* Amazon Relational Database Service (RDS)
* Elastic Load Balancing (ELB)を利用し,**スケーラブルなWebシステム**の構築を行う.
![](https://i.imgur.com/ImwIaEb.jpg)*今回は構築が目的であるため,各用語の説明は割愛する.
*マネージメントコンソールは2022/09/16時点のもの.## 流れ
1. Amazon VPCの作成
2. Amazon EC2の作成
3. Amazon RDSの作成
4. ELBの作成
5. WordPress初期設定
6. AMIの作成
7. 作成したAMIから2つ目のEC2インスタンス作成
8. 2つ目のEC2インスタンスをELBに登録
9. EC2(Web)とRDS(DB)のマルチAZ化## 1 Amazon VPCの作成
![](https://i.imgur.com/0HQ
AWS License Manager とは
## 勉強前イメージ
ライセンス管理するやつ?
でもどんな?## 調査
### AWS License Manager とは
ソフトウェアライセンスを管理するサービスで、ライセンスを管理することでライセンス違反を防ぐことができます。
MicrosoftやOracle、IBMなど提供するソフトウェアのライセンスをAWSとオンプレを一元管理することができます。ソフトウェアを利用する際はライセンスに則った方法で使用する必要がありますが
いろんなソフトウェアを利用していると管理が難しくなったりすることがあり、ライセンス違反を行ってしまうと思わぬ損害が発生する可能性があります。
その時に AWS License Manager を利用することで一元管理を行いライセンス違反を防ぎます。
また使用していないライセンス等あれば移行する際に減らしたりしてコスト削減にもなります。また、License Manager自体の利用には費用はかかりません。
## 勉強後イメージ
なんとなく思うようなライセンスだった。
ただ、自分で設定した○○アプリケーションのライセンスも自由に設定できると思
AWSにEC2(Ubuntu 22.04)を立ててJanusを使おう
### EC2の準備
EC2を起動する画面で、AMIにUbuntuを選択。
![スクリーンショット 2022-09-15 13.58.34.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362251/63e79b2d-c782-664a-80f6-f83be16fd4c6.jpeg)ネットワーク設定ではSSH接続できるように「パブリックIPの自動割り当て」を有効化しておく。
git cloneや通話をするために使うのでセキュリティグループのインバウンドルールでHTTPSやHTTPも適宜許可しておく。
またJanusで通話をする際はセキュリティグループのインバウンドルールでポート8088を開放しておく。SSH接続用にキーペアを作るのもお忘れなく。
無事にインスタンスが起動したらSSHで接続する。
—
### パッケージをインストールする前の下準備
“`
$ sudo apt update
“`### 必要なパッケージをインストール
“`
$ sudo apt install li
EC2/RDS/Aurora自動起動・停止機能の作成方法(EventBridge+SystemsManagerの自作ランブック)
# はじめに
**【背景】**
コスト削減の為、検証環境にて平日夜間・休日中、
EC2/RDS/Auroraを自動で起動・停止する仕組みを作りました。**【利用サービス】**
・SystemsManager(自作ランブック)
各種運用作業を自動化できるサービスです。
ランブックとは、運用作業の内容をYAML又はJSONで記述したものになります。
今回はAWS側で提供している各種起動・停止のランブックを呼び出す形で自作します。
[ご参考:ランブックについて](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-documents.html)・EventBridge
AWSで発生するイベントを検知、又はスケジューリング機能を使用することで、
様々なAWSサービスの実行トリガーとなるようなサービスです。
今回はスケジューリング機能を使用して、定刻になったら自作ランブックを実行します。**【その他考慮事項】**
・起動時
RDS/Auroraの起動後にEC2を起動
Pipenvの仮想環境内でChaliceを使用する際に遭遇した依存関係エラー
# はじめに
今回、Chaliceで開発している他のメンバーからPipfileをもらい、自身のローカルで同様の環境を作成して、Chaliceでデプロイするにあたりエラーに遭遇したため、その解決についてまとめます。# 説明しないこと
使用するリポジトリの内容# 環境
– macOS Monterey 12.3
– AWS認証情報(アクセスキーとシークレットキー)は、ローカルに設定済み
– インストール済み
– Chalice 1.23
– Python 3.8# Pipenvについて
Pipenvは、仮想環境の管理と、Pipのようなパッケージ管理の機能を持ちます。PipfileとPipfile.lockを利用することにより、パッケージ管理を行うことができます。
– Pipfile:要求されたパッケージの一覧などが記録されるファイル
– Pipfile.lock:実際にインストールされるパッケージの依存関係などが記録されるファイルnpmでいうところの`package.json`、`package-lock.json`と似てますね
`pipenv insta
AWS(S3) Pre-signed URLで期限切れ(403 Request has expired)にハマった話
# 期限内にアクセスしているが、データのアップロード中に期限切れになってしまって困った話です。
手順
1.Pre-signed URL生成
2.データのアップロード開始 ※クライアント側
3.データの送信中…
4.データのアップロード完了
5.期限切れ(403 Request has expired)発生データ送信に時間が掛かって期限が切れてしまって、エラーになったという話です。
データのアップロード開始は期限内に行っているので、リクエストタイムアウトでない限り成功して欲しい。# 結論
HTTPリクエストヘッダに**Expect: 100-continue**を入れれば良い。
これにより通信が2度行われ、最初のタイムスタンプで期限切れの認証が行われるので問題が無くなる。改善後の手順
1.Pre-signed URL生成
2.データのアップロード開始準備(Expect: 100-continue) ※クライアント側
3.サーバーから100 Continue応答 **ここの時間がPre-signed URLの期限判定に使われる**
4.データのアップロード開始 ※クライ
ソリューションアーキテクト対策_Route53篇
## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:## Route53
### エイリアスレコードとは
エイリアスレコードはAWS内(Zone)でのみ使えるAレコード。
CNAMEとほぼ同等の動きをするが、エイリアスの方がAWSのサービスと親和性が高かったりするのでメリットが多い。
以下が詳しいので読むべし。
https://dev.classmethod.jp/articles/amazon-route-53-alias-records/エイリアスレコードを使うと、AWSサービス(CloudFrontやELB、S3バケットやElastic Beanstalk環境)との紐付けができるようになる。
よってDNSクエリにAWSサービスのエンドポイントのIPアドレスを返答することで、AWSリソースにドメインを設定できる### Route53のルーティングポリシーあれこれ
#### 1.シンプルルーティング
1つのレコードに対し、1つのIPアドレスを返すようにルーティングするポリシー。一般的な
ソリューションアーキテクト対策_あまり馴染みの無いサービス篇
## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:## Amazon Polly
文章をリアルな音声に変換するサービス。
発話できるアプリケーションを作成できる。## Amazon SageMaker
すべての開発者とデータサイエンティストに機械学習モデルを迅速に構築・トレーニング・デプロイできる手段を提供する。
また、フルマネージドサービスであり、機械学習ワークフロー全体に対応している。## Amazon Lex
音声やテキストを使用して、任意のアプリケーションに対話型インターフェイスを構築するサービス。
音声のテキスト変換には自動音声認識(ASR)、テキストの意図認識には自然言語理解(NLU)という高度な深層学習機能が使用できるため、リアルな会話を実現するアプリケーションを開発できる。## Amazon Rekognition
画像分析と動画分析をアプリケーションに簡単に追加できるサービス。
Rekognition APIに画像または動画を与えるだけで、このサービスが対象物・人・
LambdaでSecretsManagerからシークレット情報を取得してみた
# はじめに
Githubから流出したソースコードに認証情報が含まれていて
問題になったというセキュリティーインシデントを見かけることがあります。
ソースコード内には認証情報をベタ書きせずに扱う事が大切です。Lambdaで認証情報を参照したい時のベストプラクティスとして
SecretsManagerから値を取得する方法があります。
ハンズオンとして行ってみたので記事に残したいと思います。# 環境
Lambdaのランタイム:Python3.9# SecretsManagerでシークレット情報を作成する
SecretsManagerでは目的に応じたシークレット情報の作成が可能です。
今回は汎用的に使用できるように「その他のシークレットタイプ」でユーザー名とパスワードを作成しました。![スクリーンショット 2022-09-15 20.31.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2242298/799c0ed3-2f56-be8c-a09d-8462878114e9.png)
ソリューションアーキテクト対策_EBS篇
## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:## EBS
### EBSとは
ネットワークで接続されたブロックレベルのストレージで、EC2とは独立無縁。
EC2をTerminatedしてもデータは保持される。スナップショットも取れる。S3に保存もできる。有料。
→DeleteOnTermination属性ていうのがある。デフォルトだとONで、EC2インスタンス削除とともにEBSも削除される。★### EBSについて知らなかったこと
同じAZ内のEC2にしかアタッチできない。AZをまたがるのは不可能。
また、EBSボリュームを作成すると同じAZ内でのみ自動的に複製される。別のリージョンには複製されない。他サービスのインスタンス同様、ボリュームサイズやボリュームタイプの変更が可能である。
### インスタンスストアとEBSの違い
・インスタンスストア
一時的にアタッチされるストレージのこと。
インスタンスの停止・終了・ハードウェア障害によって永続化されないため、データは消える。
ただ
ソリューションアーキテクト対策_DB篇
## 1.はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:## 2.Redshift
### Redshiftとは
リレーショナルデータベース型のデータウェアハウス。
並列処理ができるのでパフォーマンスが高い。### Redshiftの概要
Redshiftデータウェアハウスは、ノードと呼ばれるコンピューティングリソースの集合で、クラスターと呼ばれるグループに編成されている。
で、各クラスターはAmazon Redshiftエンジンを実行し、1つ以上のデータベースを含む。### Redshiftクラスターの費用対効果について
Redshiftはスナップショット用に無料ストレージを提供しているが、上限を超えると課金が発生する。
なので不要なスナップショットを消したりするサイクルが必要。### RedshiftのWLM(Work Load Management)
Redshiftのクエリ処理に対して、割り当てるRedshiftのリソースを指定する機能。
クエリ処理をキューとして実行順
Node.jsランタイムのLambdaでNodeモジュールを使いたいときにやったこと
## はじめに
こんにちは。フリューでサーバサイド開発をしています、kitajimaです。最近CDKに入門しました。
弊チームでは先日、API Gateway + Lambdaの構成をCDKで構築し、APIを実装する機会がありました。その際Node.jsで書いたLambdaスクリプト単体をアップロードしたところ、`”Unable to import module”`が発生しました。
この記事ではその際対応したことを紹介させていただこうと思います。
同じようにNode.jsランタイムのLambdaを初めて構築してみたい方の参考になれば幸いです。※本記事と同様の内容を弊社テックブログでも掲載しております。
https://tech.furyu.jp/lambda-node-modules/## 環境
– AWS CDK v2
– CDK実装 TypeScript
– Lambdaランタイム Node.js 16.x
– Lambdaスクリプト実装 TypeScript## 状況再現
そのときのインフラ構成の一部を再現したものはこちらです。Constructは`aws_lam
【AWS】【DMS】AWS CLIで DMS のテーブル統計をCSVで出力する方法
# TL;DR
* パイプで`jq -r ‘(.TableStatistics[0]|to_entries|map(.key)),(.TableStatistics[]|[.[]])|@csv’`とすればOK
“`bash
aws dms describe-table-statistics –replication-task-arn arn:aws:dms:hogehoge –output json | jq -r ‘(.TableStatistics[0]|to_entries|map(.key)),(.TableStatistics[]|[.[]])|@csv’
“SchemaName”,”TableName”,”Inserts”,”Deletes”,”Updates”,”Ddls”,”FullLoadRows”,”FullLoadCondtnlChkFailedRows”,”FullLoadErrorRows”,”FullLoadStartTime”,”FullLoadEndTime”,”FullLoadReloaded”,”LastUpdateTime”,”Table
S3のファイルをcatみたいに標準出力する方法
# やりたいこと
S3にあるファイルをダウンロードしないでちょっと見たいです。
`cat`コマンドでローカルのファイルを見る感じで、気軽に見たいです。# cp + 「-」で標準出力にファイルの内容を出力できた
“`zsh:S3のファイルをcatみたいに標準出力する方法
$ aws s3 cp s3://{バケット}/{ファイルパス} –
“`標準出力する方法が、ちゃんとAWSのサイトに書いてありました。
> s3 cp コマンドは、次の構文を使用して stdout 用の Amazon S3 ファイルストリームをダウンロードします。
> [Syntax] (構文)
> `$ aws s3 cp[–options] -`
> [AWS CLI での高レベル (S3) コマンドの使用 – AWS Command Line Interface](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-mana
CloudWatch Logs のログ調査がはかどる便利な方法
CloudWatch Logs でログデータの調査を行う際に**特定の文言を検索**したくて、ついつい、ブラウザの検索機能(Ctrl + Fキー)を使ってしまう事って割とやってしまうのですが、
**CloudWatch Logs Insights** を使えば、もっと便利に特定の文言を検索することができるので、ここにまとめておきたいと思います。## CloudWatch Logs Insights とは何か?
CloudWatch Logs のログデータを検索や分析できるようになります。
[CloudWatch Logs Insights を使用したログデータの分析 – Amazon CloudWatch Logs](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)## 使い方
使い方はとてもシンプルです。
CloudWatch のメニューにある「ログ」→「ログのインサイト」をクリックします。
![image.png](https://qiita-ima