ben*_*ben 5 amazon-web-services aws-cloudformation ssm amazon-ami
博客文章使用AWS Systems Manager参数存储查询最新的Amazon Linux AMI ID。AWS Compute Blog描述了如何始终在CloudFormation模板中引用发行版的最新版本。
# Use public Systems Manager Parameter
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref LatestAmiId
Run Code Online (Sandbox Code Playgroud)
这对于RedHat和CentOS等其他发行版如何工作?将使用什么参数存储路径?
kic*_*hik 13
正如@John Rotenstein 所说,SSM 似乎只有 Amazon Linux AMI。但是您仍然可以使用DescribeImages获得其他人。然后,您可以创建一个自定义资源来为您查询,并将结果用作 AMI 值。
Resources:
DescribeImagesRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action: sts:AssumeRole
Effect: Allow
Principal:
Service: lambda.amazonaws.com
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Policies:
- PolicyName: DescribeImages
PolicyDocument:
Version: '2012-10-17'
Statement:
- Action: ec2:DescribeImages
Effect: Allow
Resource: "*"
GetLatestAMI:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.6
Handler: index.handler
Role: !Sub ${DescribeImagesRole.Arn}
Timeout: 60
Code:
ZipFile: |
import boto3
import cfnresponse
import json
import traceback
def handler(event, context):
try:
response = boto3.client('ec2').describe_images(
Owners=[event['ResourceProperties']['Owner']],
Filters=[
{'Name': 'name', 'Values': [event['ResourceProperties']['Name']]},
{'Name': 'architecture', 'Values': [event['ResourceProperties']['Architecture']]},
{'Name': 'root-device-type', 'Values': ['ebs']},
],
)
amis = sorted(response['Images'],
key=lambda x: x['CreationDate'],
reverse=True)
id = amis[0]['ImageId']
cfnresponse.send(event, context, cfnresponse.SUCCESS, {}, id)
except:
traceback.print_last()
cfnresponse.send(event, context, cfnresponse.FAIL, {}, "ok")
CentOSAmi:
Type: Custom::FindAMI
Properties:
ServiceToken: !Sub ${GetLatestAMI.Arn}
Owner: "679593333241"
Name: "CentOS Linux 7 x86_64 HVM EBS *"
Architecture: "x86_64"
Run Code Online (Sandbox Code Playgroud)
您将更新中的值,CentOSAmi
以便找到正确的 AMI,然后将输出用于:
ImageId: !Ref CentOSAmi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1219 次 |
最近记录: |