Files
Jamie Tanna 210bf42b89 docs(tool-calling): centralise AWS configuration (#45586)
As we've got some duplication, we should centralise this into a specific
page under "tool calling".
2026-09-03 08:25:17 +00:00

184 lines
5.9 KiB
Markdown

!!! warning
This datasource is experimental.
Its syntax and behavior may change at any time!
This datasource returns the latest [Amazon Machine Image](https://docs.aws.amazon.com/en_en/AWSEC2/latest/UserGuide/AMIs.html) via the AWS API.
See [Calling AWS Services from Renovate](../../../calling-aws-services.md) for how to configure your credentials.
You can also provide credentials specifically for this datasource with a `hostRules` entry.
Set `hostType` to `aws-machine-image`, `username` to the access key ID, `password` to the secret access key, and optionally `token` to the session token:
```json
{
"hostRules": [
{
"hostType": "aws-machine-image",
"username": "access-key-id",
"password": "secret-access-key",
"token": "session-token"
}
]
}
```
These credentials only apply to Amazon Machine Image lookups.
When this host rule is absent or incomplete, Renovate uses the default AWS credential provider chain.
Read the [Developer guide](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/configuring-the-jssdk.html) for more information on configuration options.
The least IAM privileges required for this datasource are:
```json {configType=none}
{
"Sid": "AllowEc2ImageLookup",
"Effect": "Allow",
"Action": ["ec2:DescribeImages"],
"Resource": "*"
}
```
Read the [AWS IAM Reference](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html) for more information.
Because there is no general `packageName`, you have to use the [describe images filter](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-ec2/interfaces/describeimagescommandinput.html#filters) as minified JSON as a `packageName`.
Example:
```yaml
# Getting the latest official EKS image from AWS (account '602401143452' for eu-central-1) for EKS 1.21 (name matches 'amazon-eks-node-1.21-*') would look as a describe images filter like:
[
{
"Name": "owner-id",
"Values": [ "602401143452" ]
},
{
"Name": "name",
"Values": [ "amazon-eks-node-1.21-*" ]
}
]
# In order to use it with this datasource, you have to minify it:
[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.21-*"]}]
```
At the moment, this datasource has no "manager".
You have to use the custom manager for this.
**Usage Example**
Here's an example of using the custom manager:
```javascript
module.exports = {
customManagers: [
{
customType: 'regex',
managerFilePatterns: ['/.*/'],
matchStrings: [
'.*amiFilter=(?<packageName>.*?)\n(.*currentImageName=(?<currentDigest>.*?)\n)?(.*\n)?.*?(?<depName>[a-zA-Z0-9-_:]*)[ ]*?[:|=][ ]*?["|\']?(?<currentValue>ami-[a-z0-9]{17})["|\']?.*',
],
datasourceTemplate: 'aws-machine-image',
versioningTemplate: 'aws-machine-image',
},
],
};
```
Or as JSON:
```yaml
{
'customManagers':
[
{
'customType': 'regex',
'managerFilePatterns': ['/.*/'],
'matchStrings':
[
".*amiFilter=(?<packageName>.*?)\n(.*currentImageName=(?<currentDigest>.*?)\n)?(.*\n)?.*?(?<depName>[a-zA-Z0-9-_:]*)[ ]*?[:|=][ ]*?[\"|']?(?<currentValue>ami-[a-z0-9]{17})[\"|']?.*",
],
'datasourceTemplate': 'aws-machine-image',
'versioningTemplate': 'aws-machine-image',
},
],
}
```
**Note about `currentImageName`:**
The optional `currentImageName` comment is automatically updated by Renovate to track the actual AMI name corresponding to the AMI ID.
This provides human-readable context about which image version is being used.
When Renovate finds a newer AMI, it will update both the AMI ID and the `currentImageName` comment.
This would match every file, and would recognize the following lines:
```yaml
# With AMI name mentioned in the comments
# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.21-*"]}]
# currentImageName=amazon-eks-node-1.21-v20240703
my_ami1: ami-02ce3d9008cab69cb
# Only AMI, no name mentioned
# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]}]
# currentImageName=amazon-eks-node-1.20-v20240615
my_ami2: ami-0083e9407e275acf2
# Using custom aws profile and region
# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]},{"profile":"test","region":"eu-central-1"}]
# currentImageName=amazon-eks-node-1.20-v20240615
ami = "ami-0083e9407e275acf2"
# Without currentImageName comment (also works!)
# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.19-*"]}]
my_ami3: ami-0a1b2c3d4e5f6g7h8
```
```typescript
const myConfigObject = {
// With AMI name mentioned in the comments
// amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.21-*"]}]
// currentImageName=amazon-eks-node-1.21-v20240703
my_ami1: 'ami-02ce3d9008cab69cb',
};
/**
* AMI with name tracked in comment
* amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]}]
* currentImageName=amazon-eks-node-1.20-v20240615
*/
const my_ami2 = 'ami-0083e9407e275acf2';
/**
* Without currentImageName comment
* amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.19-*"]}]
*/
const my_ami3 = 'ami-0a1b2c3d4e5f6g7h8';
```
```hcl
resource "aws_instance" "web" {
# AMI with name tracked in comment
# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]}]
# currentImageName=amazon-eks-node-1.20-v20240615
ami = "ami-0083e9407e275acf2"
count = 2
source_dest_check = false
connection {
user = "root"
}
}
resource "aws_instance" "app" {
# Without currentImageName comment
# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.19-*"]}]
ami = "ami-0a1b2c3d4e5f6g7h8"
count = 1
}
```