ECS Fargate のメトリクスを Grafana の画面で確認している様子

📔 ECS Fargate のメトリクスを Prometheus Agent 使って AMP に送って Grafana で監視する

はじめに この記事は AWS Advent Calendar 2021 の 5 日目の記事です。 Fargate で Node.js アプリのメトリクスを Prometheus Agent をサイドカーコンテナとして動かして、Amazon Managed Service for Prometheus (AMP) に送信して Grafana で見られるようにしてみました。 ちなみに Promethus Agent はまだ 実験的な機能 なため、実務での利用は推奨しません。 本記事の環境構築には AWS CDK を利用しています。 動作環境 Node.js v16.13.0 AWS CDK 2.0.0 (build 4b6ce31) Prometheus 2.32.1 環境構築 早速環境構築を進めていきます。まだ AMP については CDK から操作できないようでしたので、ワークスペースの作成については AWS コンソールから手動で行います。(2021/12/06) aws-aps を利用することで AWS CDK からでも Amazon Managed Service for Prometheus のワークスペースを作成すること確認できましたので、そちらの利用を推奨いたします… 🙇🙇 lib/prometheus-agent-test-stack.ts のコードも修正済みで AWS CDK で Amazon Managed Service for Prometheus のワークスペースを作成するように編集しました。(2021/12/18 追記)...

December 5, 2021 · 6 分 · Me

📔 AWS Lightsail Containers に Actix web をデプロイする

はじめに Actix web で Web アプリケーションを作ったのですが、技術勉強も兼ねていたので、デプロイ先も今まで試したことがないものを試そうとしていました。そこで、日頃業務でも AWS を利用しているということもあり、去年末に発表された AWS Lightsail Containers をデプロイ先に採用しました。 AWS Lightsail Containers へのデプロイ自体は非常に簡単でした。また、デプロイにあたり Rust の Docker イメージ作成のやり方も学べました。今回はそのあたりの手順をまとめる形で記事として書き残しておくことにしました。 Actix web の Docker イメージを作成する 開発したアプリケーションでは React でフロントエンド開発をしていて、ビルドしたものを Actix web の public フォルダに配置する形で公開しています。そのため、下記の Dockerfile ではマルチステージビルドを利用しておりますが、本質的には FROM rust:1.49 以降の記述が Actix web に関するものとなります。 # React ビルド用のイメージFROMnode:14.15.4-alpine3.10 as client_builderARG REACT_APP_API_URLARG REACT_APP_GYAZO_AUTH_URLARG REACT_APP_GA_UNIVERSAL_IDWORKDIR/clientCOPY ./client/package*.json .RUN yarn installADD ./client .RUN yarn build# Actix web ビルド用のイメージFROMrust:1.49# Actix web にアクセスするためのポートを公開するEXPOSE8080# Actix web プロジェクトのフォルダをイメージに追加するWORKDIR/serverADD ./server .# プロジェクトフォルダ内で `cargo install` してビルドを生成するRUN cargo install --path ....

January 23, 2021 · 2 分 · Me

📔 MediaPackage 用の CloudFront ディストリビューションを AWS SDK で作成する

はじめに とある事情で MediaPackage のエンドポイント用の CloudFront ディストリビューションを AWS SDK で作成する機会がありました。その際得た知見をソースコードを交えながら備忘録として記事に残しておきます。 本記事内容で紹介しているソースコードは Gist にも同じ内容でアップしてあります。 ちなみに MediaLive + MediaPackage + CloudFront の構成でインフラ構築したい場合は、CloudFormation が MediaPackage にも対応したので CloudFormation の利用を推奨します。 本記事内容はあくまでも何らかの事情で、後から CloudFront ディストリビューションを MediaPackage エンドポイントに紐づけたいケース等で参考になると思われます。 実装内容 作成したソースコードの内容は下記になります。 最下部の createDistributionForMediaPackage が本記事タイトルに該当する関数です。 import { CloudFront } from "aws-sdk"; import * as url from "url"; import { CreateDistributionWithTagsResult, GetDistributionResult, UpdateDistributionResult } from "aws-sdk/clients/cloudfront"; export class CloudFrontClientForMediaPackage { private cloudFront: CloudFront; constructor() { this.cloudFront = new CloudFront({ region: "ap-northeast-1", apiVersion: '2020-05-31', }); } /** * CloudFront ディストリビューションの情報を取得するために利用する * @param id CloudFront ディストリビューションの ID * @return ディストリビューションの情報を取得する */ async getDistribution(id: string): Promise<GetDistributionResult> { const distribution = await this....

December 15, 2020 · 5 分 · Me