- 1. AWS Sesstion Manager で Fargate に SSH 接続する
- 2. じっくり読みたい資料48選
- 3. 【Laravel】 ネストしたEagerLoadを書いてみる
- 4. Mac/Linuxのaliasでaws ssmによるパスワード管理を直感的にする
- 5. EKSにデプロイしたGitLabのバージョンを12から13にアップデートする
- 6. Netflixのパフォーマンスエンジニアも使っているsarコマンドについてまとめた
- 7. aws-sdkでSTSを利用してDynamoDBにputItemする時の注意点
- 8. Go言語でAWS SNSにメッセージを送信する
- 9. Lambda@EdgeのテストをJestで書く
- 10. Lambda x Amazon SNSで、AWSの請求額を毎日メールで通知する
- 11. AWS日記⑥ (SNS)
- 12. RDS オプショングループ
- 13. AWS Backupの設定およびBackupジョブ失敗時の通知設定方法
- 14. 【学習メモ】AWS(VPC)
- 15. Amazon CloudWatch Logsにログを保存するようなAWS Fargateクラスタを、Terraformで構築する
- 16. Terraform ECS/IAM作成手順まとめ
- 17. AWSを利用したサーバーレスWebAPI開発環境の構築
- 18. 最近話題のSPAをAWS Cloudfront+S3で構築する(設定項目の解説有)
- 19. データサイエンティストがPythonでシステム開発する前に読む記事
- 20. LightsailでIP接続元制限が管理コンソールからできるようになっていた
AWS Sesstion Manager で Fargate に SSH 接続する
# AWS Session Manager
AWS Session Manager は AWS Systems Manager の機能で、AWS CLI を経由して EC2 インスタンス、オンプレミスインスタンス、仮想マシン (VM) にログインできるようにしてるというものです。
IAMベースで認証するのでセキュリティーグループを神経質に設定してインバウンドポートを開いたり、パブリックIPアドレスを開放する必要がなくなるというメリットがあります。
また、ハイブリットアクティベーション機能を利用することで Fargate のようなマネージドインスタンスに SSM ログインしターミナルセッションを開くことができます。面倒な SSH 鍵の登録などは不要です。
# とはいえSSHしたいときもある
とはいえ、運用の都合でSSHしたいこともあります。ということで、AWS Sesstion Manager を経由してFargate コンテナへのSSH 接続を試してみました。
# Dockerコンテナの準備
まず大前提として Fargate に SSH するにはデプロイするコンテナに S
じっくり読みたい資料48選
日々情報をキャッチアップする中で、後でじっくり読みたいと思った記事や資料をまとめました。
詳細は各資料をご確認ください。# Index
1. [AWSに関するスキルアップ方法と一度は読むべきブログの紹介](https://dev.classmethod.jp/articles/aws-study-kaji/)
– [「Infrastructure as Codeに疲れたので、僕たちが本来やりたかったことを整理する」を1年掛けて整理した](https://medium.com/@shogomuranushi/infrastructure-as-code%E3%81%AB%E7%96%B2%E3%82%8C%E3%81%9F%E3%81%AE%E3%81%A7-%E5%83%95%E3%81%9F%E3%81%A1%E3%81%8C%E6%9C%AC%E6%9D%A5%E3%82%84%E3%82%8A%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8%E3%82%92%E6%95%B4%E7%90%86%E3%81%99%E
【Laravel】 ネストしたEagerLoadを書いてみる
# やりたいこと
以下のテーブル構成があったときに、
マンションテーブルの情報から郵便番号テーブルの住所名を取得したいときに、
ネストしたEagerLoadを使用することができたので、残します。マンションテーブル(apartments)
| 項目名 | カラム名 | 外部キー |
| —— | ———— | ——– |
| id | マンションID | |マンションの基本情報テーブル(apartment_infos)
| 項目名 | カラム名 | 外部キー |
| ———— | ———————— | ————————- |
| id | マンションの基本情報のID | |
| apartment_id | マンションテーブルのID | apartments.id
Mac/Linuxのaliasでaws ssmによるパスワード管理を直感的にする
公私共にお世話になっているSSMですが、都度コマンドは何だっけと苦労してたのでaliasにしました。
正確には、引数を使う必要があったので、aliasではなくfunctionとして実装しました。以下のように利用できます。“`bash
$ setssm TEST_KEY test_val #登録して
$ getssm TEST_KEY #参照する
test_val #出力
$ setssm TEST_KEY2 “test space日本語” #スペース、日本語の処理も可
$ echo HOGE$(getssm TEST_KEY2)FUGA #コマンド上で展開し変数としても扱える
HOGEtest space日本語FUGA
$ listssm | grep TEST #一覧の出力からgrepで検索し、TESTを含むキーと値を出力
TEST_KEY test_val
TEST_KEY2 test space日本語
“`実装は`~/.bash_profile`の終わりに以下を追加し、`source ~/.bash_profile`で更新するだけです。
“““bash:~/.
EKSにデプロイしたGitLabのバージョンを12から13にアップデートする
# はじめに
[GitLab 13.0.0](https://about.gitlab.com/releases/2020/05/22/gitlab-13-0-released/)が2020/05/22にリリースされました。
そこで今回はEKSにHelmでデプロイしたGitLab 12.3.5を13.0.0にバージョンアップデートする方法を説明します。まずはGitLab Helm Chartのアプリバージョンとのマッピングを見てみましょう。
詳細は[こちらのページ](https://docs.gitlab.com/charts/installation/version_mappings.html)にあります。| Chart Version | GitLab Version |
|:—————–|:——————|
| 2.3.7 | 12.3.5 |
| 2.6.9 (2系の最新) | 12.6.8 |
| 3
Netflixのパフォーマンスエンジニアも使っているsarコマンドについてまとめた
『BPF Performance Tools』の3章で出てきた、Netflixのperformance engineerがサーバログインしてから最初の60秒で確認する内容
基礎は変わらない
1. uptime
2. dmesg | tail
3. vmstat 1
4. mpstat -P ALL 1
5. pidstat 1
6. iostat -xz 1
7. free -m
8. sar -n DEV 1
9. sar -n TCP,ETCP 1
10. top— バルゴ (@go_vargo) January 9, 2020
上記Tweetで紹介されていた内で、`sar`コマンドに馴染みがなかったので少し調査してみました。
## sarコマンドとは
sar(System Activity Reporter)はLinuxのモニタリングツールの1つです。
メモリ、CPU使用率、ディスクIO、ネットワーク、ロードアベレージ等の統計情報を表示するコマンドで、sysstatパッケージに含まれています。
リアルタイムの統計情報だけでなく、過去の統計情報を表示することが可能で、
過去にさかのぼって情報を見ることができるため、障害対応時の原因調査に役立ちます。表示する統計情報の種類は、オプションで指定します。
## 基本的な使い方
### オプション
“`
sar […options]
“`[…options]に、どのリソースの情報を表示するか指定します。
オプションを指定しない場合、当日のリソース情報が取得されます。
情報取得間隔は、デフォルトは10分です。
aws-sdkでSTSを利用してDynamoDBにputItemする時の注意点
# はじめに
Lambdaを使って別アカウントのDynamoDBにputItemする際にハマったことをメモ。DynamoDBにputItemするのは初めてだったので、
事前に同一アカウントのDynamoDBにputItemをした。# やったこと
– Lambdaから同一アカウントのDynamoDBにputItem
– LambdaからSTSを使って別アカウントのDynamoDBにputItem# Lambdaから同一アカウントのDynamoDBにputItem
[AWS.DynamoDB](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property)クラスを使用
“`index.js
const AWS = require(‘aws-sdk’);exports.handler = async (event, context) => {
const dynamodb new AWS.DynamoDB()cons
Go言語でAWS SNSにメッセージを送信する
## 概要
Amazon Simple Notification Service(SNS)で、Go言語のSDKを使ってトピックに対してメッセージを送信します。## 環境
– Go : 1.14.3
– Mac OS X : 10.15.4
– AWS SDK for Go## シンプルな実装
“`go:シンプルなメッセージ送信
package mainimport (
“fmt”“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/sns”
)// TopicARNとRegionは環境に合わせます
const (
TopicARN = “arn:aws:sns:XXXXXXXXXXXXXXXXX”
AwsRegion = “XXXXXX”
)func main() {
// SNSクライアントの作成
mySession := session.Must(session.Ne
Lambda@EdgeのテストをJestで書く
# 概要
Lambda@Edge の単体テストを [Jest](https://jestjs.io/ja/) で書いたときのメモ。今回書いたのは Lambda@Edge だけど、Lambda でも基本的には同じはず。Jest はシンプルで良いですね。
# 導入方法
導入したいディレクトリを作成して、そこで以下のコマンドを入力していく。Jest の導入はすごく簡単。
* `npm init`
* npm を初期化する
* インタラクティブに設定項目を聞かれるので、お好みで設定
* `test command` だけ `jest` と入力する
* `npm install -D jest`
* jest をインストールする# テスト対象ファイル
今回テストするファイルはこちら。Lambda@Edge のリクエストオリジンで動作させるような処理。
“`javascript:main.js
“use strict”;exports.handler = (event, context, callback) => {
const reque
Lambda x Amazon SNSで、AWSの請求額を毎日メールで通知する
#はじめに
CloudWatchで請求アラートを設定する事はできますが、超心配性な自分としては、月初~前日までの請求額を毎日メールで確認しておきたい。
AWS Lambdaとwebhookを使ってSlackのチャンネルに通知する方法は多く見られましたが、メールで通知する方法は意外と多くなかったので、まとめてみました。# 概要
+ 請求額はCost Explorerから取得する。
※CloudWatchから取得する方法もありますが、[双方に差異があり正しい値はCost Explorerである](https://hacknote.jp/archives/44913/)という情報があったため、Cost Explorerを使う事にしました。
+ Lambda関数のランタイムはPython3.7とし、Python 向けのAWS SDK(Boto3)を利用する。
+ トリガを設定したLambda関数にて、月初~前日までの合計請求額とサービス毎の請求額を取得し、その内容を整形し、メッセージとしてAmazon SNSのトピックに発行する。
+ メッセージを受け取ったSNSトピックは、紐
AWS日記⑥ (SNS)
# はじめに
今回は Amazon SNS (Amazon Simple Notification Service) を利用して簡易な問い合わせページを作成します。# 準備
SNSのトピックを作成し、サブスクライブに問い合わせの受け取り先(メールアドレスなど)を設定します。
[Lambda , API Gatewayの準備をします。]
(https://qiita.com/tanaka_takurou/items/3f93295de6cff060ec09)[参考資料]
[Amazon SNS とは](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/welcome.html)
[チュートリアル: Amazon SNS トピックを作成する](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-tutorial-create-topic.html)
[「AWS SNS」の紹介](https://qiita.com/callibrie/items/4bcab29c17368f99f443
RDS オプショングループ
#オプショングループを使用する
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html> DB エンジンによっては、データとデータベースの管理を容易にしたり、データベースのセキュリティを強化したりするための、追加の機能が用意されている場合があります。Amazon RDS では、オプショングループを使用してこれらの機能を有効にして設定します。オプショングループには、特定の Amazon RDS DB インスタンスに使用できる機能 (オプション) を指定できます。オプションの設定では、そのオプションの動作を指定できます。DB インスタンスをオプショングループに関連付けると、指定したオプションとそれらの設定がその DB インスタンスに対して有効になります。
次のDBのオプショングループが使用可能
* MariaDB
* Microsoft SQL Server
* MySQL
* Oracle##オプショングループの概要
> Amazon RDS
AWS Backupの設定およびBackupジョブ失敗時の通知設定方法
# この記事は
今年の1月に[AWS Backupの機能がアップデートされ](https://aws.amazon.com/jp/about-aws/whats-new/2020/01/aws-backup-adds-support-amazon-elastic-cloud-compute-instance-backup/)、AMIも自動で取得できるようになりました。この記事ではタイトルにも記載されている通り、AWS Backupの設定およびBackupジョブ失敗時の通知設定方法を紹介します。
また、手順にも記載されておりますがBackupジョブの通知先としてSNSを設定する際、現状CLIを使った操作が必ず必要になるので注意してください。
# ①. Backupジョブ失敗時の通知先となるSNSトピックを作成
## ①-1. SNSトピックを作成
【学習メモ】AWS(VPC)##【VPC】ネットワーク構築
【基本手順】
1.ネットワーク(VPC)を構築
2.その環境で、サーバー(EC2など)を設置
3.必要なアプリを実装【ネットワーク構築の全体像】
**<目標成果物:WordPressでのシステム構築>**
1.インターネットからWebサーバーへ接続
2.Webサーバーに格納されているWordPressからDBサーバーのMySQLにデータを格納する【AWSのネットワークの概念】
リージョン:AWSのサービスが提供されている地域アベイラビリティゾーン:独立したデータセンター
※1つのリージョンに複数のアベイラビリティゾーンがあることで、1つのデータセンターが壊れても他のデータセンターが稼働できるVPC:AWS上に仮想ネットワークを作成するサービス
サブネット:VPCを細かく区切ったネットワーク
例:
「インターネットから見れるようにしたい」
「DBはネットから見れないようにしたい」
など用途によって分ける
→サブネットは、アベイラビリティゾーンの中に作成【IPアドレス】
<イメージ>
Amazon CloudWatch Logsにログを保存するようなAWS Fargateクラスタを、Terraformで構築する# What?
やりたいこと。
* AWS Fargateを使って、クラスタを作る
* コンテナのログは、Amazon CloudWatch Logsに送る
* 以上のことを、Terraformで実現するというのを書いていきます。
# 環境
利用するTerraformと、AWS Providerのバージョンです。
“`shell
$ terraform version
Terraform v0.12.25
+ provider.aws v2.63.0
“`# 構築する内容
まっさらなところから、VPCを作ってAWS Fargateクラスタを構築、簡単な動作確認を行うところまでやります。
* シングルAZ
* 動作させるコンテナはnginx
* ALBはHTTPTerraformでの実装内容は、すべて`main.tf`に書いています。
# TerraformとAWS Providerのバージョン指定
“`go
terraform {
required_version = “= 0.12.25”
}provider “aws” {
veTerraform ECS/IAM作成手順まとめ
#参考文献
– [Terraform – CentOS 7 に Terraform をインストールして AWS へ接続](https://qiita.com/anfangd/items/5eac63d77264e796ffb5)
– [Terraformインストール](https://qiita.com/moroishisan/items/35736e9a0332d0df9206)
– [AWS FargateとTerraformで最強&簡単なインフラ環境を目指す](https://qiita.com/tarumzu/items/2d7ed918f230fea957e8)
– [tfenvでTerraformのバージョン管理をする](https://qiita.com/kamatama_41/items/ba59a070d8389aab7694)
– [Terraform Workspacesの基礎と使い方について考えてみた!](https://dev.classmethod.jp/articles/how-to-use-terraform-workspace/)
– [Amazon
AWSを利用したサーバーレスWebAPI開発環境の構築
#概要
AWSを利用してシンプルなサーバーレスWebAPIを作成します:fist:
※大雑把に構築の流れだけ追っていくので、細かいことは都度調べてください:joy_cat:#目次
1. ローカルで仮想環境の構築(キーワード:pipenv)
1. 開発環境の構築(VSCode)
1. プログラムの作成(Flask)
1. IAMユーザーの作成(AWS)
1. ローカル環境をAWSにデプロイ(zappa)
1. おまけ
1. 参考サイト#ローカルで仮想環境の構築(pipenv)
pipenvを使用して仮想環境を構築します。:slight_smile: **環境変数に以下を追加します。**
仮想環境で使用するインタープリターや参照パッケージを、作業フォルダに入れる設定です。(.venv)PIPENV_VENV_IN_PROJECT = TRUE
:slight_smile: **pipenvをインストールします。**
コマンドラインで以下を実行します。“`
pip install pipenv
“`
バージョンが表示されればインストールできています。“`
p
最近話題のSPAをAWS Cloudfront+S3で構築する(設定項目の解説有)
# AWSでSPAの構築
久々にSPAの構築を実施しました。すんなりできると思っていたのですが、結構忘れていることが多かったのと、困ったところがたくさんあったので備忘録として記述しておきます。
なお、解説文を付け加えていますが、設定できれば良い人は画像を参照していけばできると思います。
## S3バケット作成
まずはweb用のS3のバケットを準備します。
![screenshot_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165191/212d2e68-89c3-e894-8b72-e19c4759272d.png)
「パブリックアクセスをブロック」にチェックを入れるのを忘れないでください。
ここのチェックを外すように書いてある記事が多いです。しかし、チェックを入れるとこのバケットに直接アクセスできてしまいます。
そうではなく、**Cloudfront経由のみ**でアクセスしてほしいのでチェックを入れないでください。## Cloudfrontの作成
英語で厳しいですが、順番に
データサイエンティストがPythonでシステム開発する前に読む記事
広告運用自動化関連のプロジェクトで、他部署のデータサイエンティストがアルゴリズムの開発担当として、私がシステム担当兼レビュワーとしてアサインされました。
ただまだ分析以上のプログラミング経験はあまり無いそうで、知らない単語が芋づる式に出てくる状態のようです。それぞれの考え方を教えようにも、このコロナ影響下ではホワイトボードも使えないし、zoomのミーティングの時間を取るのもお互い負担が大きかったので、まずQiitaで共有することにします。
同僚に間違ったことを教えていたら困るので、もし誤っている箇所やアドバイスがあればコメント頂けると嬉しいです。
# バッチプログラムの実行について
現在開発している広告運用自動化システムでは、[AWS Data Pipeline](https://aws.amazon.com/jp/datapipeline/)を使っておおよそ以下のような環境で動いています。
* 事前にソースコードをまとめてzipファイルにしてS3にアップロードしておく
* この処理はリポジトリのmasterブランチにpushしたときにCI/CDツールが動いて自動で行っ
LightsailでIP接続元制限が管理コンソールからできるようになっていた
タイトルのとおりです。
元々Lightsailでは、EC2のセキュリティグループみたいに管理コンソールからポートごとにIP制限をかけておく機能がありませんでしたが、最近設定を開くといつのまにかその機能が追加されていました。
これまでは仕方なくhosts.allow, hosts.denyに書いて制限かけたりしてましたが、地味に便利。# 設定方法
各インスタンスの 管理>ネットワーキングタブ>ファイアウォール
編集アイコンを押して「IPアドレスに制限する」にチェックを入れると設定欄が出現。
IP単体指定でもCIDR表記でもいけるようです。ただし、セキュリティグループみたいにエイリアス指定はできません。元々hosts.allowやhosts.de