AWS

一時クレデンシャルを取得するserverlessコマンドのラッパースクリプト その2

AWS

Serverless Frameworkは ~/.aws/config に書いたAssume Roleの設定を読んでくれないようなので、先日、EC2にアタッチされたIAM Roleからassume roleして、一時クレデンシャルを取得して、Serverless Frameworkを実行するスクリプトを書きました。 credential…

FIFOタイプのAWS SNSはメール送信できない

AWS

AWSのSNSは通知先としてメールやLambdaなどを指定できます。 SNSはベストエフォートなStandardタイプと、順番と通知回数を保証されたFIFOタイプの2タイプあります。 が、FIFOタイプの通知先はSQSしか指定できず、メール送信には使えない。知らなかった。。。…

一時クレデンシャルを取得するserverlessコマンドのラッパースクリプト

AWS

EC2にアタッチされたIAM Roleからassume roleして、一時クレデンシャルを取得して、Serverless Frameworkを実行するスクリプトを書きました。 serverlessコマンドのラッパーとして機能する簡易的なスクリプトです。 --aws-profile が指定されていた場合に ~/…

一時クレデンシャルでServerless Frameworkを動かす

AWS

AWSのEC2インスタンスにアタッチされたIAM Roleから別のIAM Roleにassumeできるようにしてあって、assume先の権限でServerless Frameworkを動かす必要がある場合、 ~/.aws/config にRoleを書いてもできませんでした。→前回の記事 手動でassumeして、一時クレ…

credential_sourceを使ったAWSのprofileではServerless Frameworkは動かせないのか

AWS

EC2インスタンスにアタッチされたIAM Roleから別のIAM Roleにassumeできるようにしてあって ~/.aws/config に以下のように書いてある場合、 [profile admin] role_arn = arn:aws:iam::123456789012:role/sample-admin credential_source = Ec2InstanceMetada…

AWS SESでPythonからメール送信してみる

AWS

AWSのSES (Amazon Simple Email Service)を初めて使ってみました。 使い方は以下の公式ドキュメントがわかりやすかったです。 AWS SDK for Python (Boto) を使用して E メールを送信する - Amazon Simple Email Service 1. メールアドレス登録 2. メール送信…

AWSのECR(Container Registry)にHello, WorldなDockerイメージを置いてみる

AWS

Amazon Elastic Container Registry(ECR)を初めて触ってみます。 (前回Google Container Registryを触ってました。) Dockerコンテナイメージ作成 AWSのECR(Container Registry)にpush AWSのECR(Container Registry)からpull バージョン情報 Dockerコンテナ…

S3ファイル作成をトリガーにしてLambda起動

AWS

S3ファイル作成をトリガーにしてLambda起動させてみて、どんなオブジェクトがLambdaに渡されるのかを確認しました。 Lambda作成 S3イベント設定 試してみる Lambda作成 Runtimeは今回は Node.js 14.x を選択しました。 ソースコードはこれだけ。 exports.han…

AWS SQSをRubyで試してみる

AWS

RubyからAWSのSQSにメッセージを送受信してみます。前回はPythonで試しましたが、今回はそのRuby版です。 CloudFormationでSQSを作成するところは前回と同じなので省略します。 RubyのAWS SDKをインストール。 $ gem install -N aws-sdk Rubyのサンプルコー…

AWS Step FunctionsのRetryとCatchを使ってみる

AWS

AWSのStep FunctionsのRetryとCatchをServerless Frameworkから使ってみます。 Step Functionsは、CloudFormationだとState machine定義の記述が面倒です。JSONを文字列にしたものをCloudFormationのテンプレートに書くか、別ファイルにしないといけないよう…

AWS SQSをPythonで試してみる

AWS

CloudFormationでSQSのQueueを作成して、Pythonコードでメッセージの送受信をするところまで試してみます。 CloudFormation Pythonコード CloudFormation template.yaml AWSTemplateFormatVersion: '2010-09-09' Resources: SampleSQS: Type: AWS::SQS::Queu…

S3バケットのオブジェクト数をawscliで確認

AWS

S3バケットにあるオブジェクトの数をawscliで確認する方法です。 2つ方法を書きます。1つ目は単純にlsコマンドで数えています。2つ目はCloudWatchのMetricsで、バージョニングが有効化されているバケットの場合は過去バージョンのオブジェクトも含まれます。…

大きなファイルをS3にawscliでMultipart Upload

AWS

S3にPUTするときの最大サイズは5GBだそうです。これを超えるサイズをアップロードする場合にはMultipart Uploadが必要です。 aws s3 cpコマンドでは大きいファイルをアップロードする際には自動でMultipart Uploadになりますが、Multipart Uploadの処理の中…

PillowをAWS Lambda + Python + Serverless Frameworkで動かす

AWS

画像を処理できるPillowをAWS Lambda + Python + Serverless Frameworkの環境で動かしてみました。 AWS Lambda + Python + Serverless FrameworkにPythonのパッケージをインストールする方法は前回の記事に書きました。 AWS Lambda + Python + Serverless Fr…

AWS IAM Policyをawscliで作成・取得・更新

AWS

AWSのIAM Policyをawscliで取得、作成や更新をすることはできますが、以下の理由でとても手間です。 Policyにバージョンの概念があるため、バージョン番号を確認するワンクッションが必要 Policyの名前を指定する箇所とARNを指定する箇所があり分かりづらい…

Serverless FrameworkとAWS Lambda with Python or Node.jsでS3アクセス

AWS

前回、RubyでServerless Frameworkを触ってみました。今回は同じことをPythonとNode.jsでします。 作成するAWS Lambdaは、前回と同じですが、CloudWatchからスケジュール起動します。Lambdaでの処理内容はS3にアクセスしてログに残すのみです。 カレントディ…

Serverless FrameworkとAWS Lambda with RubyでS3アクセス

AWS

Serverless Frameworkを触ってみました。 AWS LambdaをCloudWatchからスケジュール起動します。Lambdaでの処理内容はS3にアクセスしてログに残すのみです。処理はRubyで書きます。 追記:PythonやJavaScriptでの例は後日書きました。→ Serverless Framework…

DynamoDBを初めて触ってハマったこと

AWS

AWSのDynamoDBを初めて触ったときの感想というか、つまづいた点を記録しておきます。 その1 その2 その3 CloudFormationのテンプレートのサンプル DynamoDBにPythonからアクセスするサンプルコード その1 CloudFormationでDynamoDBのテーブルを作成しようと…

API GatewayをVPC内のプライベートアクセスのみに限定

AWS

AWSのAPI Gatewayを通信がインターネットに出ていかずにVPCの中だけに限定するには、以下の設定が必要です。 API Gateway用のVPCエンドポイント作成 API GatewayのリソースポリシーでVPCエンドポイントからのアクセスのみに制限 API GatewayのEndpoint Type…

CloudFormationでAPI Gatewayを変更しても反映されない

AWS

CloudFormationでAWSのAPI Gatewayを使った開発をするときの話。 初めてCloudFormationをデプロイするときには、API Gatewayのデプロイも実行されるので、すぐにAPIが使えるようになります。しかしその後テンプレートファイルを更新してCloudFormationでデプ…

AWS::ApiGateway::Stage と AWS::ApiGateway::Deployment の違い

AWS

CloudFormationでAPI Gatewayを作成する際の AWS::ApiGateway::Stage と AWS::ApiGateway::Deployment の役割分担というか違いがよくわからないまま、適当なサンプルを使いまわして雰囲気で使っていたのですが、やっとわかってきたので、メモです。 AWS::Api…

CloudFormationのパラメータを配列型にする

AWS

前半は復習としてパラメータが文字列の書き方、後半が本記事の本題で配列型にする方法です。 パラメータが文字列の場合 パラメータが配列の場合 パラメータが文字列の場合 テンプレートファイルに以下のように書くと aws cloudformation deploy 実行時にパラ…

AWS Redshift Federated QueryでRedshiftにアクセスしてみる

AWS

AWS RedshiftのFederated QueryはRedshiftからRDSやAuroraのPostgreSQLテーブルにアクセスできる機能です。 PostgreSQLにアクセスできるのであれば、似たインターフェースであるRedshiftにもアクセスできるんじゃないかと期待して試しました。Redshift同士の…

S3にダミーファイルを大量に保存

AWS

検証目的でS3にダミーファイルを大量に保存するスクリプトを書きました。 スクリプトはRubyとBashの組み合わせです。 Rubyでput_object Rubyスクリプトで3万個保存 Bashスクリプトで36万個保存 動かす Rubyでput_object RubyでAWSを操作するには aws-sdk の…

S3にオブジェクトとメタデータをPythonで保存

AWS

Pythonのboto3を使って、S3にオブジェクトとユーザ定義のメタデータを保存するサンプルコードです。 import boto3 # default以外のprofileを使う場合はここで指定 profile = "default" session = boto3.session.Session(profile_name = profile) client = se…

PostgreSQLのデータ型とAWS Glue Crawlerのデータ型のマッピング

AWS

PostgreSQLのテーブルをAWS Glue CrawlerでクロールしData Catalogにどんなデータ型のテーブルができるかを確認しました。 Data Catalogのデータ型にどうマッピングされるかについては、過去にもやっています。S3上のParquetファイルをクロールさせた場合は…

Parquetのデータ型とAWS Glue Crawlerのデータ型のマッピングとAthenaからのアクセス

AWS

さまざまなデータ型を含むParquetファイルを作成し、AWS Glue Crawlerでクロールさせてみて、Data Catalogにどんなデータ型のテーブルができるかを確認しました。 結果 Parquetファイルのスキーマ Glue Crawlerの結果 Athenaから参照 結果 先に結果をまとめ…

AWS RDSのログファイルをダウンロードするPythonとRubyのスクリプト

AWS

以前、AWS RDS PostgreSQLのクエリログをawscliで取得するワンライナーという記事で、RDSのインスタンスにあるログファイルを一括で取得する方法を書きました。しかしこのワンライナーでは、1MBを超えるログですと先頭の1MBしか取得できず、途切れてしまいま…

AWS SAMとCloudFormationで同じ構成のAPI Gateway + Lambdaを構築

AWS

API Gateway + Lambdaの同じ構成をSAMとCloudFormationの2通りで作成しました。 SAMのほうが簡単に作成できるのですが、細かい設定が中途半端に隠蔽されている感じが好きではないです。 CloudFormationのほうがテンプレートが長いのですが、細かい設定ができ…

JavaScript AWS SDKでS3にある画像をブラウザに表示

AWS

JavaScriptのAWS SDKを使って、S3にある画像ファイルをブラウザから直接取得して表示してみました。 前提 S3バケットのCORS設定 ソースコード index.html lib.js 実行 前提 S3バケットに画像ファイルが保存されています。 S3バケットはパブリックアクセスを…