আমি একই কার্যকারিতা খুঁজছিলাম। চাঁদমাইজারের পরামর্শ অনুসারে একটি নেস্টেড স্ট্যাক ব্যবহার করার বিষয়টি মাথায় আসে, তবে তখন আমি বুঝতে পারি যে আমার আসলে যা প্রয়োজন তা কাস্টম ফাংশন। ভাগ্যক্রমে ক্লাউডফোর্ডেশন এডাব্লুএস :: ক্লাউডফর্মেশন :: কাস্টম রিসোর্স ব্যবহারের অনুমতি দেয় যা কিছুটা কাজ করে, একজনকে এটি করতে দেয়। এটি কেবল ভেরিয়েবলের জন্য ওভারকিলের মতো মনে হয় (এমন কিছু আমি যুক্তি দিতাম যেটি ক্লাউডফর্মেশনটিতে প্রথম স্থানে থাকা উচিত ছিল), তবে এটি কাজটি সম্পন্ন করে এবং এর সাথে সাথে, সমস্ত পদক্ষেপের (পাইথন / নোড বেছে নিতে) অনুমতি দেয় / জাভা)। এটি লক্ষ করা উচিত যে ল্যাম্বদা ফাংশনগুলির জন্য অর্থ ব্যয় হয় তবে আমরা এখানে পেনিগুলি নিয়ে কথা বলি যদি আপনি আপনার স্ট্যাকগুলি প্রতি ঘন্টায় একাধিক বার তৈরি / মুছবেন না।
প্রথম পদক্ষেপটি হ'ল এই পৃষ্ঠায় একটি ল্যাম্বডা ফাংশন তৈরি করা যা ইনপুট মান গ্রহণ করা এবং আউটপুটে অনুলিপি করা ছাড়া কিছুই করে না। আমরা ল্যাম্বডা ফাংশনটি হরেক রকম পাগল স্টাফ করতে পারি, তবে একবার আমাদের পরিচয় ফাংশন হয়ে গেলে, অন্য কিছু সহজ। বিকল্পভাবে আমরা ল্যাম্বদা ফাংশনটি স্ট্যাকের মধ্যেই তৈরি হতে পারি। যেহেতু আমি 1 অ্যাকাউন্টে অনেকগুলি স্ট্যাক ব্যবহার করি, আমার কাছে লেফটভার ল্যাম্বদা ফাংশন এবং ভূমিকাগুলির পুরো গুচ্ছ থাকবে (এবং সমস্ত স্ট্যাকগুলি তৈরি করা দরকার --capabilities=CAPABILITY_IAM
, যেহেতু এটিরও একটি ভূমিকা প্রয়োজন।
ল্যাম্বদা ফাংশন তৈরি করুন
- ল্যাম্বদা হোম পৃষ্ঠায় যান এবং আপনার প্রিয় অঞ্চলটি নির্বাচন করুন
- টেমপ্লেট হিসাবে "ফাঁকা ফাংশন" নির্বাচন করুন
- "পরবর্তী" ক্লিক করুন (কোনও ট্রিগার কনফিগার করবেন না)
- পূরণ করো:
- নাম: ক্লাউডফর্মেশনআইডেন্টিটি
- বর্ণনা: এটি কী পায় তা ফিরিয়ে দেয়, মেঘ গঠনে পরিবর্তনশীল সমর্থন vari
- রানটাইম: পাইথন 2.7
- কোড এন্ট্রি প্রকার: কোড ইনলাইন সম্পাদনা করুন
- কোড: নীচে দেখুন
- হ্যান্ডলার সঠিক নয়:
index.handler
- ভূমিকা: একটি কাস্টম রোল তৈরি করুন। এই সময়ে একটি পপআপ খোলে যা আপনাকে একটি নতুন ভূমিকা তৈরি করতে দেয়। এই পৃষ্ঠার সবকিছু গ্রহণ করুন এবং "অনুমতি দিন" ক্লিক করুন। এটি ক্লাউডওয়াচ লগগুলিতে পোস্ট করার অনুমতি সহ একটি ভূমিকা তৈরি করবে।
- স্মৃতি: 128 (এটি সর্বনিম্ন)
- সময়সীমা: 3 সেকেন্ড (প্রচুর পরিমাণে হওয়া উচিত)
- ভিপিসি: ভিপিসি নেই
তারপরে কোড ক্ষেত্রের নীচে কোডটি অনুলিপি করুন। ফাংশনের শীর্ষটি হল সিএফএন-প্রতিক্রিয়া পাইথন মডিউলটির কোড , যা কোনও অদ্ভুত কারণে ক্লাউডফর্মেশনের মাধ্যমে ল্যাম্বডা-ফাংশনটি তৈরি করা হলে কেবল স্বয়ংক্রিয়ভাবে ইনস্টল হবে। handler
ফাংশন স্বশাসিত প্রশংসনীয় নয়।
from __future__ import print_function
import json
try:
from urllib2 import HTTPError, build_opener, HTTPHandler, Request
except ImportError:
from urllib.error import HTTPError
from urllib.request import build_opener, HTTPHandler, Request
SUCCESS = "SUCCESS"
FAILED = "FAILED"
def send(event, context, response_status, reason=None, response_data=None, physical_resource_id=None):
response_data = response_data or {}
response_body = json.dumps(
{
'Status': response_status,
'Reason': reason or "See the details in CloudWatch Log Stream: " + context.log_stream_name,
'PhysicalResourceId': physical_resource_id or context.log_stream_name,
'StackId': event['StackId'],
'RequestId': event['RequestId'],
'LogicalResourceId': event['LogicalResourceId'],
'Data': response_data
}
)
if event["ResponseURL"] == "http://pre-signed-S3-url-for-response":
print("Would send back the following values to Cloud Formation:")
print(response_data)
return
opener = build_opener(HTTPHandler)
request = Request(event['ResponseURL'], data=response_body)
request.add_header('Content-Type', '')
request.add_header('Content-Length', len(response_body))
request.get_method = lambda: 'PUT'
try:
response = opener.open(request)
print("Status code: {}".format(response.getcode()))
print("Status message: {}".format(response.msg))
return True
except HTTPError as exc:
print("Failed executing HTTP request: {}".format(exc.code))
return False
def handler(event, context):
responseData = event['ResourceProperties']
send(event, context, SUCCESS, None, responseData, "CustomResourcePhysicalID")
- "পরবর্তী" ক্লিক করুন
- "ফাংশন তৈরি করুন" ক্লিক করুন
আপনি এখন "টেস্ট" বোতামটি নির্বাচন করে ল্যাম্বডা ফাংশনটি পরীক্ষা করতে পারেন এবং নমুনার টেম্পলেট হিসাবে "ক্লাউডফর্মেশন তৈরির অনুরোধ তৈরি করুন" নির্বাচন করুন। আপনার লগে দেখতে হবে যে ভেরিয়েবলগুলি এটি খাওয়ানো হয়, তা ফিরে আসে।
আপনার ক্লাউডফর্মেশন টেমপ্লেটে ভেরিয়েবল ব্যবহার করুন
এখন আমাদের কাছে এই ল্যাম্বদা ফাংশন রয়েছে, আমরা এটি ক্লাউডফর্মেশন টেম্পলেটগুলিতে ব্যবহার করতে পারি। প্রথমে ল্যাম্বডা ফাংশনটি নোট করুন ( ল্যাম্বডা হোম পৃষ্ঠায় যান , সদ্য তৈরি ফাংশনটি ক্লিক করুন, আরনের উপরের অংশে ডানদিকে হওয়া উচিত, এর মতো কিছু arn:aws:lambda:region:12345:function:CloudFormationIdentity
)।
এখন আপনার টেমপ্লেটে, সংস্থান বিভাগে, আপনার ভেরিয়েবলগুলি নির্দিষ্ট করুন:
Identity:
Type: "Custom::Variable"
Properties:
ServiceToken: "arn:aws:lambda:region:12345:function:CloudFormationIdentity"
Arn: "arn:aws:lambda:region:12345:function:CloudFormationIdentity"
ClientBucketVar:
Type: "Custom::Variable"
Properties:
ServiceToken: !GetAtt [Identity, Arn]
Name: !Join ["-", [my-client-bucket, !Ref ClientName]]
Arn: !Join [":", [arn, aws, s3, "", "", !Join ["-", [my-client-bucket, !Ref ClientName]]]]
ClientBackupBucketVar:
Type: "Custom::Variable"
Properties:
ServiceToken: !GetAtt [Identity, Arn]
Name: !Join ["-", [my-client-bucket, !Ref ClientName, backup]]
Arn: !Join [":", [arn, aws, s3, "", "", !Join ["-", [my-client-bucket, !Ref ClientName, backup]]]]
প্রথমে আমি একটি Identity
ভেরিয়েবল নির্দিষ্ট করি যা ল্যাম্বদা ফাংশনের জন্য আরন ধারণ করে। এটিকে এখানে একটি ভেরিয়েবলের মধ্যে রাখার অর্থ এই যে আমাকে একবার এটি নির্দিষ্ট করতে হবে। আমি আমার সমস্ত ভেরিয়েবল টাইপ করি Custom::Variable
। ক্লাউডফর্মেশন আপনাকে Custom::
কাস্টম সংস্থানগুলির সাথে শুরু করে যে কোনও প্রকারের নাম ব্যবহার করতে দেয় ।
নোট করুন যে Identity
ভেরিয়েবলটিতে ল্যাম্বডা ফাংশনের জন্য দু'বার অর্ন রয়েছে। একবার ব্যবহার করার জন্য ল্যাম্বডা ফাংশন নির্দিষ্ট করতে হবে। ভেরিয়েবলের মান হিসাবে দ্বিতীয়বার।
এখন আমার Identity
ভেরিয়েবলটি রয়েছে তাই আমি নতুন ভেরিয়েবলগুলি সংজ্ঞায়িত করতে পারি ServiceToken: !GetAtt [Identity, Arn]
(আমি মনে করি জেএসএন কোড কিছুটা হওয়া উচিত "ServiceToken": {"Fn::GetAtt": ["Identity", "Arn"]}
)। আমি 2 টি নতুন ক্ষেত্র তৈরি করি, প্রতিটি 2 টি ক্ষেত্র সহ: নাম এবং অরণ। আমার বাকী টেম্পলেটটিতে আমি যখনই প্রয়োজন !GetAtt [ClientBucketVar, Name]
বা !GetAtt [ClientBucketVar, Arn]
যখনই এটি ব্যবহার করতে পারি।
সাবধানতা শব্দ
কাস্টম রিসোর্সগুলির সাথে কাজ করার সময়, যদি ল্যাম্বডা ফাংশনটি ক্র্যাশ হয়ে যায়, আপনি 1 থেকে 2 ঘন্টার মধ্যে আটকে রয়েছেন কারণ ক্লাউডফর্মেশন হাল ছাড়ার আগে এক ঘন্টার জন্য (ক্র্যাশড) ফাংশন থেকে জবাবের জন্য অপেক্ষা করে। সুতরাং আপনার ল্যাম্বদা ফাংশনটি বিকাশের সময় স্ট্যাকের জন্য একটি সংক্ষিপ্ত সময়সীমা নির্দিষ্ট করা ভাল।