- 1. AWS StepfunctionsでCloudFormationスタックをシリアルに実行する
- 2. AWS Toolkit とsam を使ってLambdaを実行(ローカル実行、API Gateway実行)
- 3. APIGateway+Lambdaで、WebページからEC2の起動・停止・スペック変更を操作する
- 4. CloudFront+LambdaでBasic認証(htpasswd)を設定した
- 5. [Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ (2)
- 6. 初心者がAWS Lambda + Python + LINE BotでWikipediaのタイトルをランダム送信
- 7. [Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ(1)
- 8. 他で管理されているDynamoDBへの更新をAmplifyアプリでサブスクライブする
- 9. AWS ChatbotでSlackからLambda関数(Go)を呼び出す
- 10. DjangoをLambdaで動かそうと思ったけどやっぱり向かないと思った話
- 11. AWS Step Functions 調査メモ
- 12. AWSのLambdaを使ってS3間のファイルコピーを試してみた。
- 13. AWS Toolkitの使用例(AWS Lambdaのリモート実行)
- 14. Golang + Lambdaでサーバレス開発時にWarning「Support for “package.include” and “package.exclude” will be removed with next major release.」が出た時の対応
- 15. TerraformでRDSのパスワードローテーションのコードを作成する
- 16. 徹底解説!Java8特性
- 17. ServerlessFrameworkを利用したLambdaでデバッグを実施する。
- 18. Lamda上のmatplotlibで日本語対応する
- 19. Serverless Frameworkを使ったLambda開発
- 20. SAMの”実行”ロールに必要なIAMポリシー
AWS StepfunctionsでCloudFormationスタックをシリアルに実行する
## はじめに
AWS StepfunctionsとLambdaでCloudFormationスタックをシリアルに実行するステートマシンを作成しました。(実行したスタックが完了するまで次のスタックは実行しません)
これは[以前作成したスクリプト](https://qiita.com/suo-takefumi/items/2bbcc3fd9af02acbeb26)をサーバレスで実行できるように改善したものになります。## ソース
作成したソースはgithubに格納しました。
https://github.com/zgw426/AWS-StepFunctions_CreateStacks
## Stepfunctions ステートマシン
作成したステートマシンと各フローの処理概要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/e8e3c747-8b8b-bf9b-9bb7-044fbc4410fc.png)
—
余談
Stepfunctionsっ
AWS Toolkit とsam を使ってLambdaを実行(ローカル実行、API Gateway実行)
前回は、ローカルからリモート実行の記事を書きました。
今回は、よくあるAPI Gateway + AWS Lambdaの開発をVSCodeを使ってやる方法です。AWS SAM を使いローカルからクラウドへdeploy、クラウド側での実行、ローカルでの実行を行ってみます。
`sam build`, `sam deploy` によるエラーに遭遇します、エラーが出ると理解が深まります。VSCode + Remote Containerでの環境構築ができず、Windows PCのローカル環境使っています。
※エラーの回避方法ないか模索中(systemctlコマンドは通るが service docker start ができない)ローカル環境に、sam cli や python は入れたくない、複数バージョン管理が手間だったり、他に依存したりで・・・。
## 環境準備
– Windows10, 64bitとして進める### 前提
– Docker Desktop for Windows,VSCode がインストールされていること
– インストールしていない場合は http
APIGateway+Lambdaで、WebページからEC2の起動・停止・スペック変更を操作する
#はじめに
Ec2の操作は、AWSコンソールから操作しますが、ログインすることが面倒だったりやチームで開発する場合、EC2の起動・停止のためだけにIAMユーザーを作成するのは手間だったりするため、S3に配置したhtmlでEC2を操作できる仕組みを作成しました。
ただし、メンバー以外に操作されないよう、S3にはCloudfront OAI、CloudFrontとApiGatewayにはBasic認証をかけてます。#構成図
S3にhtmlを配置して、CloudFrontで配信し、S3からアクセスできないよう制限します。
そして、html上でEC2を操作できるようLambdaを使用します。#完成ページ
EC2の現在のスペックと起動有無が非同期で表示され、ワンクリックでEC2を起動・停止・スペック変更できます。
CloudFront+LambdaでBasic認証(htpasswd)を設定した
## 概要
CloudFrtont+S3のような構成でBasic認証の実装方法は既にいくつものサイトで紹介されているが、パスワード情報を平文でLambda内に保存する方法が主流なので、htpasswd形式で保存する方法を試してみた
## 参考サイト
– Leonid Makarov
– [Medium.com: Serverless: password protecting a static website in an AWS S3 bucket](https://medium.com/hackernoon/serverless-password-protecting-a-static-website-in-an-aws-s3-bucket-bfaaa01b8666)
– [gist.github.com: lmakarov/lambda-basic-auth.js](https://gist.github.com/lmakarov/e5984ec16a76548ff2b278c06027f1a4)
– [Amazon CloudFrontとAWS Lambda
[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ (2)
[前回](https://qiita.com/regaeve/items/f5863d7d059782f9c2a9)はlambdaでeventを受け取るところまでやりました。
今回はAPI gatewayとの連携をやっていきます。(S3は次回で。。疲れちゃった。)
# 環境
– windows 10
– java11
– gradle
– intelij idea community# API gatewayからlambdaを呼び出す
## API gatewayでAPIを構築する
1. AWSコンソールから`サービス`⇒`ネットワーキングとコンテンツ配信`⇒`API gateway`を選択
![スクリーンショット 2021-08-12 170811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240124/b31f1a24-ebb8-6f43-acf9-bd6467639f87.png)1. `APIを作成`⇒REST APIを`構築`を選択(僕はプライベートじゃない方で作りました
初心者がAWS Lambda + Python + LINE BotでWikipediaのタイトルをランダム送信
本記事は「[いのべこ 夏休みアドベントカレンダー 2021](https://qiita.com/jugemsan/items/6c8b7324b9390a557774)」の13日目の記事です。記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません(お約束)。
# はじめに
入社から1年半が経ったが、研修修了後から全くプログラミングを触らなくなってしまった。
さすがに危機感を感じた私はここで行動に移さなければという使命感から今回このような記事を書くことにした。## プロフィール
* 社会人2年目
* プログラミング経験ほぼなし(研修でやったことはほぼ忘れた)
* 経営学士
* サッカーやってました(幼稚園~大学)
* 最近とろろが好きになってきた## 技術経験
入社からアプリ開発はほぼなく、データベースの構築やOSSの構築などの環境構築作業をメインで行っていた。そのためコーディングの経験や知識が不足しており、まじ半端ねーやべーレベルでできない。(型はstringとintしか知らないレベル)# 作るもの
![iOS の画像 (1).png](http
[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ(1)
# やりたいこと
自分のS3バケット上にjsonファイルを作ったり、中身を書き換えたりできるapiをlambdaとapi gatewayつかって作る予定です!!言語はjava11です!!!
**といっても今回はlambda動かすところまで。**~~s3とか~~api gateway周りは[次回](https://qiita.com/regaeve/items/23ba1a883a87adf92365)(~~あるといいな~~あった)
# 環境
– windows 10
– java11
– gradle
– intelij idea community# リージョンについて
僕の場合、lmabda、api gatewayはオハイオ(us-east-2)で作成しました。
場所は多分どこでもよいと思いますが、**両方とも揃えないと連携できない**気がします。
S3はリージョン指定できないので気にする必要ないです。![Inkedスクリーンショット 2021-08-12 104325_LI.jpg](https://qiita-image-store.s3.ap-northeast
他で管理されているDynamoDBへの更新をAmplifyアプリでサブスクライブする
# 概要
他で(例えば他のAmplifyプロジェクトで)作成したDynamoDBのテーブルへのデータ挿入や変更などを、Amplifyアプリで検知してリアルタイムで利用する仕組みを構築するメモ。同じAmplifyプロジェクト内で`@model`で作成したテーブルであればsubscriptionを定義してアプリから呼び出すだけで簡単にリアルタイムでデータを取得できるが、Amplifyプロジェクトの外で作成されたテーブルのデータ更新を検知することはできない(2021/08/11現在)。
なので、対象のDynamoDBテーブルのStreamをLambdaで受け取って、Lambdaに実装中のAmplifyプロジェクトのmutationを呼び出させて、そのmutationをsubscribeすることでAmplifyアプリで変更を受け取る、ということをする。
![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138322/cf9ffe06-9bed-13eb-cc83
AWS ChatbotでSlackからLambda関数(Go)を呼び出す
## はじめに
CICDの一環でGoのLambdaをSlackから呼び出す仕組みを構築したのでその備忘録を残す。
(Goは初見だったので少しGoを触った所も書き残した。)## Goを使ってみる
### install
https://golang.org/doc/install からDowloadしてくる。
`go version`でGoのバージョンが表示されればOK。“`
C:\Users\user>go version
go version go1.16.7 windows/amd64
“`### hello world
[はじめてのGo](https://github.com/yuta-katayama-23/Go/commit/a24dbd81df6ebc32e0bb739b9b50a54f7c91e136)“`golang:hello
package mainimport “fmt”
func main() {
fmt.Println(“Hello, World!”)
}
“`実行結果は以下のようになる。
CIでGoを動かすのに使った
DjangoをLambdaで動かそうと思ったけどやっぱり向かないと思った話
# はじめに
DjangoでWebアプリを作成した際に、サーバーを借りると高くつくので、何とかLambdaに乗っけて実行課金にできないかと試した記録です。
結論から言うと上手くいかなかったのですが、何か役立つかもしれないので書き残しておきます。# DjangoをLambdaで動かすまでの手順
以下のサイトを参考に実施しました。相違点としては、以下のサイトではMySQLにて動かしていますが、私はSQLiteにて試しています。(ただし、うまくいきませんでした。)https://qiita.com/umihico/items/4534e1f84e8de5a62db5
# 問題点
### Werkzeugが最新バージョンだと動かない
Python用のWSGIユーティリティライブラリであるWerkzeugを、最新バージョンにしていると動かないです。
requirements.txtにて、バージョンを指定してあげる必要があります。“`plaintext:requirements.txt
Django
Werkzeug==1.0.1
“`### Pythonが最新バージョンだ
AWS Step Functions 調査メモ
## はじめに
AWS Step Functions の調査メモ。深堀りはせず概要を把握することが目標です。
## Step Functions で Lambda 実行
Step FunctionsでCloudWatch logsにログを書き込むLambdaを実行します。
以下はログを書き込むLambda(Python3.8)です。
Lambda実行時に受け取ったJSONデータをログに記録します。
また、return で受け取ったJSONデータを返しています。“`python:test001
import jsondef lambda_handler(event, context):
print(“test desu {0}”.format(event) )
return (event)
“`– 必要なIAMロールは、CluodWatch Logs の以下3つ
– CreateLogGroup
– CreateLogStream
– PutLogEvents作成したStepFunctionsのjsonコードです。
AWSのLambdaを使ってS3間のファイルコピーを試してみた。
## はじめに
普段何かお試しで作りたい時は、主にGCPにVMインスタンスを立てて、そこで色々といじってみる事が多かったため、本格的に色々なクラウドサービスを試したことはなく、AWSもほとんど使ったことがなかった。
周りではクラウドと言えば **”AWS”** の選択肢が多い気がするので、基本的なサービスくらいは多少はいじれた方が良いかと思い、今回は触りながら、調べながら学んだことをメモとして残しておく。## 前提
そもそもから勘違いをしていた部分なのだが、まずAWSアカウントを作成した場合、各リージョンにそれぞれデフォルトでVPCができるのだが、このVPCの中に色々なサービスを作成(追加)していく様なものかと想像していた。
しかし、実際には以下の様なイメージで、VPCに属させるサービスの方が少ないのではないかと思っている。
![Qiita-no049_img01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/220242cc-125f-8858-b642-b27434439f0b.
AWS Toolkitの使用例(AWS Lambdaのリモート実行)
# AWS が提供するAWS Toolkitを使い AWS Lambda Python を実行してみる
– この記事でやることは、
– VSCodeを使いAWS Lambda の hello-lamdaをローカルから実行する(ローカルからリモート実行)
– VSCode上でソース編集してAWSクラウドにアップロードする(Lambda関数をデプロイする)
– `sam local invoke` 等の sam コマンドは利用しない
– 簡単なLambda作って、EC2インスタンス再起動する、CloudWatchLogsからlambda実行、みたいなインフラスクリプト相当を手軽に実行するくらいの用途です
– API Gateway等で実行するLambdaは`serverless framework`や`sam`や`cdk`を使う方が良いです
– 間違って別のLambdaを編集してしまうこともあったり、消してしまうこともあるので開発用です。ソースはGit等で管理しておきましょう。
– JetBrainsのPyCharmやWebSotrmでLamdba関数作成で利用した
Golang + Lambdaでサーバレス開発時にWarning「Support for “package.include” and “package.exclude” will be removed with next major release.」が出た時の対応
# 背景
Golang + Lambdaでサーバレス開発中に`sls invoke -f 関数名`を実行すると、以下のWarningが発生しました。
“`
Serverless: Deprecation warnings:Support for “package.include” and “package.exclude” will be removed with next major release. Please use “package.patterns” instead
More Info: https://www.serverless.com/framework/docs/deprecations/#NEW_PACKAGE_PATTERNS
“`# 対処法
`serverless.yml`を以下のように書き直せばOKです。“`serverless.yml
package:
exclude:
– ./**
include:
– ./bin/**
“`↓
“`serverless.yml
package:
patterns:
TerraformでRDSのパスワードローテーションのコードを作成する
# はじめに
検索してもあまり良い記事を見つけることができなかったため、自分で色々試して成功したことを記載します。## VPC、サブネット、RDS
VPC、サブネット、RDSは検索すればたくさん出てくるので、既に作成済みを前提として記載します。
VPCのCIDRは**”10.0.0.0/16″**としております。
今回RDSは**Aurora PostgreSQL**を使用し、**プライベートサブネット**に配置します。
RDSのセキュリティグループは**PostgreSQLのポート(5432)に同VPC内(10.0.0.0/16)からのアクセスのみ許可**しております。## パスワードローテーションの仕組み
AWS Secrets Managerに認証情報を保持し、Lambdaを使って定期的にパスワードを更新します。
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/enable-rotation-rds.htmlコンソールだと上記ドキュメント記載通りにすれば簡単に設定可能なのですが、これを
徹底解説!Java8特性
皆さん、こんにちは!
最近、仕事を探しています。java エンジンニアとして面接をうける際に、よくjava8の特性の問題を質問されました。
だから、本記事はjava8の特性を中心としてまとめてご解説いたします。### 一、ラムダ式
この前のjavaバージョンでリストをソートするために、下記のように実装すべきである。“`java
ListmyList= Arrays.asList(“tom”, “jack”, “smith”, “allen”);
Collections.sort(myList, new Comparator() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
“`
だが、java8の特性(lambda式)を用いたら、下記のlambda式で簡単に実装できる。“`java
Collections.sort(names, (a, b) -> b.compareTo(a));
“`上記のlam
ServerlessFrameworkを利用したLambdaでデバッグを実施する。
###記事作成に当たって
最近、Serverless Frameworkを利用してLambdaにNode.jsをデプロイしている。Serverless Frameworkはテンプレートも充実してるし、CI/CDの面でも優れているのでなかなか便利。だけど、デバッグのやり方がわからなくて困っていた。どうにか、簡単にデバッグをできないかなぁと思って、試行錯誤する中でデバッグ環境ができあがったので、記事にして共有します。###構築時の環境情報
端末:Mac
エディタ:VsCode
node:v14.17.4(versionが古いと)
npm:7.20.5###パッケージの環境構築
“`:packageのインストール
~/develop/study/serverless $ serverless create -t aws-nodejs-typescript -n debug_lambda -p debug_lambda
Serverless: Generating boilerplate…
Serverless: Generating boilerplate in “/User
Lamda上のmatplotlibで日本語対応する
Lambda上でmatplotlibを使ってグラフを作成したいとき、Lambdaには日本語フォントが含まれていないため日本語が豆腐になってしまいます。この記事では、日本語対応するための方法について説明します。
## 前提
matplotlibは別途利用できるようにレイヤーなどで用意する必要があります。## やり方
1. Lambdaレイヤーに日本語フォント用のレイヤーを登録
2. Lambda関数に日本語フォント用のレイヤーを追加
3. matplotlibでフォント読み込み## 1.Lambdaレイヤーに日本語フォント用のレイヤーを作成
日本語フォントなら基本的に何でもOKと思いますが、今回は[IPAexゴシック](https://moji.or.jp/ipafont/ipaex00401/)(ipaexg.ttf)をダウンロードして使いました。
ダウンロードしたttfファイルを適宜ディレクトリ(例えばfontsなど)に入れてzip圧縮します。
Lambdaのレイヤーページから「レイヤーの作成」にて作成画面に移動し、アップロードにて先程圧縮したzipファイ
Serverless Frameworkを使ったLambda開発
以前に[AWS SAMを使ったLambda開発](https://qiita.com/nakahara-d/items/1b861ea61dbbffaf90b8)をしてみましたが、今回はAWS SAMと比較しつつ、Serverless Frameworkを使ったLambda開発を試してみます!
# Serverless Frameworkとは
[Serverless Framework](https://www.serverless.com/)はAWS、Azure、GCPなどマルチクラウドに対応したサーバーレスアプリケーション開発フレームワークです。
オープンソース版とPro版があり、Pro版ではCI/CDやモニタリングの機能が使えますが、今回はオープンソース版を試してみます。
# 準備
## Serverless Frameworkのインストール
Serverless Frameworkをインストールします。
スタンドアロンバイナリとnpmでインストールできるようですが、今回はnpmでインストール。
後述するプラグインでもnpmを使ったりするので、Node.jsの環境は用
SAMの”実行”ロールに必要なIAMポリシー
# 背景
Github ActionsからSAMを実行するためにIAMを作成しようと思ったが、
最小限のポリシーにするうえで、情報がググってもなかなか出てこなかったので記事化。
(LambdaへのIAMロール付与の記事ばかりが出てくる。。。。)# 最小限ポリシー
公式の記事があった。
(”Permission” でググるのが正解だったかも。)
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-permissions.htmlそちらに運用上+αして以下に。
* `AutoPublishAlias` に必要だったもの
* “lambda:ListVersionsByFunction”
* “lambda:PublishVersion”
* “lambda:UpdateAlias”
* Layerの更新に必要だったもの
* “lambda:PublishLayerVersion”“`
{
“Version”: