- 1. サーバーレスアーキテクチャで翻訳 Web API を構築してみた【AWS Hands-on for Beginners Serverless #1】
- 2. 実はLambdaの関数URLは署名付きURL化できるよ、29秒の壁も越えられるよ、という話
- 3. 【AWS】Lambdaのyamlによる移管方法
- 4. CDKでNode.jsのLambda関数を作るときにjs|ts以外のファイルをバンドルする
- 5. Lambda関数 指定のログが出た際、Slackに通知する
- 6. AWSのコンボ技
- 7. injector(DIコンテナ)の隠蔽
- 8. Lambdaで「libcrypt.so.1: cannot open shared object file: No such file or directory」を解消
- 9. Lambdaで特定のサブネットのインスタンスを自動停止する方法
- 10. CodeBuildとSAMを組み合わせてLambdaを自動デプロイする
- 11. APIGatewayタイムアウト不可避を回避(神回避)
- 12. AWS SAM超入門 – 準備からLambda関数のデプロイまで
- 13. 【ナレッジ】AWS Parameters and Secrets Lambda Extension は、ハンドラー関数内から呼び出さないと400Errorになる
- 14. AWS ECRのイメージタグ付けを簡単に行う方法
- 15. 【DX】ChatGPTを社内Slackから使えるようにしてみた
- 16. Pythin 3.10 の pip にアップグレード & request ライブラリの Lambda レイヤーを作成する方法
- 17. 【AWS Lambda】複数のLambda関数を1つのコンテナイメージにまとめる
- 18. API Gateway→Lambda→DynamoDBとデータを受け渡す
- 19. 署名付きアップロード・ダウンロードの構成をterraformで作る。
- 20. 初心者がAWSでWebサイトを公開するまで
サーバーレスアーキテクチャで翻訳 Web API を構築してみた【AWS Hands-on for Beginners Serverless #1】
# はじめに
AWS認定試験の勉強している時にサーバレスアーキテクチャに関する問題がたくさん出てきました。
なので復習もかねて、今回は[AWS Hands-on for Beginners Serverless #1](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-reg-event.html?trk=aws_introduction_page)を参考に、サーバレスアーキテクチャを実際に構築していきたいと思います。
# 学習するサービス
– AWS Lambda
– Amazon API Gateway
– Amazon DynamoDB
– Amazon Translate# AWS Hands-on for Beginners Serverless #1の概要
このハンズオンでは、”こんにちは” と入力すると “Hello” と返すWebAPIを作成します。構築する構成図は以下になります。
![Hands-On-for-Beginners_2022_Se
実はLambdaの関数URLは署名付きURL化できるよ、29秒の壁も越えられるよ、という話
# この記事を2行で
– S3の署名付きURLと同じことが、Lambdaの関数URLにもできます
– Lambdaの署名付きURLを使えば、APIGatewayの29秒タイムアウトを超えてLambdaを実行できます## 何が嬉しいの?
– AIのように時間のかかる処理を、Lambdaだけで処理できます
– 署名付きURLなので、Cognito + APIGatewayのような認証がそのまま使えます## どうやって?
– Lambdaの関数URLは`API Gatewayの29秒タイムアウト制限の影響を受けない`
– S3の署名付きURLと同じ認証方法が、Lambdaの関数URLでも使える
– ※サービスはLambdaだけ、ライブラリもboto3の標準機能だけで実現できます## このあたりの事情を説明(APIGatewayのタイムアウト制限とは?)
AWSのLambdaは、15分かかる処理までは受け付けることができます。
ただ、APIGatewayは、レスポンスを返すのに29秒以上かかるリクエストを強制的に中断する仕様になっています。Lambdaは何しろ安
【AWS】Lambdaのyamlによる移管方法
### 1. LambdaのSAM(yaml)とデプロイパッケージ(zip)をダウンロード
2. 移行する Lambda 関数のコンソール画面へ移動
3. Lambda 関数ウィンドウで [アクション] を選択し、[関数のエクスポート] を選択
4. [ AWS SAM ファイルのダウンロード ] を選択してダウンロード
5. [デプロイパッケージのダウンロード] を選択してダウンロード### 2. 移行先のAWSのS3にデプロイパッケージをアップロード
1. 適当なバケットに先ほどダウンロードしたデプロイパッケージ(zip)をアップロードする
1. ファイルのS3 URIをコピーしておく### 3. CloudFormationでLambda 関数をデプロイする
1. ダウンロードしたSAM ファイルを開く
“`
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: ‘AWS::Serverless-2016-10-31’
Description: An AWS Serv
CDKでNode.jsのLambda関数を作るときにjs|ts以外のファイルをバンドルする
# TL;DR
`bundling.commandHooks.beforeBundling`
を定義して、その中で`cp`でコピーしてあげればOK!“`ts
new NodejsFunction(this, ‘lambda’, {
runtime: Runtime.NODEJS_18_X,
architecture: Architecture.ARM_64,
functionName: ‘my-nodejs-function’,
handler: ‘handler’,
entry: ‘lambda/index.ts’,
bundling: {
commandHooks: {
beforeBundling(inputDir: string, outputDir: string): string[] {
return [`cp ${inputDir}/lambda/hoge.txt ${outputDir}`];
},
afterBundling(): string[] {
retu
Lambda関数 指定のログが出た際、Slackに通知する
# 0/3 全体像
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968569/7a4f5954-5c46-886d-d790-e961b2438e0a.png)# 1/3 事前設定
## SNSトピックを作成しよう
### AWS SNSから新規トピックを作成 名前はテキトーで、タイプはスタンダート
![39c9b3ab-04aa-43cd-8d97-85e65f506cda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968569/9cc0d2e3-7ec8-d0a6-2f93-30ac075eeb31.png)![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968569/3516aef0-f9a3-25ed-b82c-100f761b3837.png)## AWSとSlackを接続
AWSのコンボ技
### Webアプリ + APIGateway
APIGatewayのAPIエンドポイントを経由して他のWebアプリからAWSにデータを送信することが可能になります。
– 例:Kintone(website) ⇒ (Webhook経由) ⇒ APIGateway ⇒ その他のAWS(Lambdaなど)### APIGateway + Lambda
– APIGatewayのリソース➡POST➡総合リクエストからLambdaの指定ができます。
– APIGatewayでのAPIのデプロイ時には、ステージ変数を設定することができます。ステージ変数を使用することで、APIのエンドポイントURLにステージ名を含めることができます。### Lambda + S3
– S3に配置されたオブジェクトに対してLambdaを実行する場合、IAMロールを作成してS3へのアクセス権限を与える必要があります。
– S3ファイルがアップロード、削除、更新された際、Lambdaを自動実行させることができます。
Lambda関数➡設定➡トリガー➡トリガー追加でイベントタイプ、S3のバケット、プレフ
injector(DIコンテナ)の隠蔽
[前々回](https://qiita.com/odxdoge/items/6031419f9461a8775d98)と[前回](https://qiita.com/odxdoge/items/2d1924e7d4fbe92e9969)の続きです。
クラスの依存関係の管理方法について解説しました。
injectorの実用的なテクニックについて深掘りします。## アーキテクチャ設計と実装
今までのコードでDIの考え方について解説してきました。また、その実装をライブラリを使って実現する方法についても示してきました。このようにアプリケーションのアーキテクチャを設計し、決定した場合、その後実装を行うはずです。
しかし、実際にAWS Lambdaで実装すると、ひとつ思うことがあります。
lambda handlerの最初にinjectorインスタンスを作成し、設定を行う必要があり、複数のLambdaを運用すると重複したコードになります。これにはいくつかの問題が挙げられます。
– 関係するすべてのLambda実装者がinjectorについて理解している必要があります。
– injecto
Lambdaで「libcrypt.so.1: cannot open shared object file: No such file or directory」を解消
# はじめに
今回の記事は、Ruby3.2でLambdaを使用しようとしたときに、「/var/lang/bin/ruby: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory」というエラーが出たので、なんとか解消できたときのお話です。もしかしたらRubyでも[こちら(Pythonです)](https://github.com/keithrozario/Klayers)のように、出来上がったレイヤーを配布しているかもしれませんので、お時間ある方は探してみてください。
# なぜエラーがでたのか?
Lambdaでは最近Rubyの3.2のランタイムが提供されるようになりました。しかし、Rubyのランタイムが依存しているLinux依存のライブラリまでは網羅されていないため、見つけることができずタイトルにあるエラーが出てしまいました。
# どのように解消したのか?
別の環境でライブラリをLambdaのレイヤーとして作成し
Lambdaで特定のサブネットのインスタンスを自動停止する方法
## はじめに
当チームではテスト環境等の社内利用用途を目的としたEC2インスタンスは業務時間内しか利用しないことが多いため、深夜帯や休日に稼働し続け無駄なコストがかかってしまうことがあります。
そういった不要なコストを抑えるためにテスト環境専用のサブネットを用意し、定時でサブネット内のすべてのインスタンスを停止する機能があると便利だなと思っていました。
件数が少ない時期はAmazon EventBridgeでルールを作成し個別で自動停止の設定をしていましたが、件数が増えるにつれ一括の設定が必要になり構築することにしました。今回はLambdaを使って構築をしましたので設定方法を記述します。
## 構築イメージ
AWSサービス全体の構築イメージは以下の図の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124412/a8870731-8076-9f68-664c-ea007861c001.png)
今回設定方法を記述するのは以下の工程です。
* AWS EventBrid
CodeBuildとSAMを組み合わせてLambdaを自動デプロイする
## 背景
複数のLambdaで構成されているサーバレスアプリにて、Lambdaのデプロイをコンソールから行なっていました。
時間がかかるのとオペミスのリスクがあったのでCodeCommitにpushするとAWS SAMで自動デプロイが行われるデプロイパイプラインを構築しました。[SAMの初歩的なこと](https://qiita.com/lyd-ryotaro/items/6ae7f8813d4769dbf184)はこちら
上記のSAM操作をCodeBuildにて行う、というイメージです。## 全体図
CodeCommit→CodePipeline→CodeBuildでSAMを起動してデプロイという流れ
CodeBuildが肝になってきます
[![Image from Gyazo](https://i.gyazo.com/438c293928c1f1710819c3a1d6008da1.png)](https://gyazo.com/438c293928c1f1710819c3a1d6008da1)## CodePipelineとCodeBuildの準備
### Cod
APIGatewayタイムアウト不可避を回避(神回避)
## APIGateway初心者あるある
「LambdaとAPIGatewayでAPI作ったで!
ちょい処理重めやけどLambdaをは最大15分まで動くし、15分もあったら余裕やわ」ポチっ(実行)
30秒後
~~~bash
{
“message”: “Endpoint request timed out”
# 訳: いつまでリクエスト待たせんねんワレ
}
~~~
「15分間は耐えるんちゃうんかい」(ナレーション)
彼はどこで間違えてしまったのでしょうか。
そうです、Lambdaは確かに設定を変えれば15分まではタイムアウト時間を延ばせますが、APIGatewayは最大30秒しか耐えられないのです。つまりこのタイムアウトはLambdaによるものではなくAPIGatewayによるものなのです。その証拠に、Lambdaのログを見るとタイムアウト後も動作していることが確認できます。
## 解決策:APIを二つに分けて回避
やり方はいくつかあるみたいですが、今回は「Lambda発火API」と「Lambda状態取得API」の二つのAPIを用意することで解決します。
AWS SAM超入門 – 準備からLambda関数のデプロイまで
## 概要
今までLambdaコンソールから手動で関数を書き換えたり設定値を変更してデプロイを行なっていました。
手動作業が多くて危険だったのでAWS SAMを試すことにしました。
動作の理解として超簡単な入門コードでSAMを試してみたので残します。## 前提
対象AWSアカウントのプロファイルをconfigに設定していること
Node.js 18.x でタイムアウトが3分のLambdaをデプロイしてみます## 全体図
[![Image from Gyazo](https://i.gyazo.com/2585b8aec1dbaa99787b5e4d76c54b72.png)](https://gyazo.com/2585b8aec1dbaa99787b5e4d76c54b72)## SAMについて
– Lambda関数コードだけじゃなく、タイムアウト値やトリガーといった設定までテンプレート(SAMファイル)で管理できる
– デプロイパッケージをS3にアップロードしてCloudFormationがLambdaに展開させる## SAMのインストール
“`terminal
【ナレッジ】AWS Parameters and Secrets Lambda Extension は、ハンドラー関数内から呼び出さないと400Errorになる
# 0. 要約
タイトルの通りですが、
**[AWS Parameters and Secrets Lambda Extension](https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/retrieving-secrets_lambda.html) は、ハンドラー関数”外”から呼び出しをすると HTTP 400 Error が出てしまいます。**
そのため、ハンドラー関数”**内**”から呼び出しましょう!# 1. はじめに…
[2022年10月に、AWS Parameters and Secrets Lambda Extension が発表されました。](https://aws.amazon.com/jp/about-aws
AWS ECRのイメージタグ付けを簡単に行う方法
# はじめに
ECRのイメージタグ付けを、Lambdaで簡単に行う手順です。ECRのイメージタグは、マネジメントコンソールから編集できず、不便な場合があります。
CLIで設定出来るのですが、お手軽に設定できるようにしました。# やりたいこと
### ECRのリポジトリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/65b6756c-2cbc-5785-9c67-9de5330184bd.png)
このようにリリースしてみたが、前のバージョンに戻したい、releaseタグを前のバージョンに付け替えたいときなどに、本ツールが使えます。これは一例で、後からタグをつけたい場合や、タグを整理したい場合などにも使えます。
# 準備
Lambda関数を準備します。詳細は割愛します。Lambdaのスペックは最弱でOKです。
## IAMポリシー
“`json
{
“Version”: “2012-10-17”,
“Statement”: [
【DX】ChatGPTを社内Slackから使えるようにしてみた
# ChatGPT使ってみた
皆さんの会社でもChatGPT活用されていますでしょうか
今回はChatGPTの活用促進に向けて社内で取り組んだ事例の紹介になります。::: note
今回の事例はWeb画面からのChatGPTにおいてAI学習への活用可否Optionスイッチが実装されておらず、API経由でのGPT利用しか選択肢が無かった時点での事例となります
:::### 導入背景
ChatGPTはその登場から非常に注目され、色々な利用事例があがっており、弊社としても活用していきたいと考えています。しかし、事業会社のシステム部門としては業務利用にあたって情報漏洩がやはり気になるところです。
そんな中、4月頃にOpenAI社よりAPIが公開され、API経由であればAIの学習目的利用をせず、30日間でデータ削除する事を選択できる(≒情報漏洩リスクを軽減できると考えられる)事から、APIを介してChatGPTを業務活用する為の機能開発ができないか。という議論がスタートしました### Slack連携を選んだ理由
社内でChatGPTを利用するにあたって「いかに社員が使いやすいイン
Pythin 3.10 の pip にアップグレード & request ライブラリの Lambda レイヤーを作成する方法
Lambda で requests を使いたかったので、Lambda レイヤーを作成する時に Pything 3.10 の pip に切り替えて requests の zip ファイルパッケージを作ったときのメモ書き
MacOS の Homebrew での作業です。
“`
$ brew install python@3.10
# python3.10 -m pip install –upgrade pip
“`“`
$ pip –version
pip 23.2.1 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)
“`“`
$ mkdir python
$ pip install -t python requests==2.28.2
$ zip -r9 layer.zip python
“`– Lambda Layer を追加
– Lambda 関数に Layer を紐付け参考
https://stackoverflow.com/questions/54409696
【AWS Lambda】複数のLambda関数を1つのコンテナイメージにまとめる
## やりたいこと・背景
Lambdaをコンテナから作成する場合、Lambda関数が複数ある場合は関数ごとにイメージをビルドしなければならないのか?という単純な疑問が出てきた。その場合、イメージの管理が複雑になりそうなので、1つのイメージで複数のLabda関数を管理できないかと考えた。## 結論
ランタイムイメージをビルドする際、各Lambda関数ごとに`ディレクトリを分け`、関数作成時に`ENTRYPOINT` を指定することで実現可能。同一ディレクトリに main関数 を持つバイナリが複数存在すると、実行時にどの main関数 を呼び出すべきかが不明瞭になり、うまく動作しない。そのため、**各Lambda関数は独自のディレクトリに配置される必要がある。**
ランタイムイメージで関数ごとにディレクトリを分けることで、各Lambda関数が独立して実行されるようになる。
## 概要図
![複数のLambda関数を1つのイメージで管理 (1).jpg](https://qiita-image-store.s3.a
API Gateway→Lambda→DynamoDBとデータを受け渡す
# 背景
最近業務外でサーバレス系サービスに触れる機会が増えました。せっかくなので理解を深めようと考え、タイトルの3サービスを触ったのでそれについての備忘です。サクッと作成できるので、興味がある方はぜひお手元の環境でお試しください。なお、DynamoDBとLambdaの構築は慣れている方が多いので構築手順は省いています。本記事の内容は以下のUdemy講座を参考にしています。https://www.udemy.com/course/aws-vlfc/
# 構築する内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/08d48572-2f8b-3843-c50c-6a6fcff12134.png)
# DynamoDBの用意
テーブル名は`users`として、パーティションキー`id`、`文字列`のみ設定します。
# Lambdaの用意
この後作成するAPI GWからデータを受け取り、DynamoDBに格納するコードです。
ランタイムは`Python 3.9`で、Lam
署名付きアップロード・ダウンロードの構成をterraformで作る。
# はじめに
[前回](https://qiita.com/sakai00kou/items/ba5618f0a67064355752)、[AWSブログ](https://aws.amazon.com/jp/blogs/news/large-size-files-transferring-by-serverless-s3presignedurl-and-clientside-javascript/)で公開されていた署名付きアップロード・ダウンロードの構成をAWSマネジメントコンソール画面から構築しましたが、色々と使えそうなので、terraformの勉強も兼ねてterraform化したので公開しようと思います。– 【前】[API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。](https://qiita.com/sakai00kou/items/ba5618f0a67064355752)
**元のブログ記事**
– [AWS のサーバーレスと Amazon S3 署名付き URL、クライアントサイド JavaScript
初心者がAWSでWebサイトを公開するまで
# やりたいこと
AWSでWebサービスを公開するまでの流れをまとめました。
公式が用意しているサンプルWebサービスを使ってWebサイトの環境構築を学びます。参考にした公式チュートリアルはこちらです。
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/# サンプルWebサービスの説明
まずサンプルWebサービスがどんなものかをざっくりと説明します。![いらすとやユニコーン](https://2.bp.blogspot.com/-kwlzIOtHvuM/XOPXUYPc19I/AAAAAAABS7k/YyQ6OZTB2O4Wg4HSlYMgfOKkOy5E99uUgCLcBGAs/s800/yumekawa_animal_unicorn.png)
シチュエーションは以下です。
> あなた(の会社)はユコニーンを世界各地に派遣する能力を持っています。
そこで世界中の人がユニコーンをタクシーのように乗り