Carpe Diem

備忘録

AWS

CloudFrontのキャッシュのTTLをフローチャートにした

背景 CloudFrontにはキャッシュのTTLの設定値が3つあり、 Minimum TTL Default TTL Maximum TTL かつオリジンのヘッダーによって挙動が変わります。 docs.aws.amazon.com 久々に触ると忘れてしまうのでフローチャートにしてすぐ理解できるようにします。

ECSとFargateでコンテナの起動順が制御できるようになりました

概要 先日AWSの発表で aws.amazon.com と、コンテナの依存関係が制御できると発表がありました。 何が嬉しいかというと、サイドカー系コンテナに依存している場合アプリケーション側でそのコンテナの起動を待つ処理が必要だったのが、不要になるという点です…

ALBのアクセスログをAthenaで分析

概要 AthenaでALBのアクセスログの分析が非常に簡単にできるので、設定方法とよく使うクエリを紹介します。 手順 ALBアクセスログをS3に保存 新規バケットを同時に作成する場合 バケットポリシーが自動で設定されるので楽なやり方です。 ELBの属性の編集でチ…

Assume Roleの用途・メリット

概要 sts:Assume Roleは第三者に自分のAWSアカウントのAPI権限を委譲する仕組みです。 ここで言う第三者というのは EC2/IAM/KinesisといったAWSサービス 他AWSアカウント Googleアカウント のように様々なモノに委譲が可能です。 sts:Assume Role どういう用…

CloudWatch LogsのログをS3へ【Kinesis Firehose編】

概要 前回 christina04.hatenablog.com にてCloudWatch Logsの過去ログをS3へエクスポートする方法を説明しました。 今回はリアルタイムにS3に転送する方法を紹介します。 手順 管理ポリシーではないIAMポリシーが何度も出てくるので、自動生成してくれるWeb…

CloudWatch LogsのログをS3へ【エクスポート編】

概要 CloudWatch LogsはAWSでは一番簡単に用意できる検索可能なログ基盤だと思います。 一方で 詳細な検索がしにくい(クエリやUI的に) ログが大量に増えると料金も嵩んでくる Terraformや操作ミス(保持期間の誤設定など)で間違って消してしまうリスク と…

TerraformでECSのService Discoveryを使う

概要 少し前にECSのサービスディスカバリが東京リージョンにも登場しました。 Amazon ECS Service Discovery がフランクフルト、ロンドン、東京、シドニー、シンガポールの各リージョンで利用可能に 今回Terraformでの使い方を説明します。 環境 Terraform v…

HashiCorp VaultでSSHをCA認証に

背景 AWSを運用しているとEC2のsshのキーペア管理が難しいです。 GCPであればメタデータにsshキーを登録すれば自動で各VMにsshできる仕組みがありますが、AWSは各インスタンスにsshのキーペアを1つだけ登録するようになっているため、複数人で運用するには…

TerraformでECSのawsvpcモードを使って各コンテナにPrivate IPを振る

概要 これまでは1インスタンス上に複数のコンテナを使うときは動的ポートマッピングのような方法で対応する必要がありました。 christina04.hatenablog.com しかしawsvpcモードが使えるようになったことでコンテナ毎にPrivateIPを振れるようになり、ポート…

C5/M5インスタンス用のAMIをpackerで作成する

概要 先日東京リージョンにもC5/M5インスタンスが対応されました。 コスト的にC4/M4より10~15%ほど安くなるため、可能であれば逐次移行した方が良いです。 ただC5/M5からは Elastic Network Adapter (ENA) 対応 NVMe対応のOSが必要 デバイス名の変更 といっ…

TerraformでNLBを使う

概要 先日新しいL4のロードバランサーであるNLBがAWSからリリースされました。 ALBはL7のロードバランサーであるため、これまでgRPCはCLBの方でしか利用できませんでしたが、これからはNLBを使うことで対応が可能です。 terraform-provider-awsの1.3.1から利…

IAMグループのポリシーの管理

概要 IAMグループのポリシーをちゃんと役割に分けて管理しようという話です。 方針 admin, developer, operatorの3つの役割で分け、各グループに適切な権限を与えるようにします。 ただし パスワード変更 MFAの設定 は各IAMユーザができるようにします。 付…

AWSのCost Explorerをスクレイピングして毎日の利用料金をslackへ通知

概要 使っていないインスタンスが起動しっぱなしだったせいで、AWSの利用料がいつの間にか大きくなっていたことがきっかけです。 一方毎日CostExplorerを見に行くのも手間が多いので、slackに通知するようにしたいと思い作ってみました。 また環境構築が面倒…

TerraformでECSを動的ポートマッピングに

概要 以前ECSの記事を幾つか書きましたが、 TerraformでECS環境の構築 - Carpe Diem TerraformでECS環境の構築【オートスケール編】 - Carpe Diem 当時のECSは1インスタンス1コンテナにしないとポートが競合して同じ種類のコンテナを載せることはできませ…

ECSのオートスケール戦略

概要 ECSはコンテナのスケールアウトとインスタンスのスケールアウトのタイミングが重要です。 よく起きる問題としては インスタンスのスケールアウトが遅くてコンテナのスケールアウトも遅くなってしまう しきい値が不適切でインスタンスがスケールアウトせ…

CloudFrontのキャッシュでハマった話

概要 ブラウザのキャッシュ - Carpe Diem を検証している時に期待した挙動をしなくてハマったので、CloudFrontのキャッシュの動作と注意点をまとめます。 CloudFrontのキャッシュ動作 レスポンスヘッダのx-cacheを見ると以下の3つに区別できます。 x-cache …

SPAを S3+CloudFront で表示する方法

概要 AngularなどのSPAをS3+CloudFrontで表示する方法についてです。 要件 SSL/TLSを使いたい https://example.com/hoge のようなサブディレクトリのようなパスで403にならないようにしたい ↑のようなパスでもOGPがきちんと表示される リロードしても404にな…

S3 + CloudFrontにした時にハマったこと

概要 静的Webサイトを用意して、HTTPSでアクセスできるようCloudFrontを前に用意したのですがそこでハマったことをまとめます。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 問題 SSL証明書を設定したのにERR_SSL_VERSION_OR_CIPHER_MISMATCHというエラーがでてペー…

うるう秒対応

概要 2017/01/01 09:00:00(JST)にうるう秒が挿入されますが、ちゃんと問題点や対応方法を理解してなかったのでまとめ。 前提知識 うるう秒発生でどうなるか ntpを入れているか、tzdataが更新されているかによって動作が異なります。 JST ntp(stepモード) tzd…

Packerでソースに使う公式AMIの場所

概要 Packerでsource_amiとして使用する公式のAMIが探しにくいので、利用するものだけまとめました。 Ubuntu Ubuntu Amazon EC2 AMI Finder こちらで検索します。Searchのところに16.04などバージョンを入れれば出てきます。 その中でInstance Typeがややこ…

ECSでコンテナのrolling update

概要 ECS上のコンテナをダウンタイム0で更新(デプロイ)する方法をまとめます。 環境 ALB ECS container agent 1.13.0 Docker 1.11.2 Amazon ECS Container Agent Versions - Amazon EC2 Container Service ポイント minimumHealthyPercentとmaximumPercen…

TerraformでECS環境の構築【オートスケール編】

概要 TerraformでECS環境の構築 - Carpe Diemでは書いてなかったオートスケールについてです。 terraform 0.7からServiceでのオートスケールにも対応したので、それを使って構築します。 環境 Ubuntu 14.04 Terraform 0.7.3 実装 完成形はこちら github.com

TerraformでECS環境の構築

概要 ECSというコンテナのクラスタ環境構築のサービスをTerraformで作成してみます。 簡単のため、以下の設定はこのコードには含んでいません。 EC2インスタンスのオートスケール用のアラーム設定なし ECSのコンテナのオートスケールはなし(Terraform未対応…

ELB+nginxでbasic認証をかける方法

概要 開発環境では外部に見られないようにbasic認証をかけることが良くあります。 一方でELBのHealthCheckはbasic認証がかかったパスだと401エラーが返り、そのままだとOutOfServiceとなって接続することができません。 今回はそんな時の対応方法です。Nginx…

TerraformでAutoScaling環境の構築

概要 Terraformを使ってAutoScaling環境を構築します。 以下の状態をゴールとします デフォルト1台 CPUが30%超えたら1台増やす CPUが5%以下なら1台減らす 環境 Terraform 0.6.9 Terraform設定 セキュリティグループなどはTerraformでAWSのセキュアな構成…

TerraformでAWSのセキュアな構成を構築

概要 PublicSubnetとPrivateSubnetを切り分けてよりセキュアに構築する方法。 PrivateSubnetのインスタンスにSSHアクセスする場合は別途VPNを立てる形になると思いますが、今回は割愛させていただきます。 環境 Terraform 0.6.3 構成図とネットワークフロー …

Terraformでtarget指定の削除

概要 Terraformでインスタンスなどを削除する際、普段xxx.tfファイルの該当箇所削除してterraform applyで消してたんですが、あるとき消す順番の指定が必要になって「仕方ないから2回(消す順に)実行するかー」と思ってtarget指定したのですが、何故かterr…

Terraform で ELB の設定とインスタンス作成

概要 前回の続きです。ここまで来たら小規模ながらきちんとしたAWS構成を作れます。 環境 Ubuntu 14.04 Terraform 0.6.2 前提 Terraform でセキュリティグループを管理でVPC、サブネット、セキュリティグループの設定が済んでいる状態。 フォルダ構成 ├── co…

Terraform でセキュリティグループを管理

概要 セキュリティグループはAWS標準のファイアウォール機能です。 作成したセキュリティグループをEC2インスタンスやELBに設定することで反映されます。 今回はTerraformでそれを作成し、EC2に結びつけてみます。 環境 Ubuntu 14.04 Terraform 0.5.2 前提 T…

Packer で AWS の AMI を作成する

概要 AWSのAMIをPackerから作ります。基本的にAnsibleで使用するパッケージをインストールします。 簡単のためNginxだけインストールしたAMIを作ります。 Packerのインストールは「Packer で Virtualbox 用の VagrantBox を作成する」を参考にしてください。…