Skip to content

Instantly share code, notes, and snippets.

View gbvanrenswoude's full-sized avatar

Gijs van Renswoude gbvanrenswoude

View GitHub Profile
@gbvanrenswoude
gbvanrenswoude / login.sh
Created August 11, 2023 18:19
Single line login to AWS using STS AssumeRole (requires aws-cli and jq)
unset AWS_ACCESS_KEY_ID && unset AWS_SECRET_ACCESS_KEY && unset AWS_SESSION_TOKEN && eval $(aws sts assume-role --role-arn "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME" --role-session-name "gc-local-shell" | jq -r '"export AWS_ACCESS_KEY_ID=\"" + .Credentials.AccessKeyId + "\"\nexport AWS_SECRET_ACCESS_KEY=\"" + .Credentials.SecretAccessKey + "\"\nexport AWS_SESSION_TOKEN=\"" + .Credentials.SessionToken + "\""')
@gbvanrenswoude
gbvanrenswoude / ip-usage-aws-subnets.sh
Last active July 24, 2023 12:01
What is consuming IPs in my AWS Subnet?
#!/bin/sh
export AWS_PAGER=""
subnetId=$1
if [ -z "$subnetId" ]
then
echo "No subnet ID provided. Please provide a subnet ID as an argument."
exit 1
fi
@gbvanrenswoude
gbvanrenswoude / example.ts
Created April 6, 2023 13:34
cdk snapshot testing with the ability to exclude or include assets
import { SynthUtils } from '@aws-cdk/assert';
import * as cdk from 'aws-cdk-lib';
import { Stack, StageSynthesisOptions } from 'aws-cdk-lib';
import { Template } from 'aws-cdk-lib/assertions';
import { InfrastructureStack } from '../../src/lib/infrastructure-stack';
type Options = StageSynthesisOptions & {
/**
* Ignore Assets
*/
@gbvanrenswoude
gbvanrenswoude / requests_mock.py
Created January 18, 2023 14:50
Simple Python requests mock example
import logging
import os
import requests
import unittest
from unittest.mock import patch
import requests_mock
def send_slack_message(message, slack_url):
slack_response = requests.post(
@gbvanrenswoude
gbvanrenswoude / handler.ts
Last active December 19, 2022 11:04
OpenSearch ISM handler in CDK - CR example
import { Sha256 } from '@aws-crypto/sha256-browser';
import { defaultProvider } from '@aws-sdk/credential-provider-node';
import { NodeHttpHandler } from '@aws-sdk/node-http-handler';
import { HttpRequest } from '@aws-sdk/protocol-http';
import { SignatureV4 } from '@aws-sdk/signature-v4';
import { CdkCustomResourceEvent, CdkCustomResourceHandler } from 'aws-lambda';
export async function signRequest(request: HttpRequest, region = 'eu-west-1') {
const signer = new SignatureV4({
credentials: defaultProvider(),
@gbvanrenswoude
gbvanrenswoude / EsClientBuilder.ts
Last active December 15, 2022 21:24
Make plain https requests to an OpenSearch domain using AWS Sigv4 signing
import { Sha256 } from '@aws-crypto/sha256-browser';
import { defaultProvider } from '@aws-sdk/credential-provider-node';
import { NodeHttpHandler } from '@aws-sdk/node-http-handler';
import { HttpRequest } from '@aws-sdk/protocol-http';
import { SignatureV4 } from '@aws-sdk/signature-v4';
// import { region } from './http-agent'; use an aws region string
// import { getEnv } from './utils'; just calls process.env or returns default
export async function indexDocumentonAwsES(body, index, type, id, domain) {
const request = new HttpRequest({
@gbvanrenswoude
gbvanrenswoude / ESClientBuilder.ts
Created December 15, 2022 16:38
Expand OpenSearch SDK with aws sigv4 signing of requests on the Client using aws-opensearch-connector
import { defaultProvider } from '@aws-sdk/credential-provider-node';
import { Client } from '@opensearch-project/opensearch';
// tslint:disable-next-line:no-var-requires
const createAwsOpensearchConnector = require('aws-opensearch-connector');
export async function getEsClient(node: string = `https://${process.env.elasticsearch}`) {
const es = new Client({
...createAwsOpensearchConnector({
credentials: await defaultProvider()(),
@gbvanrenswoude
gbvanrenswoude / frozen_dict.py
Created December 12, 2022 08:40
FrozenDict
class FrozenDict(dict):
def __setitem__(self, key, value):
raise TypeError("This dictionary is frozen. You cannot add or modify items.")
def __hash__(self):
items = tuple(self.items())
return hash(items)
my_dict = {"a": 1, "b": 2, "c": 3}
my_frozen_dict = FrozenDict(my_dict)
@gbvanrenswoude
gbvanrenswoude / pi.lisp
Created December 8, 2022 12:39
pi.lisp
(require :cl)
(defun calc-pi (n)
(let ((in-circle 0))
(loop for i from 1 to n do
(let ((x (random 1.0))
(y (random 1.0)))
(when (< (+ (* x x) (* y y)) 1)
(incf in-circle))))
(* 4 (/ in-circle n))))
@gbvanrenswoude
gbvanrenswoude / script.ts
Last active November 14, 2022 12:35
Script to remove all Route53 Hosted Zones with records from an AWS account
// Run with ts-node script.ts --no-cache
/* eslint-disable @typescript-eslint/no-non-null-assertion */
/* eslint-disable no-console */
import {
ChangeBatch,
ChangeResourceRecordSetsCommand,
DeleteHostedZoneCommand,
ListHostedZonesCommand,
ListResourceRecordSetsCommand,