我目前这样做是为了从 lambda 函数启动 EC2 按需实例:
ec2 = boto3.resource('ec2', region_name='us-east-2')
instances = ec2.create_instances(
ImageId='ami-0c709cc4edbf9a8c0',
MinCount=1,
MaxCount=1,
KeyName="mykey",
InstanceType="m4.large",
IamInstanceProfile={'Arn': 'arn:aws:iam::231412431243:instance-profile/myimage'},
UserData=user_data_script
Run Code Online (Sandbox Code Playgroud)
我可以在此处添加一个属性来将其作为现货实例运行吗?
我有一个 Flask 应用程序,已将其克隆到我的 aws ec2 实例上。我只能使用虚拟环境运行它(我通过运行以下命令激活它):
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
$ pip install flask==1.1.1
Run Code Online (Sandbox Code Playgroud)
下面是我的应用程序:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
执行时运行得很好env FLASK_APP=app.py flask run。问题是,我想使用我的 aws ec2 的公共 IP 或主机名远程访问公开的路由。每当我尝试访问它时,我都会收到一个 tiemout 错误。我认为这是因为我在虚拟环境中运行烧瓶应用程序,但我不确定。我找不到任何关于如何揭露这一点的好的教程。我这里哪里出错了?
我是 AWS 新手并开始学习。在浏览安全组时,我发现我们可以基于 IP 地址应用规则,但不能基于 DNS 名称。
我参考了互联网上的几个页面:
它们为解决方案提供了替代机制。
但为什么 AWS 不允许呢?如果我们根据 DNS 名称配置安全组,是否存在我遗漏的任何安全问题?
我有两个带有私钥的服务器(实例),我想更改这些密钥而不停止服务器(实例)或创建新的密钥。
这可能吗?
amazon-ec2 amazon-web-services public-key key-pair private-key
我需要删除其 EBS 卷已删除的弹性块存储卷的快照。我想使用 Lambda 函数来完成此操作。我编写了一个脚本,如果 EBS 卷不存在,该脚本将返回 false。如何修改它以删除任何相关快照?
def get_snapshots():
account_ids = list()
account_ids.append( boto3.client('sts').get_caller_identity().get('Account'))
return ec2.describe_snapshots(OwnerIds=account_ids)
def volume_exists(volume_id):
if not volume_id: return ''
try:
ec2.describe_volumes(VolumeIds=[volume_id])
return True
except ClientError:
return False
def lambda_handler(event, context):
with open('/tmp/report.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([
'volume exists'
])
snaps = get_snapshots()
for snap in snaps.get('Snapshots'):
writer.writerow([
str(volume_exists(snap['VolumeId']))
])
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我使用以下方法成功创建了以下四个资源Cloud Formation Template (CFT):
现在,我正在尝试使用 EC2 实例创建一个安全组,这是代码。
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow http and ssh to client host
VpcId:
Ref: InsuranceVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
SecurityGroupEgress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "ami-08706cb5f68222d09"
KeyName:
Ref: "DevOpsAutomation"
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
GroupSet:
- Ref: "InsuranceSecurityGroup"
SubnetId:
Ref: "InsuranceSubnet"
Run Code Online (Sandbox Code Playgroud)
但是,当我在(CFT,如上所示,代码)中使用 Key …
amazon-ec2 amazon-web-services aws-cloudformation aws-cloudformation-custom-resource
IAM我已经根据策略创建了一个角色AmazonEC2FullAccess。这个角色是在 中正确创建的IAM。但同样的角色似乎并没有附加lambda功能。
有人可以帮忙吗?我有管理员访问权限,因此我收到以下错误。
(AccessDenied) when calling the PutMetricAlarm operation: User: arn:aws:sts::xxx:assumed-role/lambdaEC2fullaccess/StopEc2 is not authorized to perform: iam:CreateServiceLinkedRole on resource: arn:aws:iam::xxx:role/aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents"
我在自定义 VPC 中创建了 2 个私有子网 PRIVATEA 和 PRIVATEB。这些子网位于不同的可用区。在 PRIVATEA 中添加了 EC2 实例。该实例已附加 ENI eth0。接下来,我在另一个 PRIVATEB 子网中创建了一个 ENI,并将其附加到 PRIVATEB 子网中的 EC2 实例。设置成功。基本上我按照博客教程进行了此设置。它表示辅助接口将允许另一个组(即管理组)的流量。
但我无法将任何用例与它联系起来。谁能解释一下我们什么时候使用这样的设置?这是在本论坛中提出的正确问题吗?
谢谢
我需要向 Amazon S3 存储桶策略添加新行“arn:aws:sts::1262767:assumed-role/EC2-support-services”。
像这样的东西:
前:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]},
"Action":["s3:PutObject","s3:PutObjectAcl"],
"Resource":"arn:aws:s3:::awsexamplebucket1/*",
"Condition":{
"StringNotLike": {
"aws:arn": [
"arn:aws:sts::1262767:assumed-role/GR_COF_AWS_Prod_Support/*"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
后:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]},
"Action":["s3:PutObject","s3:PutObjectAcl"],
"Resource":"arn:aws:s3:::awsexamplebucket1/*",
"Condition":{
"StringNotLike": {
"aws:arn": [
"arn:aws:sts::1262767:assumed-role/GR_COF_AWS_Prod_Support/*",
"arn:aws:sts::1262767:assumed-role/EC2-support-services"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要使用什么 AWS CLI 命令来添加此行?
我正在寻找EC2通过终止多个实例AWS CLI。是的,可以通过执行以下命令来终止 EC2 实例。
句法:
aws ec2 terminate-instances --instance-ids <intance id> --profile <profile name>
例子:
aws ec2 terminate-instances --instance-ids <i-...> --profile xxx
但我有一个需要终止的大量实例列表,因此我正在寻找一种解决方案,通过提供实例 ID 列表来终止一批 EC2 实例。我尝试使用多个实例 ID,如下所示,但它们不起作用。
aws ec2 terminate-instances --instance-ids ("instance-id1", "intance-id2") --profile xxxaws ec2 terminate-instances --instance-ids ("instance-id1intance-id2") --profile xxxaws ec2 terminate-instances --instance-ids (instance-id1,intance-id2) --profile xxx请告诉我是否有可能终止一批实例。
command-line-interface amazon-ec2 amazon-web-services aws-cli
amazon-ec2 ×10
aws-lambda ×3
aws-cli ×2
python ×2
amazon-iam ×1
amazon-s3 ×1
aws-cloudformation-custom-resource ×1
aws-ebs ×1
boto3 ×1
flask ×1
key-pair ×1
private-key ×1
public-key ×1