AWS関連のことを調べてみた2022年07月22日

AWS関連のことを調べてみた2022年07月22日

20行弱のTerraformコードで600本のLambda関数をデプロイしてみた

# 概要
600本あるLambda関数をデプロイする必要があったのでその時の対応をメモ
– 1つずつ書く → さすがにこれはNG
– Function名一覧を定義してfor_eachでまわす → Function名一覧作るんもツライ

ってことでどうにか楽できないかというので取った対応です

# 前提
まず前提条件として、全Lambda関数が全て同じ設定になるようにする必要があります
– 環境変数はLambda内でSSM Parameter Storeから取得する
– zipファイル名は Function名.zip とする
– ランタイム・アーキテクチャは全て同じにする

# コード
### zipファイルがローカルにある場合
filesetでzipファイルの一覧を取得して Function名 => zipファイル名 というmapを作成
“`
locals {
functions = {
for f in fileset(var.dir_path, “*.zip”) :
trimsuffix(f, “.zip”) => f
}
}
“`
これをもとにfo

元記事を表示

特定のIAMユーザーのみがアクセスできるS3バケットを作成してみた

# 目次
[1. はじめに](#1-はじめに)
[2. やりたいこと](#2-やりたいこと)
[3. 結論](#3-結論)
[4. 用語](#4-用語)
[5. やってみた](#5-やってみた)
[6. まとめ](#6-まとめ)
[7. 参考](#7-参考)
# 1. はじめに
こんにちは。
私は、普段はAWSの運用保守を担当しています。
最近の案件で、1つのAWSアカウントで複数のユーザーを管理することがありました。
その際に少しハマったS3バケットのアクセス権周りについて記載します。

# 2. やりたいこと
各ユーザーごとに専用のIAMユーザーと専用のS3バケットを作成。
その際に、他ユーザーからのアクセスをできないようにしたい。
(自分のS3バケットには、自分のみアクセスできるようにしたい)
また、ユーザー用のIAMユーザーは、S3への最小アクションのみを許可したい。
![yu-za- .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730351/833f6c99-994a-d5e4-b3cd

元記事を表示

Terraformを使ってサーバーレスでサービスを作成したので振り返る

# はじめに

個人開発でサービスを作るのが趣味です。
Terraform, Lambda, DynamoDBを使ってサーバーレスで簡単なービスを作成してみました。
未来の僕が現在の僕の思考を振り返られるように記事にしました。

# 今までの構成

今まではSpring Boot, MySQL, AWS, Conoha VPCなどを使ってサービスを作っていました。
このような構成です。

### ALB + Fargate + RDSを使った構成

![ecs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63855/50459573-187a-e8dc-8052-4ecfda53da3c.png)

### ConoHa VPC + RDSを使った構成

![conoha.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63855/33854c56-138a-8adc-f354-7705bf54bfea.png)

元記事を表示

ServerlessFrameworkでサービス名を長くしすぎるとデプロイできない

# はじめに
ServerlessFrameworkでAPIGateway, Lambdaへのデプロイした際に発生したエラーについて記録に残したいと思います。

# 原因
デプロイの際、作成されるIamRoleの文字数制限を超えてしまい、エラーが発生する。

### エラー内容
“`bash
Error:
CREATE_FAILED: IamRoleLambdaExecution (AWS::IAM::Role)
1 validation error detected: Value ‘XXXXXXX-XXXX-XXXXXXXXXXXXXX-XXXX-XXX-dev-ap-northeast-1-lambdaRole’ at ‘roleName’ failed to satisfy constraint: Member must have length less than or equal to 64 (Service: AmazonIdentityManagement; Status Code: 400; Error Code: ValidationError; Request ID

元記事を表示

“s3:DeleteObject*”をポリシーに組み込まない場合の挙動

## What’s This

“s3:DeleteObject*”をポリシーに組み込まない場合、
S3バケットに同名のファイルをアップロードしたら、元のファイルが上書きされるか調査した時のメモです。

あくまでメモなので、参考にされる場合は、公式ドキュメント等の副読的な感じで読まれると幸いです。

## やってみた

“`
# ロールに適用したポリシー
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3:PutObject*”,
“s3:ListBucket”,
“s3:GetObject*”
],
“Resource”: [
“arn:aws:s3:::`S3 Bucket`”,
“arn:a

元記事を表示

パスワード無しでLinuxユーザー作成&ユーザー切り替えして詰んだ話

## 概要
①ユーザA作成
②su コマンドでユーザ切り替え
③元のユーザーに切り替えたりsudoコマンド等を使おうとする → パスワード求められるので無理
④③をできるようにユーザAを設定するにはルートユーザーになる必要がある → wheelグループでもないし、パスワードないので詰み
⑤shutdownしてec2-userで鍵で認証して入り直してパスワード設定して対処

詳細に入ろうと思ったのですが言いたいことは概要で終わってしましました。どんなエラーが発生したか書きますね

## 挑戦と失敗
### ユーザAからパスワードを設定しようとする
“`
[user-a@ip-10-0-1-98 dir-b]$ passw d user-a
passwd: Only root can specify a user name.
“`

### ec2ユーザに戻ろうとする( sudoつかう

“`
[user-a@ip-10-0-1-98 dir-b]$ sudo su- – ec2-user

We trust you have received the usual lecture

元記事を表示

AWS CLIで一定期間更新されていないロググループを一掃

# はじめに
検証環境にロググループがどれくらいあるかを見たことがあるでしょうか。
僕の検証環境には310個のロググループがいました。
![310.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2109911/d11b68c3-b9f7-8199-c26c-0011e55e3005.png)

ロググループのストリームの数や保持期間にもよりますが、大体50円/月ほどかかっています。
費用的には大したことなく、「なんか気持ち悪いなぁ」という程度なので消さなくても良いかと思います。

ただ、**先日JAWS-UG CLI支部でCloudWatch Logsのハンズオンをやったこともあり、理解を深める意味でロググループを一掃するコマンドを作ってみることにしました。**

でも、使用中のロググループもあり、全部消す訳にもいかないので、一定期間更新されていないロググループのみ消すようにします。

# 手順
### 1. 削除したいリージョンでCloudShellを起動
![cloudshell.png](http

元記事を表示

Datadog Forwarderを使用してログストリーム単位でDatadog Monitorを作成する

## What’s This
[こちらの記事](https://qiita.com/meta_plankton/items/d626416d42748ad7f38e)で、`ロググループのメトリクスフィルターで検知した文字列をDatadogに流してログ監視する`
流れを作ったものの、不都合が生じる場面がありました。

## 問題点
以下の例で考えてみます。
ロググループがあり、その下にふたつログストリームを作成しています。

“`

AWS側
ロググループ:EC2-LogGroup
ログストリーム:
ec2-ichigouki
ec2-nigouki
メトリクスフィルター:Error

Datadog側
上記ロググループで設定されたメトリクスフィルターを通して、
流れてきたError文字列を監視するモニターを作成する。
“`

前回の方法では、ログストリーム単位ではなく、ロググループ単位でモニターを作成していました。

なので、ec2-ichigouki、ec2-nigouki どちらか一方のログストリームで監視文字列”Error”が生成された場合、
どちらのログストリームでErr

元記事を表示

CodePipelineからLambdaを使ってECSタスク定義を更新する

# 概要
AWS CodePipelineを使うとECSに自動デプロイができるが、対応しているのはECSサービスに紐づいたタスク定義だけとなっている。
そこで、EventBridgeを使った定時バッチ用に都度コンテナを起動するタスク定義の更新をCodePipelineから行う方法を試した。

# CodePipelineの流れ
今回作成するパイプラインは以下の通り。

1. Sourceステージ:GitHubから指定したブランチのコードをpullする
1. Buildステージ:buildspec.ymlの手順でビルド、イメージをECR登録
1. Deployステージ:ビルドしたイメージを設定したタスク定義をECSにデプロイ

DeployステージのアクションプロバイダーをAmazon ECSにすると、Buildステージのアクションでアーティファクトに出力したイメージ定義ファイルを元に、ビルドしたイメージを使ってデプロイできる。
この方法はサービスに紐づいていないタスク定義ではできないので、今回はタスク定義の更新にLambda関数を使う。

# Lambda関数でタスク定義を更新する流れ

元記事を表示

【AWS Glue】Postgre DBからのdynamic frame読み込み並列化

## はじめに

業務でAWS S3上にデータレイク開発を行っています。
プロダクトで使用しているDBからS3へのデータの同期は、AWS Glueで、DBからdynamic frameを読み込み、S3に保存するジョブを実行することで実現しています。

今回上記のやり方でDBで使用しているあるテーブル(データサイズが約40GB)を読み込んでS3に保存しようとした場合、膨大な時間がかかったうえ、途中でエラーで落ちてしまいました。

## 原因をさぐる

Glueのジョブがどのように実行されているかを知るためにまずはSpark UIで確認します。

Spark UIの構築方法は下記の通りです。

リポジトリクローン

“`jsx
git clone https://github.com/aws-samples/aws-glue-samples/
“`

コピーしてきたフォルダのうち./utilities/SparkUI/glue-1_0-2_0以下にDockerfileがあるため適当なフォルダにコピー、フォルダ内でビルドする

“`jsx
docker build -t glue/sp

元記事を表示

【AWS】EC2インスタンスを起動してTeraTermからSSH接続する

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

どちらかというと初歩的な内容ですが、
**今回はEC2インスタンスを作成してTeraTermで接続する方法**
について、備忘録としてまとめてみたいと思います

AWSについて勉強中の方の参考になれば幸いです。
(*^^)v

# 2.用語の説明
## 2.1.EC2とは
EC2とは「Elastic Compute Cloud」の略で、AWSの中のサービスの1つで、
LinuxベースやWindowsベースの仮想サーバを構築することができます。

オンプレのサーバと比べると構築や削除の手間がとても少なく、
冗長化の設定や、サーバの負荷に合わせたスケーリングをすることもできます。

## 2.2.TeraTermとは
Tera Term(テラターム)とは、Windowsで動作するリモートログオンクライアントです。
1台のPCからインターネットを通じて、別のサーバやPCに接続し、操作することができます。
また、SSH・telnet・シリアルの各通信プロトコルに対応しています。

参考:https://

元記事を表示

未経験エンジニアが感じたサーバレスってなに?

この記事を書こうと思った理由

最近、AWSの勉強をしていてオンプレとクラウドの違いをなんとなく理解してきたところでサーバレスという言葉に疑問を感じたためこの記事を書こうと思いました。

私の中での言語の理解

・オンプレ(オンプレミス)
自社でサーバーを買いデータセンターに設置してそこにアプリやらインフラの設定などを行いサービスを提供する仕組み
メリット
自分で買うから、設定などの自由度がかなり高い
デメリット
初期費用がとても金がかかる
自分でサービスを考えて提供するまでに時間がかかる
急な高負荷などに対応できない

・クラウド
他社(Amazon,Google,Microsoft)が提供しているサーバー上にアプリやらインフラの設定などを行いサービスを提供する仕組み
メリット
うまく設定すれば、オンプレよりも安く済ませることができる
初期費用がかからない
急な高負荷などに対応できる
デメリット
カスタマイズに制限がある
現状使いこなせる人材が少ない

・サーバレス
???
サーバーがいらない?
AWS勉強して出てきたけど、AWSはクラウドで一応サ

元記事を表示

AWS リソースの解放

今日、社内でAWSの環境構築の研修がありました。
VPCの設定、サブネットの設定、セキュリティグループの設定、EC2の設定、RDSの設定を行い、
最後にはリソースの解放まで行いました。
初めて環境構築を行い、リソースの解放のところで気づきがあったので、以下に記します。

# AWS リソースの解放
VPCを削除すればその中のネットワークに属するEC2とRDS、他設定もろとも全て消えるのでは?
と思っていたのですが、そういうわけではないようです。
VPCは箱ではなく、紐のイメージで、EC2とRDSはそれぞれ個別に削除する必要がありました。

EC2は停止した状態で削除ができたのですが、RDSは起動した状態でないと削除ができず少し手間取りました。
なぜかはわかりません。
最後にVPCを削除したときに、一緒にサブネットの設定やセキュリティグループの設定が消えました。

会社での研修内容を振り返ってみました。
せっかく構築作業を行ったので、自宅でも試してみようかなと思います。
何かご指摘などありましたらコメントをお願いいたします。

元記事を表示

AWS SSOのカスタマー管理ポリシーをざっくり試す

これまでAWS管理ポリシーとインラインポリシーしか使えなかったAWS Single Sign-On(以下AWS SSO)が遂にカスタマー管理ポリシーをサポートした!という[リリース](https://aws.amazon.com/jp/about-aws/whats-new/2022/07/aws-single-sign-on-aws-sso-aws-identity-access-management-iam-customer-managed-policies-cmps/)があったので、取り急ぎ試してみる。

## やりたいこと
AWS SSOでカスタマー管理ポリシーを使って楽したい。

## その前に仕様確認
同僚の話によるとどうも思ってたのと少し違う仕様らしいので、公式ドキュメント(英語の方)を読んでみる。
[Custom permissions](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocmp.html)
[Use IAM policies in permission sets](https:

元記事を表示

AWS CDK synth or deploy時のFailed to bundle asset

私だけかもしれませんが、大分嵌ったので、メモを残します。

# 環境
Windows10 WSL2 (Ubuntu18.04)
WLS2内でCDKのソースコードを保有してDockerコンテナへVolumeマウントしている状態。
WSL2のファイルはローカルユーザーがオーナー(1000:1000)
ファイル、ディレクトリのパーミッションはフルアクセスでコンテナのユーザーもRW可能な状態

aws-lambda-nodejsのNodejsFunction()を利用しbuildingオプションのforceDockerBundlingはfalseを設定済.
(コンテナでビルドせずにローカルのesbuildを利用する設定)

# 問題事象
WSL2環境のDockerコンテナにAWS CDKをインストールして、コンテナのrootユーザーでcdkコマンドを実行するとこうなる事象に遭遇
“`
$cdk synth
Error: Failed to bundle asset xxxxxxxxx/Code/Stage, bundle output is located at XXXXXX

元記事を表示

AWS SAAって実際に仕事で役立つの?

## はじめに
AWS SAA(Certified Solutions Architect) を受けようか悩んでいるけれど、メリットが分からず受ける決定打に欠ける・・という方は多いのではないでしょうか。
私はAWS SAAに2021年に合格しまして、それから業務や個人開発でAWSを使ったインフラ開発・運用関わってきたので、 **AWS SAAを受けることで仕事で何に役立つの?** といった点について記載します。

ちなみに受験前の私の知識レベルは、EC2, S3?名前は聞いたことあるな・・:thinking_face:程度でした。

## 目次
– [はじめに](#はじめに)
– [記事対象者](#記事対象者)
– [結論](#結論)
– [SAAを受けて仕事で役立ったこと](#SAAを受けて仕事で役立ったこと)
– [システム構築のベストプラクティスが分かる](#システム構築のベストプラクティスが分かる)
– [入社直後でも案件の概要を掴みやすくなる](#入社直後でも案件の概要を掴みやすくなる)
– [転職活動に強くなる](#転職活動に強くなる)
– [プライベートで

元記事を表示

AWSのSAML認証でaws cliにログインする方法

はいさい!ちゅらデータぬオースティンやいびーん!

# 概要
AWSのFederated Userシステム、SAML認証でログインした時に、`aws cli`にもその認証情報を反映させる方法を紹介します。

## 参考にした情報

https://qiita.com/hoto17296/items/126352a43e9749d510b5

https://aws.amazon.com/premiumsupport/knowledge-center/aws-cli-call-store-saml-credentials/

https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_saml_view-saml-response.html

# SAMLResponseを取得する
まず、読者さんのAWS・SAMLログイン画面を開いてください。

筆者の場合、Googleアカウントを使用しておりますので、以下のような画面になります。
![スクリーンショット 2022-07-20 12.20.57.png](https://q

元記事を表示

(aws) EFSのFileSystemId取得方法

# EFSのFileSystemIdを取得方法について
BatchやプログラムでEFSのFileSystemIdを取得し、マウント作業を自動化したい時に役立つ方法。
AWS CLIを利用する。(もちろんAWS SDKも利用可能)

基本的には下記コマンドで全てのEFSの全ての詳細情報を取ることが可能。
“`shell
$ aws efs describe-file-systems
“`

上記コマンドを使って “–query” オプションを追加することで特定の情報だけをフィルタリングすることが可能。

※AWSのAPIは大体 **”–filter”** というサーバ側のフィルタリングオプションと **”–query”** というクライアント側のフィルタリングオプションが存在する。しかし、EFSの場合だと、**”–filter”** 機能は特に実装されてない(2022年7月時点)らしいので、**”–query”** オプションでフィルタリングをかけるしかない。
**”–query”** のフィルタリング方法は[JMESPath構文](https://jmespath.or

元記事を表示

意識低い系インフラエンジニアでもAWS SAA(C02)合格する方法

# 意識低い系インフラエンジニアでも合格できました

前回のクラウドプラクティショナー受験から4か月ほど経ち、
2022年6月にソリューションアーキテクトアソシエイトに合格しました。

スコアはこんな感じ。割とギリ。

`受験者スコア: 760 結果: 合格`

## 前提_環境

2022年2月頃にクラウドプラクティショナーに合格しています。

18年頃に一度SAAは受験していましたが、落ちています。
その時は500点程度だったと記憶しています。

試験官が海外の方だと時差の関係で深夜帯にも受験できるので
日本語受験、試験官は英語としました。

SIerとして派遣勤務しており、現場でも取得を求められているため
クビにならないように受験しました。

## 勉強方法

Qiitaの合格体験記を参考にやってたので、似たり寄ったりです。変わったことはしていません。
逆に言えばこれやっときゃ受かるのかも。
乱雑ですがした事は以下の通りです。

とりあえず黒本を読み、ざっくりと内容を理解しました。

他にも読んだものはあるのですが、結局これが自分に一番合っている気がします。

https://w

元記事を表示

ブラウザからLambdaを実行

### IDプールの作成
Cognito > IDプール管理 > 新しいIDプールの作成
認証時のロール、未認証時のロールがcognitoによって作成される

### IAM権限設定
用途に合わせて認証時のロールまたは、未認証時のロールにInvokeFunction権限を付与する

### javascript(ES6)
“`javascript
const { CognitoIdentityClient } = require(“@aws-sdk/client-cognito-identity”);
const { fromCognitoIdentityPool } = require(“@aws-sdk/credential-provider-cognito-identity”);
const client_lambda = require(“@aws-sdk/client-lambda”);
const REGION = “ap-northeast-1”;
const lambda = new client_lambda.Lambda({

元記事を表示

OTHERカテゴリの最新記事