CloudFormation Lambda-backedカスタムリソースチュートリアルをやりました
2021/08/09
チュートリアル: Amazon マシンイメージ ID を参照するの手順に従ってやってみました。
サンプルのシナリオでは、カスタムリソースによってAMI IDを取得して、EC2インスタンスを起動します。
目次
サンプルパッケージをS3にアップロード
チュートリアルのLinuxAMI向けサンプルパッケージをダウンロードしました。
https://s3.amazonaws.com/cloudformation-examples/lambda/amilookup.zip
手順では、このままS3バケットを作ってアップロードですが、コードを見てみました。
Node.jsのjsファイルが1つ格納されたzipでした。
ec2.describeImagesで、AMI ID一覧を取得しています。
CloudFormationテンプレートURLを指定して実行
カスタムリソースはここで、ServiceTokenでLambdaのARNを指定していました。
1 2 3 4 5 6 7 8 9 |
"AMIInfo": { "Type": "Custom::AMIInfo", "Properties": { "ServiceToken": { "Fn::GetAtt" : ["AMIInfoFunction", "Arn"] }, "Region": { "Ref": "AWS::Region" }, "Architecture": { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } } }, |
EC2インスタンスのImageIdでカスタムリソースのIdを指定していました。
1 2 3 4 5 6 7 8 |
"SampleInstance": { "Type": "AWS::EC2::Instance", "Properties": { "InstanceType" : { "Ref" : "InstanceType" }, "ImageId": { "Fn::GetAtt": [ "AMIInfo", "Id" ] } } }, |
実行してみてLambdaのログ確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "RequestType": "Create", "ServiceToken": "arn:aws:lambda:us-east-2:123456789012:function:cfn-custom-test-AMIInfoFunction-61QM467KMJPS", "ResponseURL": "https://cloudformation-custom-resource-response-useast2.s3.us-east-2.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-2%3A354679900484%3Astack/cfn-custom-test/bf321240-b7b7-11eb-b482-0a855f8e3818%7CAMIInfo%7Cf49a0b92-ed7f-4ca3-897b-f55db96ee0c0?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20210518T090243Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7199&X-Amz-Credential=AKIAVRFIPK6PGI5JAKHW%2F20210518%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Signature=b36ccfaac4df0677559a3fb3237ec7ab3ca22248e26ddb25fd5337b152173f41", "StackId": "arn:aws:cloudformation:us-east-2:123456789012:stack/cfn-custom-test/bf321240-b7b7-11eb-b482-0a855f8e3818", "RequestId": "f49a0b92-ed7f-4ca3-897b-f55db96ee0c0", "LogicalResourceId": "AMIInfo", "ResourceType": "Custom::AMIInfo", "ResourceProperties": { "ServiceToken": "arn:aws:lambda:us-east-2:123456789012:function:cfn-custom-test-AMIInfoFunction-61QM467KMJPS", "Architecture": "HVM64", "Region": "us-east-2" } } |
eventに含まれるResponseURLに、以下のようなresponseを生成して、POSTしていました。
StackId、RequestId、LogicalResourceIdもeventに含まれていました。
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "Status": "SUCCESS", "Reason": "See the details in CloudWatch Log Stream: 2021/05/18/[$LATEST]72dda23573e44d8da5ff94fd5359f510", "PhysicalResourceId": "2021/05/18/[$LATEST]72dda23573e44d8da5ff94fd5359f510", "StackId": "arn:aws:cloudformation:us-east-2:123456789012:stack/cfn-custom-test/bf321240-b7b7-11eb-b482-0a855f8e3818", "RequestId": "f49a0b92-ed7f-4ca3-897b-f55db96ee0c0", "LogicalResourceId": "AMIInfo", "Data": { "Id": "ami-0609df53e9a5df49c" } } |
DataのIdを{ “Fn::GetAtt”: [ “AMIInfo”, “Id” ] }で取得して使用しているのですね。
終わったあとはスタックを削除しました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」を執筆いたしました
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」という本の第 …
-
WordPressをAmazon CloudFrontで配信してついでにACM(AWS Certificate Manager)を使って常時SSL化する
当サイトの500と502の発生状況がドイヒーであるとの苦情をいただきまして、Am …
-
AWS VPC ネットワークACLでHTTP(80)のみ許可する
ユーザーガイドのカスタムネットワーク ACLのうち、HTTP(80)を許可する設 …
-
Application Load Balancer スティッキーセッションでどれぐらい偏るかを偶然見ました
Amazon Linux2のPHPを7.2から7.3へアップデートしましたでアッ …
-
Lambda関数からAWS Systems Managerパラメータストアの値を取得して更新する
Lambda関数で自分自身の環境変数を更新する だと、Lambdaのエイリアスと …
-
AWS Storage Gatewayボリュームゲートウェイを作成してWindowsから使用
ボリュームゲートウェイの作成 Storage Gateway作成メニューからボリ …
-
AWS CloudFormationでAmazon DynamoDBテーブルを作ってアイテムを追加する
デモ用にDynamoDBテーブルを作って消して、ということをたまにするので、Cl …
-
Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)
やりたいこと Feedlyで共有したいフィードに特定のタグを付けます。 特定のタ …
-
ヤマムギ vol.24 API GatewayでREST API作成と直接DynamoDB登録のデモをしました
2週間ぶりのヤマムギ勉強会デモなのでなんだか久しぶりな気がしました。 今日はポケ …
-
API Gatewayで顧客レベルの使用量プランを設定する
API GatewayのAPIキーを使って使用量プランでのスロットリングも設定し …