Create Kubernetes cluster on AWS environment

Linux & アマゾンウェブサービス Projects for $15 – $25. I am working on AWS, kubernetes, Ansible, Docker, Jenkins CI/CD pipeline. My main job is to create a kubernetes cluster on AWS EC2 instances which is automated through Cloud Formation template…. 続きを読む

Aws lambda emr

json –bucket event-driven-batch-analytics. New Big Data Architect With Aws Lambda, Emr careers are added daily on SimplyHired. For instance, Hadoop’s core services haven’t gone away but rather have been packaged into services like EMR, Qubole, and Altiscale to decouple running a cluster from … 続きを読む

Harmonic、VOSシリーズの新製品「VOS Software Cluster」を発表

VOS SW Clusterはインフラに依存しないメディア処理アプリケーションなので、容易に物理的データセンターコンピューティング(例:既存のITサーバー製品)、パブリッククラウド(例:AWS、Google Cloud Platform)、プライベートクラウドを切り替えることができる。VOS SW Clusterアプリケーションにより、事業者はライブ … 続きを読む

Rancher2.0 Tech Preview2 ~Create a RKE Cluster~

Rancher2.0 Tech Preview2の主要機能として追加された「Create a RKE Cluster」は、RKE(Rancher Kubernetes Engine)を利用して、AWS、Azure、DigitalOcean、Packet、vSphereに対してKubernetesクラスタを作成することができます。(※2018年2月現在)

Rancher2.0 Tech Preview2からAWS上にKubernetesクラスタを作成してみましょう。

Tech Preview2のインストールはRancher2.0 Tech Preview2についての「Get Started with Rancher 2.0」を参考にしてください。

Rancher2.0 Tech Preview2でAWS上にKubernetesクラスタを作成

1.Rancher2.0 Tech Preview2 Serverにログイン後に、「Add Cluster」ボタンをクリックします。

image.png

2.「Create a RKE Cluster」の「Select」ボタンをクリックします。

image.png

3.nameに任意名を入力(今回はaws-k8s-clusterとします。)して、「Add a new cluster」をクリックします。

image.png

4.「Configure」をクリックします。

image.png

5.「Amazon EC2」を選択し、nameに任意名を入力(今回はaws-k8s-clusterとします。)し、Countは「3」、Regionは「ap-northeast-1」、Access keyとSecret keyはAWSのIMA Management Consoleでグループとユーザを作成し、そのユーザーのものを入力します。そして、「Next:Authenticate & select a network」ボタンをクリックします。

image.png

6.vpcを選択して、「Next:Select a Security Group」ボタンをクリックします。

image.png

7.「Next:Set Instance options」ボタンをクリックします。

image.png

8.「Create」ボタンをクリックします。

image.png

9.kubernetesの構成を作成します。最後に「Create」ボタンをクリックします。

image.png

10.しばらくするとkubernetesクラスタ構築が完了します。

screencapture-35-198-222-0-g-clusters-1517843931311.png

クラスタ名をクリックすると全体のリソース状況が可視化されます。

screencapture-35-198-222-0-c-cluster-8p8bq-1517844232326.png

11.上部メニュー「Nodes」を選択します。

AWS上に構築されたkubernetesクラスタの状況を確認できます。各クラスタ名をクリックするとリソース状況が可視化されます。

image.png

12.「KubeConfig File」ボタンをクリックします。

image.png

kubectlコマンドのconfigファイルをクリップボードにコピーできます。

image.png

kubectlコマンドを実行できるクライアントをローカルまたはサーバで構築します。今回はGCP上にGCEのインスタンス(Ubuntu 16.04 LTS)を1台用意します。

コマンド
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

$ chmod +x ./kubectl

$ sudo mv ./kubectl /usr/local/bin/kubectl

$ mkdir .kube

$ vim .kube/config
#クリップボードにコピーした内容をペーストして保存します。
:wq

$ kubectl get nodes
NAME               STATUS    ROLES         AGE       VERSION
aws-k8s-cluster1   Ready     etcd,master   26m       v1.8.5-rancher1
aws-k8s-cluster2   Ready     worker        23m       v1.8.5-rancher1
aws-k8s-cluster3   Ready     worker        25m       v1.8.5-rancher1

これで、kubectlコマンドでアプリケーションをデプロイすることが可能となります。

13.AWSのコンソールを確認します。

インスタンスが3台で来ていることが確認できます。

image.png

以上となりますが、AWS以外のAzure、DigitalOcean、Packet、vSphereも同様にRKEでkubernetesクラスタを構築できると思います。

参考資料

RKE(Rancher Kubernetes Engine)

続きを読む

AWS Lambda から ElastiCache に接続するメモ

やりたいこと

  • AWS Lambda から ElastiCache に接続する
  • boto3 は get/set はできないらしいので他の方法を使う

必要な設定

  • AWS Lambda の実行ロールに ElastiCache へのアクセス権限追加
  • AWS Lambda, ElastiCache を同じVPCにあわせる

redis (クラスターモードが無効) の場合

EC2 にて redis-py をダウンロード

$ pip3 install redis -t ./
  • 生成されるディレクトリを開発環境の index.py と同じディレクトリにコピーする

index.py 作成

index.py
import redis

def handler(event, context):

    r = redis.StrictRedis(host='****.****.0001.apne1.cache.amazonaws.com', port="6379", db=0)

    r.set("key1", "value1")
    print(r.get("key1"))

    return "OK"

以上。

redis (クラスターモードが有効) の場合

EC2 にて redis-py-cluster をダウンロード

$ pip3 install redis-py-cluster -t ./
  • redis-py も依存してるので一緒にダウンロードされる
  • 生成されるディレクトリを開発環境の index.py と同じディレクトリにコピーする

index.py 作成

index.py
from rediscluster import StrictRedisCluster

def handler(event, context):

    startup_nodes = [{"host": "****.****.clustercfg.apne1.cache.amazonaws.com", "port": "6379"}]
    rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True, skip_full_coverage_check=True)

    rc.set("key1", "value")
    print(rc.get("key1"))

    return "OK"

  • クラスターモードが無効の redis には繋がらないのでテスト環境などでは上記実装を切り替える

以上。

続きを読む

AWS ARNまとめ

資格勉強向けにARNの構文をメモ
Amazon ARN

基本形式

arn:partition:service:region:account-id:resource
arn:partition:service:region:account-id:resourcetype/resource
arn:partition:service:region:account-id:resourcetype:resource
  • パーティション: 基本的にAWS
  • サービス: AWS製品名
  • リージョン: リソースがあるリージョン。リージョン関係ないものは省かれている
  • リソース,リソースタイプ: サービスによって異なる。スラッシュやコロンなどで書いてある

覚え方
アランとパーティでサービス受けたらリケジョにアカンと(リ)ソースかけられた。

EC2構文例

arn:aws:ec2:region:account-id:instance/instance-id
arn:aws:ec2:region:account-id:volume/volume-id

arn:aws:ec2:us-east-1::image/ami-1a2b3c4d
アカウントが省略されて::となる。
arn:aws:ec2:us-east-1:123456789012:instance/*

S3構文例

arn:aws:s3:::bucket_name
arn:aws:s3:::bucket_name/key_name
s3はリージョン、アカウントは不要。故にバケット名が一意である必要があるのか

S3例

arn:aws:s3:::my_corporate_bucket/*
ポリシーのARNを指定する場合は、ワイルドカード「*」文字を使用できる。

RDS構文例

arn:aws:rds:region:account-id:db:db-instance-name
arn:aws:rds:region:account-id:cluster:db-cluster-name

AWSCLI,RDS APIを使用する時に使う。その際にはタグと共に使用する。

AWS サービスの名前空間
AWSサービスの識別をNamespaceを使用して AWSのサービスを識別する。
IAMポリシーを作る時などにアクションとリソースを識別するときに使用する。

そういえば関係ないけどサービス名のプレフィックスでAmazonとAWSの違いは

  • Amazon: 単体のサービスとして利用出来る。
  • AWS: 他のAWSのサービスと組み合わせて利用する。

と,どこかで聞いた気がする。公式のどこかに書いてあったけな?

続きを読む

Auroraのメンテナンスイベントについて

Auroraのメンテナンスイベントについて知らなければ!という衝動に突き動かされたわけではなく
意図しないアップグレードで少しやられてしまったので必要に迫られた故、メモ書きする。

メンテナンスの種類

RDSのマネージメントコンソールのクラスターのメンテナンス列で確認できる模様。
確認時に気づいたけれど大幅にUIが変更されたなー。Lambdaは頻繁に変わっているイメージだけど。。。

image.png

利用可能(Available)と必須(Required)がある。

Availableなイベントは延期が可能で、Requiredなイベントはメンテナンスウィウンドウで自動実行される。

Requiredなイベントについて、事前に知る必要がある。

describe-pending-maintenance-actions

Auroraのメンテナンス通知はメールで届いたりしないので、自分でAPIを叩いてメンテナンス情報を取得する必要がある。

describe-pending-maintenance-actions

上記APIを叩くと、以下のようなレスポンスが取得できる。

{
    "PendingMaintenanceActions": [
        {
            "PendingMaintenanceActionDetails": [
                {
                    "Action": "system-update", 
                    "Description": "Aurora 1.16 release"
                }
            ], 
            "ResourceIdentifier": "arn:aws:rds:ap-northeast-1:XXXXXXXX:cluster:XXXXXXXXXXXXXX"
        }
    ]
}

Requiredや、Available等表示されない。
どのように知るか?

API Output

Action

Auroraクラスタのメンテナンスの場合、基本的には”os-upgrade”あるいは”system-update”が返される。

  • os-upgrade:
    AuroraクラスタのOS更新
  • system-update:
    AuroraクラスタのDBエンジン更新
  • db-upgrade:
    主にRDS DBインスタンスにおけるDBエンジンの更新

AutoAppliedAfterDate, ForcedApplyDate

  • AutoAppliedAfterDate:
    更新が適用されるメンテナンスウィンドウの指定。この項目で指定された日付以降の最初のメンテナンスウィンドウでアクションを実行される。
  • ForcedApplyDate:
    指定された場合、メンテナンスウィンドウ外でも指定された日時でメンテナンスが実行される。

「メンテナンスウィンドウ外でも」 

これは絶対チェックやな。

OptInStatus

AutoAppliedAfterDate, ForcedApplyDateが指定されない場合や、指定された日時よりも早くメンテナンスを実行したい場合はapply-pending-maintenance-actionを–opt-in-typeオプションを指定して実行することができる。
メンテナンスに対する選択(opt-in)状態を示す。
opt-in とは「事前許可を求めるやりかた」というようなことらしい。
この項目は明示的にapply-pending-maintenance-actionを実行した場合にのみ追加される。

apply-pending-maintenance-action
ステータスは以下。

  • next-maintenance:
    次のメンテナンスウィンドウ
  • immediate: 即座
  • undo-opt-in: next-maintenanceの指定がキャンセルされた

CurrentApplyDate

CurrentApplyDateは、AutoAppliedAfterDate, ForcedApplyDate, OptInStatusのすべてを考慮したうえで、「現時点で実際にメンテナンスの自動適用が予定されている日時」

結論

AutoAppliedAfterDate 、ForcedApplyDateが設定されているものがRequiredなイベントなので、事前にちゃんと知るようにする。

参考サイト

続きを読む