cloud9_note

cloud9に限らないメモ

View on GitHub

AWS Lambda

cloud9に開発環境を作成する

準備

AWS Lambdaからソースを取得する

  1. 右のタブ -> AWS Resources -> Remote Functions -> 取得したいAWS Lambda関数を右クリック -> Import
  2. Importをクリック

CodeCommitにソースを登録する

cd ${プロジェクトディレクトリ}
git init
git branch -m main
git config --global init.defaultBranch main
git add .
git commit -m "init commit"
git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/${プロジェクト名}
git push

Run Local

Local Functions -> 実行したいLambda関数を選択 -> 上の実行マークの隣のプルダウンをクリック -> Run Localをクリック

Deploy

Local Functions -> デプロイしたいLambda関数を右クリック -> Deploy

CodeCommitのプルリクエストにコメントを記載する

import boto3
from datetime import datetime as dt

def lambda_handler(event, context):
    content = [dt.now().strftime('%Y/%m/%d %H:%M:%S'), 'hoge','piyo']
    boto3.client('codecommit').post_comment_for_pull_request(
        pullRequestId='13',
        repositoryName='CodeBuild_Environment',
        beforeCommitId='385416ed5c736e73920993f1d0eb6eb7ef2d2cb0',
        afterCommitId='8768709c4620f7c858515a3aeb31bdf65a3f6035',
        content='  \n'.join(content)
    )

serverless framework

AWS Lambdaをリリースするフレームワーク

コマンド

初期化

serverless create --template aws-python3 --name ${プロジェクト名} --path ${ディレクトリ名}

デプロイ

sls deploy -v --stage ${ステージング名}

実行

serverless invoke --function ${serverless.ymlのfunctions下の関数名} -p ${入力ファイル名}

削除

sls remove -v 

設定

profileを設定する場合は、credentialsに記載する。

参考

参考

ホスト側のaws cli設定をコンテナに持ち込んで、boto3する

~/.awsをコンテナに持ち込めばOK。
.gitignoreに.awsを記載すること。

# docker-compose.ymlと同じディレクトリで実行する。
ln -s ~/.aws .aws

パスは実行ユーザに依存。

docker-compose.yml

services:
  python:
    volumes:
      - .aws:/root/.aws

Function URLs

new

Lambda

import json

KEY = 'name'

def lambda_handler(event, context):

    param = event.get('queryStringParameters')

    if KEY in param:
        message = 'Hello {}!'.format(param[KEY])
    else:
        message = 'Who are you?'

    return {
        'statusCode': 200,
        'body': message
    }  

    # Deploy Test Comment
      

.env

API_URL=https://${採番された値}.lambda-url.ap-northeast-1.on.aws

sh

#!/bin/bash

source .env

curl -X GET $API_URL?name=World

実行

$ bash call_lambda_function.sh 
Hello World!

old

ソース

import json

def lambda_handler(event, context):

    request = event['body']
    loaded = json.loads(request)
    keys = list(loaded.keys())
    values = list(loaded.values())

    returnBody = { keys[0] : values[0] }

    return {
        'statusCode': 200,
        'body': json.dumps(returnBody)
    }

テスト用イベントJSON

{
  "body": "{\"example\":\"value\"}"
}

実行

# URLはLambdaのページから確認する。
export FUNCTION_URL=
export FUNCTION_ARGS='{"example":"test"}'
curl -X GET -H "Content-Type: application/json" -d ${FUNCTION_ARGS} ${FUNCTION_URL}
{"example": "test"}

呼び出し元の入力パターン

eventで取得できる値。

EventBridge

{
    "version": "0",
    "id": "${id}",
    "detail-type": "Scheduled Event",
    "source": "aws.events",
    "account": "${アカウントID}",
    "time": "2022-09-19T14:16:44Z",
    "region": "ap-northeast-1",
    "resources": [
        "arn:aws:events:${region}:${account}:rule/${EventBridge_Name}"
    ],
    "detail": {}
}

任意の値を設定する

追加設定 -> 定数(JSONテキスト)でjsonを設定しておくと、eventが上書きされる。

CORSエラーの対応をする

戻り値のヘッダにAccess-Control-Allow-Headers, Access-Control-Allow-Originをつける。

    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': 'http://ittimfn-public-lambda.s3-website-ap-northeast-1.amazonaws.com',
            'Access-Control-Allow-Methods': 'GET'
        },
        'body': message
    }  

参考