• 検索結果がありません。

Lambda 関数を作成する

ラインを作成します。インスタンスタイプに応じて Amazon Linux オプションを選択します。パイプ ラインには任意の名前を使用できますが、このトピックの手順では MyLambdaTestPipeline を使用し ています。

2. パイプラインのステータスページの [AWS CodeDeploy アクション] で、[詳細] を選択します。デプロ イグループのデプロイの詳細ページで、リストからインスタンス ID を選択します。

3. Amazon EC2 コンソールのインスタンスの [Description (説明)] タブで、[パブリック IP] の IP アドレ ス (192.0.2.4 など) をコピーします。このアドレスを AWS Lambda で関数のターゲットとして使用 します。

Note

AWS CodePipeline のデフォルトサービスロールである AWS-CodePipeline-Service は、関数を呼 び出すために必要な Lambda アクセス権限を含むため、追加の呼び出しポリシーやロールを作成 する必要はありません。ただし、デフォルトサービスロールを変更、または別のものを選択した 場合、ロールのポリシーが lambda:InvokeFunction および lambda:ListFunctions 権限を 許可していることを確認してください。そうしない場合、Lambda アクションを含むパイプライ ンは失敗します。

ステップ 2: Lambda 関数を作成する

このステップでは、HTTP リクエストを生成し、ウェブページ上のテキスト行をチェックする Lambda 関 数を作成します。このステップの一環として、IAM ポリシーおよび Lambda 実行ロールを作成する必要が あります。詳細については、AWS Lambda 開発者ガイドの「アクセス権限モデル」を参照してください。

実行ロールを作成するには

1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/

iam/)を開きます。

2. [Policies] を選択してから、[Create Policy] を選択します[JSON] タブを選択して、次のポリシーを フィールドに貼り付けます。

{ "Version": "2012-10-17", "Statement": [

{

"Action": [ "logs:*"

],

"Effect": "Allow",

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

}, {

"Action": [

"codepipeline:PutJobSuccessResult", "codepipeline:PutJobFailureResult"

],

"Effect": "Allow", "Resource": "*"

} ] }

3. [ポリシーの確認] を選択します。

4. [ポリシーの確認] ページで、[名前] に、ポリシー名 (CodePipelineLambdaExecPolicy など) を入 力します。[説明] で Enables Lambda to execute code を入力します。

[Create Policy] を選択します。

ステップ 2: Lambda 関数を作成する

Note

これらは、Lambda 関数が AWS CodePipeline および Amazon CloudWatch とやり取りす るために必要な最小限のアクセス権限です。このポリシーを拡張して、関数が他の AWS リ ソースとやり取りできるようにする場合は、このポリシーを変更して、それらの Lambda 関 数に必要なアクションを許可する必要があります。

5. ポリシーダッシュボードページで、[ロール]、[ロールの作成] の順に選択します。

6. [ロールの作成] ページで、[AWS service (AWS のサービス)] を選択します。[Lambda] を選択し、

[Next: Permissions (次へ: アクセス許可)] を選択します。

7. [アクセス許可ポリシーをアタッチする] ページで、[CodePipelineLambdaExecPolicy] の横にある チェックボックスをオンにし、[Next: Review(次へ: 確認)] を選択します。

8. [確認] ページの、[ロール名] で名前を入力し、[ロールの作成] を選択します。

AWS CodePipeline で使用するサンプル Lambda 関数を作成するには

1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。

2. [関数] ページで、[関数の作成] を選択します。

Note

Lambda ページの代わりに [ようこそ] ページが表示された場合は、[今すぐ始める] を選択し ます。

3. [Create function] ページで、[Author from scratch] を選択します。[名前] に、Lambda 関数の名前を入 力します (たとえば、MyLambdaFunctionForAWSCodePipeline)。[説明] に関数のオプションの 説明を入力します (たとえば、A sample test to check whether the website responds with a 200 (OK) and contains a specific word on the page)。[ランタイム] で、

[Node.js 6.10] を選択し、以下のコードを [Function code (関数コード)] ボックスにコピーします。

Note

CodePipeline.job キーの下にあるイベントオブジェクトには、ジョブの詳細が含まれま す。AWS CodePipeline が Lambda に返す JSON イベントの完全な例については、「JSON イベントの例 (p. 163)」を参照してください。

var assert = require('assert');

var AWS = require('aws-sdk');

var http = require('http');

exports.handler = function(event, context) { var codepipeline = new AWS.CodePipeline();

// Retrieve the Job ID from the Lambda action var jobId = event["CodePipeline.job"].id;

// Retrieve the value of UserParameters from the Lambda action configuration in AWS CodePipeline, in this case a URL which will be

// health checked by this function.

var url =

event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters;

// Notify AWS CodePipeline of a successful job var putJobSuccess = function(message) { var params = {

jobId: jobId };

codepipeline.putJobSuccessResult(params, function(err, data) {

ステップ 2: Lambda 関数を作成する

if(err) {

context.fail(err);

} else {

context.succeed(message);

} });

};

// Notify AWS CodePipeline of a failed job var putJobFailure = function(message) { var params = {

jobId: jobId, failureDetails: {

message: JSON.stringify(message), type: 'JobFailed',

externalExecutionId: context.invokeid }

};

codepipeline.putJobFailureResult(params, function(err, data) { context.fail(message);

});

};

// Validate the URL passed in UserParameters if(!url || url.indexOf('http://') === -1) {

putJobFailure('The UserParameters field must contain a valid URL address to test, including http:// or https://');

return;

}

// Helper function to make a HTTP GET request to the page.

// The helper will test the response and succeed or fail the job accordingly var getPage = function(url, callback) {

var pageObject = { body: '', statusCode: 0,

contains: function(search) {

return this.body.indexOf(search) > -1;

} };

http.get(url, function(response) { pageObject.body = '';

pageObject.statusCode = response.statusCode;

response.on('data', function (chunk) { pageObject.body += chunk;

});

response.on('end', function () { callback(pageObject);

});

response.resume();

}).on('error', function(error) {

// Fail the job if our request failed putJobFailure(error);

});

};

getPage(url, function(returnedPage) { try {

// Check if the HTTP response has a 200 status assert(returnedPage.statusCode === 200);

// Check if the page contains the text "Congratulations"

// You can change this to check for different text, or add other tests as required

ステップ 3: AWS CodePipeline コンソー ルのパイプラインへの Lambda 関数の追加

assert(returnedPage.contains('Congratulations'));

// Succeed the job

putJobSuccess("Tests passed.");

} catch (ex) {

// If any of the assertions failed then fail the job putJobFailure(ex);

} });

};

4. [Role (ロール)] で、[既存のロールを選択] を選択します。[Existing role (既存のロール)] でロールを選 択し、[Create function (関数の作成)] を選択します。

5. [Handler (ハンドラ)] はデフォルト値のままにし、[Role (ロール)] もデフォルトの CodePipelineLambdaExecRole のままにします。

6. [基本設定] で [タイムアウト] で、[20] を選択します。

7. [Save] を選択します。

ステップ 3: AWS CodePipeline コンソールのパイプラ

関連したドキュメント