2021年3月31日水曜日

Lambda(RDS自動起動・停止)


関数の作成を行う。

関数名:任意の名前

ランタイム:Pyhton 3.x 













IAMの設定:

設定 ->アクセス権限 ->編集を選択











IAMロールの作成を行う

以下のポリシーが追加されたIAM Roleを作成を行う。

・CloudWatchFullAccess

・AmazonRDSFullAccess



既存のロールを選択する。




















実際に、コードの入力を行う









サンプルコード:

======DB start ===============================

import boto3

 

region = 'ap-northeast-1'

 

instance = ‘DB名を記載’

def lambda_handler(event, context):

    rds = boto3.client('rds', region_name=region)

    rds.start_db_instance(DBInstanceIdentifier=instance)

    print('started instance: ' + instance)

============================================


=====DB stop =================================

import boto3

 

region = 'ap-northeast-1'

 

instance = 'DB名を記載'

def lambda_handler(event, context):

    rds = boto3.client('rds', region_name=region)

    rds.stop_db_instance(DBInstanceIdentifier=instance)

    print('started instance: ' + instance)

============================================




Deploy ->Testを実行してみる。













Lambda(CloudWatch events)

LambdaのトリガーをCloudwatch eventsにする場合の手順。


トリガーを追加を選択









①EventsBridge(CloudWatch Events)を選択

②ルール:新規ルールの作成

③ルール名:わかりやすい名前にする。

④ルールタイプ:スケジュール式

スケジュール式* : cron形式記述を記載























以下のように、トリガーが追加される。

  ->あとは、時間が来ると、自動的に実行される。














ambda(EC2の自動起動・停止)

 1)ポリシーを作成する。












2)ロールの作成を行う。

上記で作成したポリシーをアタッチする。











■Lambda(関数作成)


関数作成を選択





1)1から作成

2)関数名:名前を記載。

3)ランタイム:Pyhton3.x







コードの入力を行う








設定 ->アクセス権限  ->編集を選択








上記で設定した、ロールを指定

保存押す

























コードの実行:

1)Deployを実行

2)Testを実施







■自動起動用コード

===============================-

import boto3

region = 'ap-northeast-1'

instances = [‘対象のインスタンス名’]

ec2 = boto3.client('ec2', region_name=region)


def lambda_handler(event, context):

    ec2.start_instances(InstanceIds=instances)

    print('started your instances: ' + str(instances))

======================================



■自動停止用コード

=================================

import boto3


region = 'ap-northeast-1'

instances = [‘対象のインスタンス名’]

ec2 = boto3.client('ec2', region_name=region)



def lambda_handler(event, context):

    ec2.stop_instances(InstanceIds=instances)

    print('stopped your instances: ' + str(instances))

=====================================




Lambda(Fargate自動起動・停止)

 1)関数の作成を選択





2)以下、設定。

関数名:

ランタイム:Python 3.xを選択


3)関数の作成を押す







IAMにて、ポリシーの作成を行う


















==========サンプルコード:==================

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "ecs:DescribeServices",

                "ecs:UpdateService"

            ],

            "Resource": [

                "*"

            ]

        },

        {

            "Effect": "Allow",

            "Action": [

                "logs:CreateLogGroup",

                "logs:CreateLogStream",

                "logs:PutLogEvents"

            ],

            "Resource": "arn:aws:logs:*:*:*"

        }

    ]

}

=========================================



IAMロールを作成 















上記で、作成したポリシーを割り当てる。

















設定を選択















設定 ->アクセス権限 ->編集を押す。














既存ロール:上記で、作成したIAMロールを選択




















以下のようにコードを作成する。











============サンプルコード===============================

import boto3


from botocore.exceptions import ClientError

def lambda_handler(event, context):

    try:

        client = boto3.client('ecs')

        for cluster_name, service_name in [('test-cluster', 'test-service')]:

            service_update_result = client.update_service(

                cluster = cluster_name,

                service = service_name,

                desiredCount = 0 # コンテナの数

            )

            print(service_update_result)

    except ClientError as e:

        print("exceptin: %s" % e)

=======================================================


deploy ->Testを実施する。














Docker (HEALTHCHECK)

以下のようにdocker のヘルスチェクをクリアーにするまでの経緯。



以下のdockerfileのように、必須条件としてcurl をインストールすること!








次に以下のコマンドで、dockerのヘルスチェックを行う。

docker inspect --format='{{json .State.Health}}' コンテナ名






2021年3月15日月曜日

KMS & S3

まずは、KMSにて、キーの作成を行ってみます。


1)KMSのマネージメント画面に移動(以下の画面)

2)キー作成を選択する











3)対称を選択

4)詳細オプションから”KMS”を選択

5)次へ










6)エイリアス名を記載

7)次へ














8)“キーの管理者がこのキーを削除できるようにします”  のチェックを外す

9)次へ


















10)対象のユーザー及びRoleを選択する。

11)次へ



12)以下のようにキーポリシーが表示されるので、特に編集が不要であれば

13)完了を押す。














14)完了すると、以下のようにマネージメントコンソール上で確認ができる








■S3(バケット側)


1)対象のバケットを選択する。

2)プロパティタブを選択する。

3)デフォルトの暗号化の箇所の編集を選ぶ。
























4)サーバー側の暗号化

  ->有効にする

5)暗号化キータイプ

  ->SSE-KMSを選択

6)AWS KMSキー

   ->KMSマスターキーからの選択する

7)KMSマスターキー

   ->上記で作成したKMSマスターキーを選択する。


8)変更を保存を押す。




















アプロードしたファイルを一般公開を行なった後に

ブラウザからアクセスを行うと以下のようにアップロードしたファイルの表示されず

KMSによる暗号化に関する記述がされてます。


ちなみに、別のバケットでKMSでの暗号化を行うわないで、アップロードしたファイルにアクセスすると、

普通にアップロードしたファイルが観覧可能でした。














EFS(Dockerfile)の記載について注意

  Dockerfileにefsのマウントパス宛に、ファイルコピーを行うと ECSのサービス作成時に、コンテナのデプロイ失敗に(container run time error)になるので 別経由で、EFSにファイルをコピーした方が良い!! <Dockerfile> ...