53ningen.com

@gomi_ningen's Website

SAM を利用して EFS ファイルシステムをマウントした Lambda 関数を作る

つい先日 Lambda で EFS のファイルシステムをマウントできるようになった らしいです。

SAM 側では AWS::Serverless::Function リソースが FileSystemConfigs というプロパティを追加してすでにこの機能に対応している らしいです。

また、これに関連して SAM のポリシーテンプレートに [EFSWriteAccessPolicy](https://github.com/awslabs/serverless-application-model/commit/b98e69c4c442c64c4bd40b1e41b4bb0dcb11283b#diff-b459a8d88303da927fe85516...

Read More

AppSync ことはじめ

入門 1: AppSync で Hello, World!

まず AppSync で "Hello, World!" という文字列を返す単純な GraphQL API を作成し、サービスの利用法をみていきます

スキーマの作成

まずは GraphQL SDL(Schema Definition Language) を用いて GraphQL API のインターフェースを定義していきます。次のような単純な User データを返却する user クエリを定義します。

schema {
  query: Query
}

type Query {
  user(id: ID!): User
}

type User {
  id: ID!
  name: String!
}

データソース/リゾルバの作成

ことはじめとして、決まった値を返すようなリゾルバを定義します。

{ "id": 1, "name": "hoge" }

データソースは None タイプを選択したものを指定し、レスポンスマッピングテンプレートにて前述の...

Read More

Cognito ID プールことはじめ

基本的な API と機能の理解

Cognito ID プールの各 API に対応する boto3 のインターフェースを直接操作し以下のようなことを実行することにより、Cognito ID プールの利用法を理解してみる

未認証ユーザーの認証情報の取得

  • GetId, GetCredentialsForIdentity API をたたいていけば OK
import env
import json
import boto3
import base64
from boto3.session import Session
from getpass import getpass

session = Session(profile_name=env.profile)
client = session.client('cognito-identity', 'ap-northeast-1')


print('=== GetId ===')
response = client.get_id(IdentityPoolId=env.identity_pool_id)...
Read More

Cognito ユーザープールことはじめ

基本的な API と機能の理解

Cognito ユーザープールの低レベル API に対応する boto3 のインターフェースを直接操作し以下のようなことを実行することにより、Cognito ユーザープールにおける認証の流れや利用法を理解してみる

  • サインアップ
    • MFA ありのサインアップについては後ほど扱う
  • サインイン
    • 基本的なフローについてそれぞれ確認
    • オプションや連携のバリエーション: MFA/Facebook, Google ソーシャルサインイン/Login with Amazon/Sign in with Apple/SAML IdP/OIDC プロバイダー経由のサインインについては後ほど扱う
  • ユーザー/ユーザー属性の取得・変更
  • パスワード変更
  • パスワード再設定
  • トークンの更新

サインアップの基本的な流れ

  • 基本的に SignUp API を叩いてアカウントを登録し、ConfirmSignUp API にてサインアップの確認を行う
  • AdminCreateUser API でユーザーを作成した場合、AdminC...
Read More

AWS SDK for iOS Samples を試す

GitHub の awslabs/aws-sdk-ios-samples リポジトリには AWS SDK for iOS を利用した以下のサンプルプロジェクトが用意されています

  • CognitoAuth-Sample
  • CognitoYourUserPools-Sample
  • IoT-Sample
  • Lex-Sample
  • Polly-Sample
  • S3TransferUtility-Sample

以下、それぞれを実行し、関連するコードを眺めます

CognitoAuth-Sample(Swift)

UI を実装せずとも SDK が提供するウェブビューベースでのサインアップ・サインインコンポーネントを利用して、手早く iOS アプリにユーザー認証の機能を追加できるサンプルが提供されています

...

Read More

ALB のターゲットの Lambda 関数から Multi Value Headers を返す

複数値を持つ RequestHeader/ResponseHeader がたまにあります。通常こういったリクエストが来た場合でも Event オブジェクトの Headers はただ単純にマップでしかないので、同一キーに対して値は一つです。レスポンスもマップというデータ構造を使っているときには当たり前ですが、同一キーに対して値は一つです。

ALB のターゲットグループに対して lambda.multi_value_headers.enabled 属性を true とすることによりこれに対応できます。このオプションは以下のようなコマンドで変更可能です。

aws elbv2 modify-target-group-attributes \
  --target-group-arn <value> \
  --attributes <value>

このオプションに変更する際は Lambda 関数の実装自体も変更する必要があります。以下のように multiValueHeaders をキーとして Map<String, List<String>> というような構造となっていま...

Read More

twitter のストリーミングデータで遊ぶ

Twitter のストリーミングデータを Kinesis Data Stream に流し込み、Lambda にてバッチ処理する簡単な連携の方法をまとめておきます。慣れていれば 15 分で構築できます。ベンリ。

Kinesis Data Stream を作成する

以下のようなコマンドで簡単につくれます。

$ aws kinesis create-stream --stream-name tweets --shard-count 1

オプションで指定しているシャードとは以下のような概念となります。

シャード シャードは、ストリーム内の一意に識別されたデータレコードのシーケンスです。ストリームは複数のシャードで構成され、各シャードが容量の 1 単位になります。各シャードは 読み取りは最大 1 秒あたり 5 件のトランザクション、データ読み取りの最大合計レートは 1 秒あたり 2 MB と 書き込みについては最大 1 秒あたり 1,000 レコード、データの最大書き込み合計レートは 1 秒あたり 1 MB (パーティションキーを含む) をサポート...

Read More

5分で立てるリダイレクタ

たまにリダイレクタたてたいなとなるが、それだけのために、アプリケーションを常に起動しておくだけのサーバーとか設置したくない・管理したくないみたいなことはよくあると思います。

C95 今年の冬コミで出す本で各地の時刻表とか案内ページへ飛ぶ QR コードをうめこもうとしてたのですが、外部サイトで URL 変更などがあるとアレなので、制御できるようにしたいなという気持ちで、原稿作業も押しているのでサクッと終わらせたいという気持ちで API Gateway + Lambda でリダイレクタを作りました。

構成管理もダルいので AWS が出してる chalice というフレームワークを使うことにしました。それは何?という説明をする前に実装をみちゃったほうが早いと思うので紹介します。

環境構築

macOS で開発してデプロイします

$ sudo pip install chalice
$ # project を作る
$ chalice new-project c95-redirector
$ cd c95-...
Read More

さくらVPSからAWS環境への移行手順メモ

特に必要に迫られたわけではないが、53ningen.com をさくら VPS から AWS 環境へお引越ししてみる。

現状 nginx, MariaDB が稼働する gomi-web 系と zabbix, elasticsearch, kibana, その他諸々をぶん回している gomi-back 系がある。これを ELB + EC2 2 台 + RDS という構成に変更する。

構成の変更

  • お金もないので、ひとつのサーバーに色々乗っけて遊んでました
  • 財布を灰にする代わりにもう少しまともな構成にする

ウェブサーバ

主に nginx, php-fpm, MariaDB が稼働していたさくら VPS の gomi-web 系統から MariaDB を分離し RDS にお引越し

  • 【変更前】 さくら VPS: 2 コア/1GB/SSD30GB (現状余裕がある)
  • 【変更後】 t2.nano 1vCPU/0.5GiB/SSD8GB + RDS db.t2.micro 1vCPU/1GiB

バックエンド系

zabbix, elasticsearc...

Read More

Redirect HTTP to HTTPS を ALB で実現する

先日(2018/07/25)、ALB に、リダイレクト/固定レスポンスという 2 つのアクションが追加されたので早速試してみた。

情報ソース Elastic Load Balancing で Application Load Balancer のリダイレクトおよび固定レスポンスのサポートを発表

リダイレクトアクション

ALB リスナーのルール設定のアクションにおいて、転送先のターゲットグループを設定する以外に「リダイレクト先...」および「固定レスポンスを返す...」という項目が選択可能になっていた。

「リダイレクト」を選択すると以下の項目が設定可能だった。

  • プロトコル
  • ポート
  • ホスト/パス/クエリ
  • HTTP ステータスコード...
Read More

Copyright © 53ningen.com