LoginSignup
15
15

More than 3 years have passed since last update.

Cloud9によるlambda開発入門

Last updated at Posted at 2019-08-31

はじめに

この記事ではLambdaの具体的なコーディングについては扱いません。
Cloud9 や CodeStar の動作について確認し、LambdaFunctionがどのようにデプロイされるのかを解説します。

Cloud9 によるLambda開発方法

Cloud9 でLambda開発を行う場合いくつかのアプローチがあります。

  1. Cloud9 でコーディングしLambdaConsoleから手動でデプロイする。
  2. Cloud9 のLambda連携機能によりデプロイする。
  3. CodeStarでLambdaを管理し、Cloud9 からCodeCommit にコミットする

LambdaConsoleでの手動デプロイについては、Cloud9 の機能では無く、
Cloud9 をエディタとして利用するだけですので、今回は省きます。

事前準備

Cloud9 のデプロイ

はじめにCloud9を用意します。
Cloud9ダッシュボードを開きCreate environmentをクリックします。
2019-08-31_16h52_55.png

Cloud9を識別するための名前を付けます。
2019-08-31_16h53_22.png

ダッシュボードで選べるインスタンスタイプは少し古い世代になっています。
T2インスタンスよりもT3インスタンスの方が安価ですので、
other Instance タイプ を選ぶ事をおすすめします。
2019-08-31_16h53_40.png

2019-08-31_16h54_00.png

OSと、自動シャットダウン時間を選択します。
2019-08-31_17h34_13.png

Cloud9はそのままの場合デフォルトVPCに作成されます。
特定のVPC、サブネットい配置したい場合は、Network Settings を開いて、VPCとサブネットを選択します。
2019-08-31_17h34_23.png

構成を確認し、Create environmentをクリックすると、CloudFormationによってCloud9がローンチされます。
このため、Cloud9InstanceのスペックをEC2ダッシュボードから変更するとドリフトが発生します。
2019-08-31_17h03_27.png

Cloud9 によるLambda直接開発

Cloud9にはLambdaを直接ローンチする機能があります。

Create environmentをクリックスするとそのままCloud9の画面に遷移します。
2019-08-31_16h55_21.png

あるいは、Cloud9ダッシュボードでOpen IDEボタンをクリックしてCloud9の画面を開きます。
2019-08-31_17h52_39.png

Cloud9の画面を開いたら右ペインのAWS Resources タブを開きます。
2019-08-31_16h56_48.png

Resourceタブには既存のLambda環境が表示されます。
2019-08-31_16h57_11.png

ここで、λマークをクリックすると新しいLambdaFunctionの作成ウィザードを起動できます。
2019-08-31_16h57_21.png

ウィザードでは初めにLambdaFunctionの名前を入力します。
2019-08-31_16h58_14.png

Nextで進むとブループリントが表示されます。サンプル内容や使用言語からブループリントを選択します。
2019-08-31_16h58_26.png

LambdaFunctionのトリガーを選択します。
2019-08-31_16h59_18.png

LambdaFunctionの割り当てメモリ、割り当てロールを選択します。
2019-08-31_16h59_32.png

設定を確認してFinishをクリックします。
2019-08-31_16h59_47.png

LambdaFunctionがローンチされ、LambdaFunctionのコードがCloud9に表示されます。
2019-08-31_17h00_42.png

LambdaFunctionはcloud9--<ファンクション名>-<ランダム文字列>という名称でローンチされます。
2019-08-31_17h01_34.png

Cloud9で作成されたファンクションはCloudFormationによって構築されます。2019-08-31_17h03_27.png

Cloud9でコードを更新したあと、右ペインでLambdaFunctionを選択し、deployをクリックします。
2019-08-31_17h04_19.png

変更をdeployするとCloudFormationによってアップデートがかかります。
2019-08-31_17h05_02.png

GitHubやCodeCommitのような継続的なコード管理を行わず、Lambdaのdeployや稼働中Lambdaの変更、テストであればこの機能により気軽にデプロイを行う事ができます。

削除

Cloud9単体によるLambdaデプロイはCloudFormationによって構築されます。
LambdaFunctionを消す場合には直接Lambdaを消すのでは無くCloudFormationの削除を行います。

Cloud9 とCodeStarによるLambda開発

Cloud9単体では、コード管理の無いLambda開発を行う事ができます。
CodeStarを利用する事で、ブランチを切りながらLambda開発を行う事が出来るようになります。

CodeStarの初期設定

CodeStar ダッシュボードを開き「プロジェクトを開始する」をクリックします。
2019-08-31_22h08_06.png

作成するプロジェクトタイプ、バックエンド、使用言語からテンプレートを選択します。
2019-08-31_22h10_07.png

プロジェクト名を入力します。
レポジトリには今回はGitHubではなく、CodeCommitを選択します。
2019-08-31_22h10_58.png

CodeStarによってCodePipeline, CodeCommit, CodeBuild, CloudFormation, CloudWatch が自動的に構成されます。
2019-08-31_22h11_21.png

2019-08-31_22h11_38.png

コードの編集方法にはCloud9を利用するためここではスキップします。
※CodeStarローンチ時に既にCloud9があったアメリカリージョンでは自動接続ができますが、2019年8月31日時点では東京リージョンでは自動接続機能がありません。
2019-08-31_22h11_51.png

プロジェクト設定完了後、しばらく待つとプトジェクトが作成されます。
2019-08-31_22h15_29.png

Cloud9の接続設定

Cloud9のターミナルからコマンドを実行します。
投入するコマンドは以下の通りです。
2019-08-31_22h49_45.png

Codeを編集したのが誰かわかるようにGitコマンドでユーザ情報を設定します。

ユーザ設定
git config --global user.name <ユーザー名>
git config --global user.email <メールアドレス>

続いて、Cloud9を利用しているIAMユーザーの権限でCodeCommitに接続出来るように認証情報ヘルパーの設定を行います。

認証ヘルパー設定
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true

CodeCommitの設定

CodeStarのコードからCodeCommitに移動します。
2019-08-31_22h15_29.png

CodeCommitを開いたら、「接続のステップ」を選択します。
2019-08-31_22h16_25.png

リポジトリのクローンコマンドが表示されるので、コピーボタンをクリックします。
2019-08-31_22h17_01.png

コピーしたコマンドをCloud9のコンソールで実行します。
2019-08-31_22h53_40.png

CodeCommit上のソースがCloud9にクローンされました。
2019-08-31_22h53_54.png

あとは、Cloud9上でコードを編集し、gitコマンドでpushすることで、CodeCommitが更新され、CodePipelineによって、自動的にビルド、デプロイが行われます。

CodeStarを利用する事で、コードの世代管理、ブランチ管理を行いながらあLambda開発を行う事ができるようになります。

削除

CodeStarにより構築されたリソースはCodeStarを削除すれば一緒に削除することができます。

まとめ

Cloud9のLambdaデプロイ機能で単体試験等を行い
CodeStar連携機能で本番デプロイを行うような使い方が良いのではないでしょうか。

なお、Cloud9に自動設定されている認証情報は同一アカウント内のCodeCommitにしか接続することができません。
クロスアカウントのCodeCommitに接続する場合には自動接続設定では無く
通常のLinuxサーバとして、認証情報を記載する必要があります。

Cloud9で自動接続設定以外のクレデンシャル情報を設定する場合にはPreferencesのAWS CredentialsでAWS Managed temporary credentialsを無効化します。

AWS Managed temporary credentialsを無効化すると/home/ec2-user/.aws/credentialsファイルが削除されるので、新たに/home/ec2-user/.aws/credentialsファイルを作成して以下の内容を入力します。

/home/ec2-user/.aws/credentials
[default]
aws_access_key_id = <IAMアクセスキー>
aws_secret_access_key = <IAMシークレットアクセスキー>
[アカウント名もしくはアカウントNo] 
role_arn = arn:aws:iam::<CodeCommitが存在するアカウントID>:role/<割り当てられたIAMロール> 
mfa_serial = arn:aws:iam::<IAMUserが存在するアカウントID>:mfa/<IAMユーザ名> 
source_profile = default

MFA設定がされていない場合は、mfa_serial行は不要です。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15